学习笔记:
hive优化
1.join查询操作的基本原则:应该将条目少的表/子查询放在join操作符的左边,原因是在join操作的Reduce阶段,位于join操作符左边的表内容会被加载进内存,将条目少的表放在左边,可以减少发生内存溢出错误的几率。
2、group by 优化
数据倾斜聚合优化,设置参数hive.groupby.skewindata = true,当选项设定为 true,生成的查询计划会有两个 MR Job。第一个 MR Job 中,map 的输出结果集合会随机分布到 reduce 中,每个 reduce 做部分聚合操作,并输出结果,这样处理的结果是相同的 Group By Key 有可能被分发到不同的 reduce 中,从而达到负载均衡的目的;第二个 MR Job 再根据预处理的数据结果按照 Group By Key 分布到 reduce 中(这个过程可以保证相同的 Group By Key 被分布到同一个 reduce 中),最后完成最终的聚合操作。map端聚合,首先在map端进行初步聚合,最后在reduce端得出最终结果,相关参数:· hive.map.aggr = true是否在 map 端进行聚合,默认为 True· hive.groupby.mapaggr.checkinterval = 100000在 map 端进行聚合操作的条目数目
3、使用分区
Hive中的每个分区都对应hdfs上的一个目录,分区列也不是表中的一个实际的字段,而是一个或者多个伪列,在表的数据文件中实际上并不保存分区列的信息与数据。Partition关键字中排在前