数据倾斜及解决方案

数据倾斜

概述:

当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

数据倾斜及解决方案