hive 中join和Group的优化

  1. group by 优化
set hive.map.aggr = true; //是否在 Map 端进行聚合,默认为 True  ;该设置会消耗更多的内存。
set hive.groupby.mapaggr.checkinterval = 100000000; //在 Map 端进行聚合操作的条目数目
set hive.groupby.skewindata = true; //解决数据倾斜的万能钥匙

当map阶段运行不了的时候,可以设置 set hive.map.aggr = false;

说明

设置hive.map.aggr=true,提高HiveQL聚合的执行性能。
set hive.map.aggr = true; 
这个设置可以将顶层的聚合操作放在Map阶段执行,从而减轻清洗阶段数据传输和Reduce阶段的执行时间,提升总体性能。
缺点:该设置会消耗更多的内存。
注:顶层的聚合操作(top-levelaggregation operation),是指在group by语句之前执行的聚合操作。例如,

hive> SET hive.map.aggr=true;
hive> SELECTcount(*), avg(salary)FROM employees group by ** having max()>1
  1. join 优化
set hive.skewjoin.key=100000; //是join的键对应的记录条数超过这个值则会进行分拆,值根据具体数据量设置
set hive.optimize.skewjoin=true;--如果是join 过程出现倾斜 应该设置为true

你可能感兴趣的:(hive编程指南)