Spark数据倾斜处理
2022/1/9 23:04:29
本文主要是介绍Spark数据倾斜处理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、数据倾斜产生的原因
spark job中绝大多数task执行得非常快,但个别task执行缓慢。或者原本线上运行的job是正常,但在某天由于特殊原因报出OOM的异常,观察发现是因为代码本身造成的。
一般来说,发生数据倾斜是在程序进行shuffle的时候,必须将各个节点上相同的key拉取到某个节点上的task来进行处理,此时如果某个key的数据量远远大于其他的key,则会发生数据倾斜;
在程序中定位数据倾斜的代码块:倾斜只会发生在shuffle的过程中,比如:distinct,reduceByKey,groupByKey,join,cogroup,repartition等算子;
二、Spark中数据倾斜的解决方案
1)上游预处理:一般我们处理的数据存在hive里面,对于存在热key可以在hive里面进行预处理,但这种方法仍然在hive里面会引起数据倾斜,请看hive中数据倾斜优化;
2)过滤导致倾斜的key:如果热key只是少数几个,对于计算本身没有影响的话,可以选择过滤掉该key;
3)提高shuffle的并行度:在使用shuffle算子时,可以增加算子的并行度,reduceByKey(200), 200即为算子在执行时的reduce task的数量,在spark sql中可以设置参数:spark.sql.shuffle.partitions,改值默认是200;当然此方案只是能够缓解数据倾斜,但最终对于热key还是无法解决,热key仍然只会发送到一个task里面;
4)两阶段聚合:加盐,第一次局部聚合,给每个key打上一个随机数,对含有随机数key的数据进行reduceByKey操作,再将前缀随机数去掉,在进行全局聚合,这种方法只能用于聚合类算子;
5)map join
6)采样倾斜key并分拆join操作:sample算子
这篇关于Spark数据倾斜处理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)