[toc]

1.介绍,原理,原因

见 hive中的数据倾斜

2. 解决方案

  1. ++自定义分区++,这需要用户自己继承partition类,指定分区策略,这种方式效果比较显著。

  2. 重新设计key,++有一种方案是在MAP阶段时给KEY加上一个随机数++,有了随机数的key就不会被大量的分配到同一节点(小几率),++待到REDUCE后再把随机数去掉++即可。(大表连接大表的情况可以用)

  3. ++使用combinner合并++,combinner是在map阶段,reduce之前的一个中间阶段,在这个阶段可以选择性的把大量的相同key数据先进行一个合并,可以看做是local reduce,然后再交给reduce来处理,这样做的好处很多,即减轻了map端向reduce端发送的数据量(减轻了网络带宽),也减轻了map端和reduce端中间的shuffle阶段的数据拉取数量(本地化磁盘IO速率)

原文链接:https://blog.csdn.net/weixin_35353187/article/details/84303518