数据倾斜是怎么发生的?
数据倾斜:shuffle过程数据分布不均匀。
shuffle:洗牌。
分步式计算,相同key的数据会到一个节点去处理。
举个例子:某宝想统计各个商家的一年销售额,有的商家卖了很多产品,但有的商家比较冷清,一年到头,卖不了多少东西,我想要对整年的所有商家的订单做个汇总,也就是,同一商家销售额数据累加到一起。你就会发现,你的hive,mr,spark程序,运行到某个阶段,突然不动了。这是因为,在shuffle过程中,有的商家数量比较少,但是有些商家是数量比较多,其他商家已经计算完了,他还在一直计算,一直占用资源,导致整个Job不能停止。这就是数据倾斜。
我们的数据,倾斜到一部分key里去了,数据跑到一个节点去计算了。在聚合的时候不太明显,但是数据和其他数据做join的时候更加明显。
总体来讲:数据倾斜会造成,一个人累死,多个人闲死的现象。