Appearance
Spark Shuffle、数据倾斜和 Join 优化:为什么任务总卡在少数几个 Stage
Spark 任务慢,最常见的原因之一就是:
- Shuffle 太重
- 数据倾斜明显
很多时候任务不是整体都慢,而是:
- 少数几个 Task 特别慢
先说结论
Spark 性能治理里最值得优先关注的,通常是:
- Join 两边数据量和分布是否合理
- 有没有明显热点 Key
- Shuffle 是否可以减轻
- 是否有更合适的 Join 策略
一、为什么数据倾斜特别麻烦
因为一旦某些 Key 特别热,就会导致:
- 少数分区数据特别多
- 少数 Task 运行特别久
最终拖慢整批作业。
二、Join 为什么经常是问题中心
因为大多数重型 Spark 作业,最后都绕不开:
- 多表关联
这时如果:
- 分布不均
- 过滤不够早
- Join 策略不合适
任务成本就会迅速放大。
三、优化更应该先看什么
- 哪个 Stage 最慢
- 哪些 Task 明显长尾
- 是否存在热点 Key
- 能不能先过滤再 Join
一句话总结
Spark 作业卡慢时,最重要的不是先调很多参数,而是先搞清楚:
- 慢到底是不是由 Shuffle 和数据倾斜放大的