1 个回答
Spark中的数据倾斜问题主要指shuffle过程中出现的数据倾斜问题,是由于不同的key对应的数据量不同导致的不同task所处理的数据量不同的问题。其主要有两个表现:
1、Spark作业的大部分task都执行迅速,只有有限的几个task执行的非常慢,此时可能出现了数据倾斜,作业可以运行,但是运行得非常慢
2、Spark作业的大部分task都执行迅速,但是有的task在运行过程中会突然报出OOM,反复执行几次都在某一个task报出OOM错误,此时可能出现了数据倾斜,作业无法正常运行
解决方案:1、避免不必要的shuffle:如使用广播小表的方式,将reduce-side-join提升为map-side-join
2、过滤导致倾斜的key :如果在Spark作业中允许丢弃某些数据,那么可以考虑将可能导致数据倾斜的key进行过滤,滤除可能导致数据倾斜的key对应的数据。
3、sample采样对倾斜key单独进行join:当数据量非常大时,可以考虑使用sample采样获取10%的数据,然后分析这10%的数据中哪个key可能会 导致数据倾斜,然后将这个key对应的数据单独提取出来 。
4、提高shuffle操作中的reduce并行度:提高reduce端并行度并没有从根本上改变数据倾斜的本质和问题,只是尽可能地去缓解和减轻shuffle reduce task的数据压力以及数据倾斜的问题。
发布于:3个月前 (01-22) IP属地:四川省
我来回答
您需要 登录 后回答此问题!