4. 数据倾斜
数据分配不均衡
根本原因:
一:数据本身就是倾斜的,某种数据过多(无法干预)
二:分配规则:
MapReduce/Hive:默认分区的规则Key哈希取余之后得到Reduce个数
情况:
两个reduce,所有的哈希取余都为0
一个reduce处理完所有数据
解决:
MapReduce:设计java代码
方案一:给key添加随机数
方案二:通过MapReduce的分区规则,随机分区
再使用一个MapReduce来处理上一步的结果,做最终的聚合
方案三:开启MapReduce中的Combiner
Hive/SQL:
SQL调优的本质就是把不需要参加join的数据过滤掉