Using Catalyst in Spark SQL

在SparkSQL中, 把一条SQL语句转化成对应的RDD任务, 完成这一过程(后续用"解析SQL到RDD"过程代替这一过程)全部在Catalyst框架实现.

 

"解析SQL到RDD"这一过程, 主要包含了4个组成部分, 如下图所示

Using Catalyst in Spark SQL_第1张图片

  • analyzing a logical plan to resolve references(分析逻辑计划用于解析引用)

SparkSQL开始是一个待计算的关系, 要么是被SQL parser返回的abstract syntax tree(AST), 要么是使用API构造的DataFrame对象.

这两种情况下,待计算的关系都包含unresolved 属性引用或者关系. (简单说,就是缺失schema)

SparkSQL用Catalyst Rules和一个Catalog对象从元数据找到schema, 构建Logical Plan.

  • logical plan optimization(逻辑计划优化)

Logical Optimiztion阶段应用标准的RBO(rule-based optimization)去优化Logical Plan.

RBO包括constant folding、predicate pushdown(谓词下推)、projection pruning、null propagation、Boolean expression simplification等等规则.

  • physical planning(物理计划)

The Physical Planning阶段, 根据Optimized Logical Plan生成一个或多个物理计划. 用cost model选择一个计划. 这个阶段, CBO(cost-based optimization)仅仅用于选择join算法. 针对数据较小的表, Spark SQL使用broadcast join.

  •    code generation(代码生成)

在每台有数据的机器上生成Java二进制代码(移动数据不如移动代码).

代码的具体实现, 请跳转到下面的链接.

SparkSQL 如何把sqlText转化成RDD可以执行的tasks 系列

 

 

你可能感兴趣的:(大数据相关,spark)