数据倾斜产生的原因
数据倾斜的原因很大部分是join倾斜和聚合倾斜两大类
Hive倾斜之group by聚合倾斜
- 原因:
- 分组的维度过少,每个维度的值过多,导致处理某值的reduce耗时很久;
- 对一些类型统计的时候某种类型的数据量特别多,其他的数据类型特别少。当按照类型进行group by的时候,会将相同的group by字段的reduce任务需要的数据拉取到同一个节点进行聚合,而当其中每一组的数据量过大时,会出现其他组的计算已经完成而这个reduce还没有计算完成,其他的节点一直等待这个节点的任务执行完成,所以会一直看到map 100% reduce99%的情况;
- 解决方法:
- set hive.map.aggr=true;
- set hive.groupby.skewindata=true;
- 原理:
- hive.map.aggr=true 这个配置代表开启map端聚合;
- hive.groupby.skewindata=true,当选项设定为true,生成的查询计划会有两个MR Job。当第一个MR Job中,Map的输出结果结合会随机分布到Reduce中,每个Reduce做部分聚合操作,并输出结果。这样处理的结果是相同的Group By Key有可能被分发到不同的Reduce中,从而达到负载均衡的目的。第二个MR Job再根据预处理的数据结果按照Group By Key分布到reduce中,这个过程可以保证相同的key被分到同一个reduce中,最后完成最终的聚合操作。
Hive倾斜之Map和Reduce

最低0.47元/天 解锁文章
6120

被折叠的 条评论
为什么被折叠?



