在计算各省份的GMV时,有可能会发生数据倾斜,解决办法如下:

  1. 分组聚合
    1. 预聚合思想 map-side(预聚合在map里面)
    2. skew-groupby(多个reduce阶段进行汇总):先对倾斜的key加上随机数,均匀分发到不同的reduce,进行一次聚合,然后去掉随机数,再发到一个reduce进行聚合。
  2. 表与表的关联
    1. map-join:大表JOIN小表
    2. skew-join:如果检测到有key比较多的,那么单独开启一个mapjoin去计算,其他正常的使用common join
    3. 分桶join:大表JOIN大表
  3. 如何判断是key发生数据倾斜?
    1. limit
    2. table_sample 抽样函数