我在面试设计方案时遇到了一个问题。但是我怀疑像在 hive 中设计架构时,我们遵循规范化过程还是不需要?请帮我理解

最佳答案

使用Hive,一个好的做法是对数据进行非规范化。

联接需要使用精简器,这意味着数据已在随机播放阶段排序。如果需要对联接表中的字段进行过滤,则需要一个映射,一个随机播放,一个reduce(用于连接)和另一个映射过滤器。
(除非您的表中的一个足够小以适合映射器内存-默认情况下为10Mb)

map (读取)->随机播放(排序)->减少(合并)-> map (过滤器)->减少(写入)

在map阶段对非规范化表中存在的字段进行过滤。

map (读取+筛选)->随机(排序)->减少(写入)

您可以使用高级存储格式(ORCfile,Parquet等)获得更好的性能,这些格式会将一些元数据与数据一起存储,从而允许在过滤阶段跳过块(将谓词向下推到存储层)

仅当您使用map-reduce配置单元引擎时,该答案才有效。将另一个引擎与Hive(Tez,Spark等)或另一个SQL-in-Hadoop软件(Impal,Dri​​ll等)结合使用,可能会观察到不同的行为。

您可以在Hive manual page中找到有关联接的更多信息。

关于hadoop - 配置单元中的架构规范化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25905223/

10-16 02:58