怎么解决 MapReduce 的数据倾斜?
现象:Mapreduce 程序在运行的时候,运行了大部分,但是还有部分 reduce 还在运行,甚至长时间运行,最终导致整个程序运行时间很长才结束。 产生原因:reduce 程序处理的 key的条数比其他 key 的条数大很多,这也就造成了分配到数据巨大的 key 的节点长时间运行。
本质讲数据倾斜就是数据分布不均。 解决办法:
1)增加 reduce 的 jvm 内存
2)增加 reduce 个数
3)自定义 partition
4)设定 combiner
5)如果数据倾斜很大的话,将那部分倾斜的数据可以单独过滤出来做计算 或者自定义分区
分散倾斜的数据
6)针对个别 key 或者少量 key 数据量特别大的,可以对该 key 进行改造,生成多个新的 key
分别处理,然后再进行聚合处理(分而治之)
欢迎来撩 : 汇总all