数据倾斜及解决方案
数据倾斜
概述:
当reducer端从mappertask中去抓取属于它自己的数据的时候大量的相同的key被分到了同一个reducer区(shuffer)
原因:
当上游的数据需要分组到下游任务的时候,数据出现了不均匀的现象
1.key的性质,
2.key本身不好
3.(shuffer)
现象:
绝大多数的ReducerTask都执行的非常快 但有个别的ReducerTask执行的非常慢
解决方案:
1.不取模 没有分区 就没有reducer了 就避免了shuffer
2.无法避免shuffer,将从mapper端输出的K 在mapper端就打散 让它在reducer端出现的概率基本均衡
3.加内存 提高reducer端的并行度 也就是增加聚合运算的机器
4上游局部聚合(combiner组件) 提前聚合减轻reducer端的负担
5.重新设计key