一、背景
Spark SQL 通过缓存优化、分区管理、统计信息利用和动态执行计划调整等技术,显著提升 DataFrame 或 SQL 任务的性能。合理配置以下策略可解决数据倾斜、内存溢出、执行效率低下等常见问题。
二、核心优化方案
1. 数据缓存
将热点数据存入内存,减少重复扫描:
关键配置参数:
提示:通过 spark.conf.set 或 SQL 命令 SET key=value 动态修改配置。
2. 分区优化
读写阶段分区控制
Spark SQL 分区配置参数表:
3. 分区合并
通过 SQL 注释动态调整输出文件数量:
支持 COALESCE, REPARTITION, REPARTITION_BY_RANGE, REBALANCE 等策略。
4. 统计信息利用
Spark 依赖统计信息选择最优执行计划,来源包括:
数据源
元数据
运行时
5. Join 策略优化
自动广播连接(Broadcast Join):
Spark SQL 广播连接配置参数表:
Join 策略提示:
强制指定 Join 策略(优先级:BROADCAST > MERGE > SHUFFLE_HASH > SHUFFLE_REPLICATE_NL):
注意:Spark 可能因 Join 类型限制忽略提示。
三、自适应查询执行(AQE)
配置开关:
Spark SQL 自适应查询执行(AQE)配置参数表
AQE 子功能详解
1. 合并 Shuffle 分区
解决小文件问题,避免过多任务
Spark SQL 自适应分区合并配置参数表:
2. 处理倾斜 Shuffle 分区
Spark SQL 倾斜分区优化配置参数表:
3. Join 类型动态转换
转广播连接
转 Shuffled Hash Join
4. 倾斜 Join 优化(Skew Join)
动态拆分数据倾斜的分区:
四、存储分区连接(Storage Partition Join)
适用场景
核心配置
效果示例(Iceberg 表):
五、总结
缓存策略
分区优化
AQE 优势(≥3.2.0 默认开启)
自动合并小分区
动态处理数据倾斜
Join 策略运行时优化
存储分区连接(≥3.3.0)
版本适配
Spark 3.0+ 重点使用 AQE
Spark 3.3+ 探索 Storage Partition Join
旧版(<3.0)依赖手动调优(广播阈值/分区数)
终极建议:优先升级至 Spark 3.x 并启用 AQE,再针对性调整数据倾斜与分区参数。









暂无评论内容