SPARK SQL运行原理

正常的SPARK SQL执行会先经过SQL Parser解析SQL,然后经过Catalyst优化器处理,最后到spark执行,其中包括以下几个重要的部分:

  • SQL Parse:sql解析器将sql解析为抽象语法树,即Unresolved Logical Plan
  • Analysis:利用Catalog信息将Unresolved Logical Plan解析成Analyzed Logical plan
  • Logical Optimization:利用一些规则将Analyzed Logical plan解析成Logic plan
  • Physical Planning:Logical plan是不能被spark执行的,而这个过程是把Logic plan转换为多个Physical plans,然后利用代价模型选择最佳的physical plan;
  • Code Generation:sql逻辑生成Java字节码

 

一、SQL文本解析

-- 测试代码
select a.id, a.mount, b.mount
from (
(select id, mount from t1 where city = '上海' and area_id != null) a
left outer join 
(select id, mount from t1 where city = '重庆' and area_id != null) b
on a.id = b.id
) tmp
where a.mount >= 100


-- 在spark中查看逻辑执行计划, 打印如下,抽象语法树,
val spark = SparkSession.build().master("local[*]").appName("parse").getOrCreate()
spark.sessionState.sqlParser.parsePlan(sql)

 

 

二、逻辑计划绑定元数据

frame.explain("extended") // explain默认打印的是物理执行计划,extended物理和逻辑都打印

 

 

 

三、优化逻辑计划

 

posted @ 2021-12-23 19:36  Shydow  阅读(198)  评论(0编辑  收藏  举报