9.3.5 group by 优化

默认情况下,Map 阶段同一 Key 数据分发给一个 reduce,当一个 key 数据过大时就倾斜了。

很多聚合操作可以放在 Map 阶段来完成, 并不是所有的聚合必须在 Reduce 阶段完成, 最后在Reduce端得出最终结果。

  1. 开启 Map 聚合
    hive.map.aggr = true
    
  2. 设置在 Map 聚合的的条目数的上限.,超过该值则进行分拆,默认是100000
    hive.groupby.mapaggr.checkinterval = 100000
    
  3. 有数据倾斜的时候进行负载均衡

    hive.groupby.skewindata = true
    

    当选项设定为 true,生成的查询计划会有两个 MR Job。

    第一个 MR Job 中,Map 的输出结果会随机分布到 Reduce 中,每个 Reduce 做部分聚合操作,并输出结果,这样处理的结果是相同的 Group By Key 有可能被分发到不同的 Reduce 中,从而达到负载均衡的目的;

    第二个 MR Job 再根据第一个 MR Job 的数据结果按照 Group By Key 分布到Reduce中(这个过程可以保证相同的Group By Key被分布到同一个Reduce中),最后完成最终的聚合操作。

Copyright © 尚硅谷大数据 2019 all right reserved,powered by Gitbook
该文件最后修订时间: 2018-11-20 18:14:22

results matching ""

    No results matching ""