自适应查询优化(Adaptive Query Execution, AQE) 是 Spark 3.0 版本引入的重大特性之一,可以在运行时动态的优化用户的 SQL 执行计划,很大程度上提高了 Spark 作业的性能和稳定性。AQE 包含动态分区合并、Join 数据倾斜自动优化、动态 Join 策略选择等多个子特性,这些特性可以让用户省去很多需要根据作业负载逐个手动调优...
而AdaptiveSparkPlanExec在InsertAdaptiveSparkPlan中被调用 ,而InsertAdaptiveSparkPlan在QueryExecution中被调用 而在InsertAdaptiveSparkPlan.shouldApplyAQE方法和supportAdaptive中我们看到 private def shouldApplyAQE(plan: SparkPlan, isSubquery: Boolean): Boolean = {conf.getConf(SQLConf.ADAPTIVE_EXECUTION_FORCE_APP...
首先得是ShuffleQueryStageExec操作 如果非空分区比列大于nonEmptyPartitionRatioForBroadcastJoin,也就是spark.sql.adaptive.nonEmptyPartitionRatioForBroadcastJoin,则不会把mergehashjoin转换为broadcastJoin 这在sql中先join在groupby的场景中比较容易出现 ShufflePartitionsUtil.coalescePartition分析(合并分区的核心代码) 见coale...
从spark configuration,到在最早在spark 1.6版本就已经有了AQE;到了spark 2.x版本,intel大数据团队进行了相应的原型开发和实践;到了spark 3.0时代,Databricks和intel一起为社区贡献了新的AQE spark 3.0.1中的AQE的配置 分析1 在OptimizeSkewedJoin.scala中,我们看到ADVISORY_PARTITION_SIZE_IN_BYTES,也就是spark.sql....
简介: 【spark系列3】spark 3.0.1 AQE(Adaptive Query Exection)分析(一) AQE简介 从spark configuration,到在最早在spark 1.6版本就已经有了AQE;到了spark 2.x版本,intel大数据团队进行了相应的原型开发和实践;到了spark 3.0时代,Databricks和intel一起为社区贡献了新的AQE spark 3.0.1中的AQE的配置 分析1 在...
每个分区的平均大小不超过spark.sql.autoBroadcastJoinThreshold设定的值,即shuffle read阶段每个分区 来自buildIter的记录要能放到内存中 streamIter的大小是buildIter三倍以上 spark3.0 adaptive-query-execution 自适应查询框架优化时机:在shuffle的物化阶段,完成的当前阶段检索运行时统计信息,并相应地更新逻辑,当查询开始...
spark.sql.adaptive.enabled: 设置为true以启用Adaptive Execution。 spark.sql.adaptive.shuffle.targetPostShuffleInputSize: 指定每个Shuffle Read Task的目标大小(以字节为单位),默认值为64m。 spark.sql.adaptive.maxNumPostShuffleDynamicPartitionsPerQuery: 控制每个查询可以动态创建的最大分区数,默认值是200。
spark.sql.adaptive.enabled: 设置为true以启用Adaptive Execution。 (图片来源网络,侵删) spark.sql.adaptive.shuffle.targetPostShuffleInputSize: 指定每个Shuffle Read Task的目标大小(以字节为单位),默认值为64m。 spark.sql.adaptive.maxNumPostShuffleDynamicPartitionsPerQuery: 控制每个查询可以动态创建的最大分区数...
AQE-applied queries contain one or more AdaptiveSparkPlan nodes, usually as the root node of each main query or sub-query. Before the query runs or when it is running, the isFinalPlan flag of the corresponding AdaptiveSparkPlan node shows as false; after the query execution completes, the ...
Internals - AdaptiveSparkPlanExec What happens then during the physical execution? First, Apache Spark creates the initial version of the new plan from the starting physical plan. It does it increateQueryStages(plan: SparkPlan)method and the outcome of this operation is an instance ofCreateStage...