Spark SQL执行流程
在Spark SQL的运行架构中,逻辑计划(logical plan)贯穿了大部分过程,其中, Catalyst的SqlParser, Analyzer,Optimizer都要对逻辑计划进行操作;最终形成可执行的物理计划 (physical plan)。
SqIContext是使用sqlContext.sql ( sqlText)提交用户的查询语句,调用DataFrame(this," parseSql(sqlText))对SQL语句进行处理,执行流程如下:
- 使用SqlParser对SOL语句进行解析,生成Unresolved逻辑计划(没有提取Schema信息);
- 使用Catalyst分析器,结合数据字典( catalog)进行绑定,生成Analyzed逻辑计划,在此过程中,Schema Catalog则要提取Schema信息;
- 使用Catalyst优化器对Analyzed逻辑计划进行优化,按照优化规则得到Optimized,逻辑计划;
- 接下来需要和Spark Planner进行交互,使用策略( strategy)到plan,使用Spark Planner将逻辑计划转换成物理计划,然后调取next函数,生成可执行物理计划。
- 调用toDF,最后生成DataFrame。
Spark SQL特点
数据兼容方面
不同的数据源组件扩展方面
重新定义组件(解析器、分析器)性能优化方面
采取了内存列式存储、
动态字节码生成,提升了复杂表达式求值查询的速率
内存缓存数据支持多种语言
Boy-20180727