Spark SQL 优化器的优化是建立在整个 Spark SQL 原理基础之上。所以我们首先来回顾一下 Spark SQL 的执行流程,如下图所示。 图中的 Optimizer,就是 Spark SQL 优化器。Optimizer 是通用名字,实际上有不同的实现。优化器与之前的分析层类似,需要用到元数据信息协助它做优化。 无论是分析器还是优化器,都是规则执...
Optimizer,根据各种RBO,CBO优化策略得到optimized logical plan/OLP,主要是对Logical Plan进行剪枝,合并等操作,进而删除掉一些无用计算,或对一些计算的多个步骤进行合并 other Optimizer是catalyst工作最后阶段了,后面生成physical plan以及执行,主要是由sparkSql来完成。 SparkPlanner 优化后的逻辑执行计划OLP依然是逻辑的,并...
上文Spark SQL 内部原理中介绍的 Optimizer 属于 RBO,实现简单有效。它属于 LogicalPlan 的优化,所有优化均基于 LogicalPlan 本身的特点,未考虑数据本身的特点,也未考虑算子本身的代价。 本文将介绍 CBO,它充分考虑了数据本身的特点(如大小、分布)以及操作算子的特点(中间结果集的分布及大小)及代价,从而更好的选择执...
一、Optimizer Optimizer这个类是在catalyst里的optimizer包下的唯一一个类。Optimizer的工作方式事实上相似Analyzer,由于它们都继承自RuleExecutor[LogicalPlan],都是运行一系列的Batch操作: Optimizer里的batches包括了3类优化策略:1、Combine Limits 合并Limits2、ConstantFolding 常量合并3、Filter Pushdown 过滤器下推,每...
在这时,Spark SQL引擎会应用一系列的优化规则和转换操作,即RBO(Rule-Based Optimizer)如谓词下推和...
执行一系列transformation操作,最后执行一个Action后//才会去触发Spark SQL后续的SQL执行流程,包括Analyzer、Optimizer、SparkPlan、execute PysicalPlan//首先看parseSql()方法,传入SQL语句,调用SqlParser解析SQL,获取Unresolved LogicPlan//parseSql(),总结一下,就是调用了SqlParser的apply()方法,即由SqlParser将SQL语句...
Catalyst Optimizer 支持基于规则和基于成本的**优化。在基于规则的优化中,基于规则的优化器使用一组规则来确定如何执行查询。而基于成本的优化则找到最合适的方式来执行SQL语句。在基于成本的优化中,使用规则生成多个计划,然后计算它们的成本。 3. Catalyst Optimizer 的需求是什么?
Optimizer 优化器是整个Catalyst的核心,上文提到优化器分为基于规则优化和基于代价优化两种,此处只介 绍基于规则的优化策略,基于规则的优化策略实际上就是对语法树进行一次遍历,模式匹配能够满 足特定规则的节点,再进行相应的等价转换。因此,基于规则优化说到底就是一棵树等价地转换为 另一棵树。SQL中经典的优化规则有...
Spark SQL 性能优化再进一步:CBO 基于代价的优化 本文转发自技术世界,原文链接http://www.jasongj.com/spark/cbo/ Spark CBO 背景 上文Spark SQL 内部原理中介绍的 Optimizer 属于 RBO,实现简单有效。它属于 LogicalPlan 的优化,所有优化均基于 LogicalPlan 本身的特点,未考虑数据本身的特点,也未考虑算子本身的...