当前位置:   article > 正文

hivesql 效率优化_设置参数hive.groupby.skewindata为true能提高效率吗

设置参数hive.groupby.skewindata为true能提高效率吗
1.group by 数据倾斜问题
   
   hive是根据group by 的key进行数据分发的,某个key相同的数据太多的会被分发到一个reducer上,key的数据分布不均匀会导致大量数据被shuffle到某个或者某些reducer上,出现严重的数据倾斜,使得数据计算变慢

   配置任务参数   set hive.groupby.skewindata=true;
  
   原理:该配置会触发hive增加额外的mr过程,随机化key后进行聚合操作得到中间结果,再对中间结果执行最终的聚合操作

   注意:count(distinct) 操作比较特殊,无法进行中间的聚合操作,因此该参数对有count(distinct)操作的sql不适用,如果有count(distinct)的需求可以优化sql,先进行一步group by进行变形

2.map优化

   大表join小表时候可以使用map join

   配置参数  set hive.auto.convert.join=true;

   原理:使用该配置,hive会自动识别比较小的表,继而用mapJoin来实现两个表的联合

3.count(distinct)优化

   是第一个问题的延伸,包含count(distinct)操作必须在一个reducer上完成,数据倾斜不能使用预聚合的方式进行优化

   配置参数:使用group by替代 count(distinct) 操作,使用group by将count(distinct)等价替换掉

 4.join 数据倾斜
  
   hive 根据 join key 对两边表的数据进行shuffle,若key数据分布不均匀会出现数据倾斜的现象

   优化方案:
   
   1.保证两种表的粒度是正确的,join key在至少至少一张表中是不重复的,否则会出现类似笛卡尔积的效果,造成数据膨胀

   2.如果join key是无意义的空值等,直接剔除掉再进行关联

   3.对join key 进行随机化处理

   set hive.mapred.mode=nonstrict;
   
   在join过程中对key进行随机化处理
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/975959
推荐阅读
相关标签
  

闽ICP备14008679号