Spark两个rdd join发生数据倾斜的典型情况

有两个RDD,分别是RDDA[Ka, Va] 和 RDDB[Kb, Vb],数据量都比较大,在做join操作的时候,可以看出,shuffle read 有严重的数据倾斜现象,导致拖慢了整个 job 的速度:
Spark两个rdd join发生数据倾斜的典型情况


其实从上述问题中,可以看出来,index=0 的 task 必然有问题,如果不熟悉自己的数据分布的话,很容易误以为自己的数据分布是均匀的,所以建议打印出来前十个 key 出来看看。

否则就可能出现必须加大 executor 的内存量,不然某个 task 所在的 executor 有可能因为数据太多,内存撑爆导致 OOM,加大了内存,又导致内存浪费,所以正确的做法,是先了解自己数据的基本面,再去写业务代码的逻辑。