首页/数据/数据工程与 ETL 速查/Shuffle 原理与调优
本包目录(311 条)
管道基础52 条
Kafka64 条调度与编排40 条数仓建模52 条数据质量50 条CDC 与同步53 条

Shuffle 原理与调优

shuffle 是宽依赖算子(group by、join、distinct、排序)跨节点重分区的过程,伴随磁盘落盘与网络传输,是批作业成本的主要来源之一。

触发按 key 重分区:聚合、连接、去重、排序
代价磁盘 IO、网络传输、序列化开销
优化预聚合、广播小表、AQE 合并小分区

Spark 相关配置

Spark 相关配置
spark.sql.shuffle.partitions=400        # 默认 200,按数据量调整
spark.sql.adaptive.enabled=true         # 3.x 默认开启,自动合并小分区
spark.sql.autoBroadcastJoinThreshold=10485760   # 小表广播阈值(默认 10MB)
小表 join 大表优先广播(map 端完成),可避免大 shuffle;要确认小表真正放得进内存。

易错点

  • shuffle 分区数固定过大时小文件与调度开销上升,过小时单分区过大易 OOM
  • 广播的表被高估大小时会报内存错误,需要调阈值或降级为普通 join

数据来源与参考

  • Apache Spark 官方文档:Tuning Spark / Shuffle Behavior
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌