Trees
TreeNode, Expression, LogicalPlan, PhysicalPlan
Transformations
Analyzer, Optimizer, Planner
Rules
RuleExecutor
Sequence
Query/Dataset/DataFrame(SessionCatalog) -(Antlr)> Unresolved/Parsed Logical Plan -(Analyser)> Analyzed Logical Plan -(Optimizer)> Optimized Logical Plan -(SparkPlanner)> Physical Plan -> SparkPlan#execute
解析(Parse):将SQL语句通过Parse模块进行词法和语法解析,解析完成后生成未绑定的逻辑执行计划(Unresolved LogicalPlan),之后步骤在该逻辑执行计划上运用各种规则。
绑定(Bind):使用Analyser中的Analysis规则(Rule),借助于元数据(Hive Metastore等),将未绑定的逻辑执行计划转换成绑定元数据的逻辑执行计划(LogicPlan)。
优化(Optimizer):使用Optimization规则(Rule),将绑定的逻辑执行计划进行合并、列裁剪和过滤器下推等优化后生成优化后的逻辑执行计划(Optimized LogicPlan)。
转换(Transform):使用Planner使用Planning Strategies,对优化后的逻辑执行计划转换(Transform)生成可执行的物理执行计划(PhysicalPlan)。
执行(Execution):调用SparkPlan的execute执行计算RDD。
Links
- Deep Dive into Spark SQL’s Catalyst Optimizer
- Spark SQL: Relational Data Processing in Spark
- Spark SQL, DataFrames and Datasets Guide
- Author:HyperJ
- Source:HyperJ’s Blog
- Link:Spark SQL Catalyst