1,避免shuffle。
shuffle是数据倾斜的根本来源,如果能用map端解决就只用写map程序最好
2,增加ReduceTask
增加了ReduceTask后可以提高并行度,分配到每个分区的数据变少了,但是不能根本解决问题,有局限性
3,map端局部聚合(Combiner)
Combiner 的输出是 Reducer 的输入,Combiner 绝不能改变最终的计算结果Combiner 只应该用于那种 Reduce 的输入 key/value与输出 key/value 类型完全一致,且不影响最终结果的场景。比如累加,最大值等。应用场景也有限。
4,修改分区规则
比如key随机拼接reduceTask个数,让key平均分发,然后再一次串联MR程序
参考链接:https://blog.csdn.net/qq_37933018/article/details/106891923
https://blog.csdn.net/qq_37933018/article/details/106563062