Spark SQL架构分析

Spark SQL的查询优化是Catalyst,其基于Scala语言开发,可以灵活利用Scala原生的语言特性方便地扩展功能,奠定了Spark SQL的发展空间。 ......

Spark SQL与传统DBMS的查询优化器+执行器的架构较为类似,只不过其执行器是在分布式环境中实现,并采用Spark作为执行引擎。

Spark SQL的查询优化是Catalyst,其基于Scala语言开发,可以灵活利用Scala原生的语言特性方便地扩展功能,奠定了Spark SQL的发展空间。

  1. Catalyst将SQL翻译成最终的执行计划,并在这个过程中进行查询优化。
  2. 这里和传统不太一样的地方就在于,SQL经过查询优化器最终转换为可执行的查询计划,传统DB就可以执行这个查询计划了,但spark不同。
  3. Spark SQL***执行还是会在Spark内将执行计划转换为Spark的有向无环图DAG再执行。

Catalyst的整体架构

从图8-2中可以看到整个Catalyst是Spark SQL的调度核心,遵循传统数据库的查询解析步骤,对SQL进行解析,转换为逻辑查询计划和物理查询计划,最终转换为Spark的DAG执行

Catalyst的执行流程

 

 

  1. SqlParser将SQL语句转换为逻辑查询计划
  2. Analyzer对逻辑查询计划进行属性和关系关联检验
  3. 之后Optimizer通过逻辑查询优化将逻辑查询计划转换为优化的逻辑查询计划
  4. QueryPlanner将优化的逻辑查询计划转换为物理查询计划
  5. prepareForExecution调整数据分布
  6. ***将物理查询计划转换为执行计划进入Spark执行任务。

【本文为51CTO专栏作者“王森丰”的原创稿件,转载请注明出处】