Spark SQL 性能调优大师
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_69009747/spark-sql-performance-tuner。
技能介绍
你在生产里常遇到的情况
Spark SQL 作业跑完几小时,Spark UI 里某个 Stage 只有一两个 Task 拖尾;Shuffle Read 上百 GB,Exchange 成了整条 DAG 的瓶颈;小表 Join 没走 Broadcast,Driver 还因为 collect() 或倾斜 key 直接 OOM。这些问题往往混在一起,单靠调 spark.sql.shuffle.partitions 很难对症。
技能覆盖的核心能力
本技能按调优全景组织,而不是零散参数清单:
- 数据倾斜:从倾斜诊断入手,覆盖 7 类典型场景——单 key 极大(含 null)、大表 Join 小表、两张大表都倾斜、GroupBy/窗口函数倾斜、读写小文件、笛卡尔积等,并给出加盐、两阶段聚合、Broadcast、
skewJoin等对应修复思路。 - Shuffle 与执行计划:分区数如何设、AQE(自适应查询执行)与动态分区裁剪(DPP)在什么条件下起作用。
- Join 策略:对照 Broadcast Hash Join、Sort Merge Join、Shuffle Hash Join 等的触发条件与适用场景,避免选错 Join 类型。
- Spark UI 读数:从 Stages(Shuffle 读写、Task 时长分布、输入量)、Executors(GC、Spill)、SQL 视图里的 Scan/Exchange/Join 等维度判断瓶颈,并配合生产 Checklist(如
spark.sql.adaptive.enabled、spark.sql.adaptive.skewJoin.enabled、Kryo、动态分配等)和常见问题对照表(OOM、GC、小文件过多)。
适用边界
内容面向 Spark SQL / DataFrame 批处理调优,假设你能打开 Spark UI 并改集群或 Session 级配置。它不能替代对业务 SQL 与表统计信息的理解;RDD 时代的 groupByKey 等反模式会点到,但主线仍是 SQL 与 Catalyst 优化器语境。版本差异(尤其 Spark 2.x 与 3.x 的 AQE 默认值)需结合你集群实际版本核对。
使用场景
- 离线 ETL 在 Spark UI 里某个 Stage 出现个别 Task 时长远超中位数,需要按倾斜诊断区分是 Join、GroupBy 还是 Exchange 导致。
- 维表足够小的大表 Join 仍产生巨量 Shuffle Read,需要对照 Join 策略表判断是否应走 Broadcast 并在 SQL 中使用 broadcast hint。
- 聚合或窗口在 null 或单一 hot key 上严重倾斜,需要按 SKILL 中七类场景选择加盐、两阶段聚合或开启 skew join 相关配置。
- 作业即将上生产集群,需要逐项核对 adaptive、shuffle 分区数、Kryo 与避免 collect 等 Checklist,并对照 FAQ 预防 OOM 与小文件问题。
适合人员
- 维护数仓 Spark 批流水线的数据平台工程师,需要从 Stages 的 Shuffle 读写与 Task 分布里定位拖尾根因。
- 在共享 YARN/K8s 集群上提交复杂 SQL 的数据工程师,遇到个别 Task 极慢、Driver OOM 或 Shuffle 体积异常时需要系统化排查。
- 负责 Spark 作业发版审查的平台或数据 SRE,希望用统一的 UI 指标与生产 Checklist 评审配置而非凭经验改参数。
- 正在将批处理从 Spark 2.x 迁到 3.x 的架构或开发同学,需要确认 AQE、DPP 与 skew join 等项是否按规范默认或显式开启。