Spark数据倾斜问题处理

tu

一、判断是否是数据倾斜

看读取时间:数据来源,如Kafka,数据库读取

运行本身:数据问题

二、数据处理:

1)数据预处理

一是hive或sparkSQL预处理,过滤无用的key,或者在闲时处理倾斜数据

二是key-value 改为 key-values 的形式

2)动态监控key,利用redis等内存级别的数据库,并做处理。或添加key处理流程

三、改变并行度

1)算子指定(reduceByKey)

2)spark.defaule.paraller (80-100)cores的2-3倍

3)使用coalesce改变分区(repartition 会造成shuffle)

4)在读取数据时指定,比如textfile,minPartitions

5)继承父类RDD中的分区

四、mapJoin:将小的RDD进行广播

拓展:特殊情况,也可将大的数据进行广播,可以减少shuffle和内存使用,限制条件高(内存要大于数据量)

五、对key进行处理

1)抽样,取出数据倾斜的key:单独处理或者加随机数

2)大量倾斜的key,对一个RDD进行扩容N,另一个RDD进行随机数N。N越大,越不容易数据倾斜。但是会造成其他性能问题

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容