在最近的项目中,历史和实时数据进行关联平滑时出现了数据倾斜,产生了笛卡尔积,具体现象如下:运行内存175GB,核数64,运行代码时,查看SparkUI界面的active jobs ,数据输入是1G,成功的stage为0,一直是0/120,由此,通过排查,的确发生笛卡尔积
Spark数据倾斜产生的原因及解决办法:
Spark数据倾斜主要在shuffle过程中由于不同的key对应的数据量不同导致,具体表现是不同的task处理的数据量不同。在Spark作业中,如果存在可能导致数据倾斜的key,可以考虑将这个key进行过滤,滤除可能导致数据倾斜的数据,从而在Spark作业中避免数据倾斜。另外,提高shuffle过程中的reduce端并行度,即增加reduce端的task数量,可以使得每个task分配到的数据量减少,从而缓解数据倾斜问题。
可参考文章: