FAQ-spark作业数据倾斜优化

问题描述/异常栈

spark作业数据倾斜优化
spark ui查看stage发现有数据倾斜的情况,
shuffereadshuffewrite均有数据倾斜的情况

FAQ-spark作业数据倾斜优化 - 图1

并且查看sql执行图里有连续shuffehushjoin的节点

FAQ-spark作业数据倾斜优化 - 图2

解决方案

set spark.sql.optimizer.forceShuffleBeforeJoin.enabled=true

conf.spark.sql.optimizer.forceShuffleBeforeJoin.enabled=true

问题原因

这个参数使用场景很局限,当观测到 SQL 执行图上,有连续的这样的节点,并且
发生数据倾斜,才去建议用户使用,否则可能让任务变慢很多
参数解析:
适用场景
数据倾斜严重:当数据倾斜问题导致Join操作变得非常慢时,可以考虑启用这个
选项。
数据分区不均匀:当数据分区不均匀导致部分任务数据量过大时,可以通过
Shuffle重新分区来优化。
不适用场景
数据已经分区良好:如果数据已经经过预处理并且分区非常均匀,强制Shuffle
可能会引入不必要的开销。
小规模数据集:对于小规模数据集,Shuffle的开销可能会超过其带来的性能提升。

作者:chenjie