4. 数据倾斜

数据分配不均衡

  • 根本原因:

    • 一:数据本身就是倾斜的,某种数据过多(无法干预)

    • 二:分配规则:

      • MapReduce/Hive:默认分区的规则Key哈希取余之后得到Reduce个数

      • 情况:

        • 两个reduce,所有的哈希取余都为0

        • 一个reduce处理完所有数据

  • 解决:

    • MapReduce:设计java代码

      • 方案一:给key添加随机数

      • 方案二:通过MapReduce的分区规则,随机分区

        • 再使用一个MapReduce来处理上一步的结果,做最终的聚合

      • 方案三:开启MapReduce中的Combiner

    • Hive/SQL:

      SQL调优的本质就是把不需要参加join的数据过滤掉