Glue 4.0中Spark SQL的Union操作执行过慢,求Spark配置优化建议
Glue 4.0多Union查询性能优化的Spark配置调整
针对你遇到的Glue 3.0切换到4.0后,含多Union的长查询耗时剧增的问题,可通过以下Spark配置调整来优化:
开启自适应分区合并,优化Union后的分区数量
Glue 4.0基于Spark 3.3,默认的Union操作可能生成大量小分区,导致任务碎片化。开启自适应分区合并让Spark自动调整分区数:spark.sql.adaptive.enabled=true spark.sql.adaptive.coalescePartitions.enabled=true spark.sql.adaptive.coalescePartitions.minPartitionNum=64 # 根据集群核心数调整,建议为核心数的2-4倍 spark.sql.adaptive.shuffle.targetPostShuffleInputSize=128mb # 设置合并后每个分区的目标大小禁用可能导致执行计划复杂化的优化规则
Spark 3.3新增的UnionMerge优化规则在多Union嵌套场景下可能产生低效执行计划,可临时排除该规则:spark.sql.optimizer.excludedRules=org.apache.spark.sql.catalyst.optimizer.UnionMerge另外,若开启了动态分区裁剪,复杂Union场景下可能额外增加开销,可尝试关闭:
spark.sql.optimizer.dynamicPartitionPruning.enabled=false调整Shuffle相关参数,减少小文件合并开销
调大Shuffle排序的旁路合并阈值,避免频繁的小文件Merge操作:spark.shuffle.sort.bypassMergeThreshold=1000配置Glue专属执行策略与分区数
使用Glue动态执行策略适配复杂查询,并设置合理的Shuffle分区数:spark.glue.execution.strategy=dynamic spark.glue.shuffle.partitions=500 # 根据数据总量调整,避免过多或过少分区
额外建议:通过Glue控制台查看两个版本的执行计划差异,重点检查Union阶段的分区数量、Shuffle操作是否异常,定位具体的性能瓶颈点。
内容的提问来源于stack exchange,提问作者Abhijith Nagarjuna
相关产品推荐
相关产品推荐

