数据倾斜笔记整理
其实数据倾斜,最根本的原因就是某个分区被分配了过多的数据,那么解决数据倾斜的本质就是减少该分区的数据量。
我们可以从下面几个思路上考虑解决方法。
第一、就是让该分区的数据被分配到其他分区,对应的方法如下表:
序号 | 方法 | 适用范围 | 备注 |
---|---|---|---|
1. | 增加Reduce个数 | 适用于多个Key对应大量数据且被分配到同一分区的情况 | 增加Reduce可以让MR的分区函数把这些Key对应的数据重新分配其他分区 |
2. | 自定义Partitioner | 适用于多个Key对应大量数据且被分配到同一分区的情况 | 目的是把原来分到一个分区的Key分到多个分区 |
3. | 给Key增加随机数 | 适用于一个Key对应大量数据的情况 | 该方法需要在Reduce端进行随机数的去除操作 |
第二、就是提前进行聚合减少分区的数据
序号 | 方法 | 适用范围 | 备注 |
---|---|---|---|
1. | Map端combinner | 适用非排重的计算,如count,sum等 | 如果是distinct并不适合这种方法 |
第三、其他方式方法
序号 | 方法 | 适用范围 | 备注 |
---|---|---|---|
1. | 数据分离处理 | 即把倾斜的数据拿出来单独处理 | 如访问日志有很多用户ID未0,则可以选择剔除、或抽离单独进行计算 |
PS:暂时就能想到这些,有遗漏或错误之处,欢迎指出,大家相互学习
网友评论