Bootstrap

Spark数据倾斜原因及解决方法

Spark数据倾斜原因
1、数据倾斜只会发生在Shuffle过程,Shuffle时需将各节点的相同key的数据拉取到某节点上的一个task来处理,比如大部分key对应10条数据,小部分key对应10万条,那就会发生数据倾斜
2、shuffle并行度不够

解决办法
首先要定位问题,看数据倾斜发生在哪个Stage,这个可以查看日志或者web ui(8080端口),主要看最慢的Stage各task分配的数据量,然后根据Stage划分,推算发生数据倾斜的代码。(必然有Shuffle类算子 …bykey,join,distinct,repartition等)。
如果是代码的问题,可以对代码进行优化,比如用map join 代替reduce join,如果是聚合类算子,先局部聚合再全局聚合(对key加随机数前缀进行聚合,去掉前缀再聚合)。
如果是数据的问题,可以用filter过滤掉异常的key。
如果是并行度不够的问题,可以提高shuffle write和shuffle read的并行度。

;