spark sql 核心Catalyst 优化器
Spark SQL的核心是Catalyst优化器,对 SQL 或者DSL 代码解析生成逻辑计划,并对逻辑计划进行优化的查询优化器。
无论使用DSL还是SQL,构建Job的DAG图一样的,性能是一样的,原因在于SparkSQL中引擎:Catalyst:将SQL和DSL转换为相同逻辑计划(LogicalPlan)
什么是逻辑计划
就是我对我的sql 和 dsl 先不去执行, 先分析一下流程 要怎样执行,使用那些rdd ,然后进行优化
流程
image.png
SparkSQL 内核(Catalyst优化器).png
SparkSQL Catalyst 运作原理:对sql 或者dsl 代码解析转换成逻辑计划,并对逻辑计划进行优化
逻辑计划分为三种
Unresolved Logical Plan :未分析逻辑计划 parse模块
logiocal plan : 逻辑计划 analyser模块
Optimized Logical Plan:优化后逻辑计划 optimized模块
过程:
1.经过parse模块将sql或者dsl 代码转换成解析逻辑计划(就是未分析的逻辑计划)
2.对为分析的逻辑计划经过 Analyser 模块读取catalog元数据进行分析 得到逻辑计划 logical plan
3.对逻辑计划使用规则优化(RBO) 得到优化后logical plan
RBO: Based-Rule Optimized
总结:
SparkSQL中由于Catalyst优化器存在,使得无论基于SQL还是DSL分析数据,性能都是一样的,并且底层做了很多优化
扩展:
SparkSQL中对SQL和DSL包含2步优化:
第1步优化:RBO基于规则Rule优化,对逻辑计划进行优化
第2步优化:CBO基于代价Cost优化,选择逻辑计划转换多个物理计划,以代价成本最低选择
RBO 优化和CBO优化。
- 基于规则优化/Rule Based Optimizer/
RBO; - 基于代价优化/Cost Based Optimizer/
CBO;
image.png