Spark SQL 深度解析与性能调优——专栏导览

专栏简介

Apache Spark 从 2.x 开始,SQL 引擎(Spark SQL)已经超越 RDD API 成为绝大多数 Spark 作业的实际执行路径。无论是 DataFrame 操作、结构化流处理,还是直接执行 SQL 查询,最终都经过同一套查询引擎处理:Catalyst 优化器 + Physical Planner + 代码生成 / 向量化执行

然而,大量 Spark 从业者只会写 SQL 和 DataFrame,面对慢查询时只会机械地增加资源或调整几个常见参数,却无法从执行计划层面找到真正的瓶颈。根本原因是:不理解 SQL 引擎内部在做什么

本专栏从三个维度系统覆盖 Spark SQL 全栈:

  1. 引擎原理(01-05 篇):SQL 文本如何变成 RDD 执行?Catalyst 的 Rule 体系如何工作?物理计划如何选择 Join 策略?
  2. 运行时优化(06-08 篇):AQE 如何在运行时动态调整计划?Whole-Stage CodeGen 如何消灭虚调用开销?向量化引擎如何用列式处理压榨 SIMD 性能?
  3. 工程调优(09-12 篇):列式存储的 I/O 裁剪如何实现?数据倾斜如何系统性解决?如何读懂执行计划定位瓶颈?

专栏目录

序号文章标题核心主题
01Spark SQL 全局架构:从 SQL 文本到 RDD 执行的完整旅程SparkSession;Parser→Analyzer→Optimizer→Planner→RDD 五阶段;三种 API 统一路径
02Catalyst 解析与分析:从 AST 到 Logical PlanAntlr4 Parser;Unresolved LogicalPlan;Analyzer 与 Catalog;Resolution 规则;类型推断
03Catalyst 逻辑优化:Rule-Based Optimizer 核心规则谓词下推;列裁剪;常量折叠;子查询消除;自定义 Rule 扩展
04CBO 代价模型:统计信息驱动的执行计划选择ANALYZE TABLE;列直方图;Join Reordering;CBO 与 RBO 协作;CBO 失效场景
05Physical Planning:从逻辑计划到物理算子的策略选择SparkStrategy;五种 Join 策略选择条件与代价;Bucket Join 消除 Shuffle
06AQE:运行时自适应查询优化QueryStage 物化边界;动态分区合并;动态 Join 策略切换;Skew Join 自动优化
07Whole-Stage CodeGen:JVM 字节码级别的性能飞跃Volcano 模型虚调用开销;CodeGen 原理;生成代码分析;触发条件与禁用场景
08向量化执行引擎:列式处理与 SIMD 加速向量化 vs CodeGen;Arrow 列式内存;Parquet 向量化读取;Photon 引擎;Native Execution 趋势
09数据源与 I/O 优化:Parquet/ORC/Delta 的读写性能Row Group/Page 结构;谓词下推到文件层;列统计信息;分区裁剪;小文件合并
10数据倾斜系统性解决方案倾斜根因分类;Salting/Broadcast/AQE Skew Join/自定义 Partitioner;效果对比
11Spark SQL 调优实战:从执行计划读懂性能瓶颈EXPLAIN 解读;关键算子性能特征;Exchange 节点代价;调优推导链路
12Spark SQL 全参数速查手册按场景分组的核心参数;参数联动关系;常见误配与生效条件

阅读路径建议

引擎原理路线(适合想理解”为什么”的读者): 01 → 02 → 03 → 04 → 05 → 06 → 07 → 08

性能调优路线(适合有具体问题要解决的读者): 01(了解全貌)→ 06(AQE)→ 09(I/O)→ 10(倾斜)→ 11(实战)→ 12(参数)

向量化专项路线07(CodeGen 基础)→ 08(向量化)


与已有专栏的关系

专栏主要覆盖内容本专栏的关联
Spark RDD 核心原理解析RDD 五大属性、窄/宽依赖、迭代模型本专栏的物理执行最终落地为 RDD,作为底层背景
Spark Shuffle 与内存管理ExternalSorter、Spill、统一内存模型Join 策略章节涉及 Shuffle,原理见该专栏
Spark 调度系统与执行模型DAGScheduler、TaskScheduler、ExecutorSQL 最终提交到调度系统,调度细节见该专栏
Spark 容错与状态管理Checkpoint、State Store、WatermarkStructured Streaming 有状态算子的基础,见该专栏

技术版本说明

本专栏以 Apache Spark 3.3 / 3.4 为基准版本。涉及 AQE(Spark 3.0+)、Whole-Stage CodeGen(Spark 2.0+)、向量化读取(Spark 3.0+ 增强)等特性时,会明确标注版本引入时间及演进历史。


关联专栏