Hive编译器
文章目录
编译器主要部分
Hive的编译器主要有以下几个部分:
名称 | 简要描述 |
---|---|
解析器 | 将查询语句转换为解析树(AST Tree)。 |
语义分析器 | 将解析树转换为内部查询表示(此时任然是QueryBlock)。作为此步骤的一部分,将验证列名称并执行类似*的扩展。在此阶段还会执行类型检查和任何隐式类型转换。如果对象是分区表,则会收集该表的所有表达式(partitionKey=<Val>),以便稍后对分区进行过滤。如果查询已指定采样(SAMPLE),则也会收集该采样以便稍后使用。 |
逻辑计划生成器 | 将内部查询表示转换为逻辑计划,该计划由算子树组成。此步骤还包括优化器,对生成的算子树进行优化 |
查询计划生成器 | 将逻辑计划转换为一系列map-reduce任务。递归遍历运算符树,将其分解为一系列map-reduce可序列化任务,这些任务稍后可以提交到Hadoop分布式文件系统的map-reduce框架中。 |
Hive SQL的编译过程
SQL转化为MapReduce任务的编译过程分为六个阶段:
- Antlr定义SQL的语法规则,完成SQL词法,语法解析,将SQL转化为抽象语法树AST Tree
- 遍历AST Tree,抽象出查询的基本组成单元QueryBlock
- 遍历QueryBlock,将其转换为算子树OperatorTree
- 逻辑层优化器进行OperatorTree优化,合并不必要的ReduceSinkOperator,减少shuffle数据量
- 遍历OperatorTree,将其转化为MapReduce任务
- 物理层优化器进行MapReduce任务的变换,生成执行计划