[Hive笔记]Hive编译器

 

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任务的变换,生成执行计划
posted @ 2019-02-21 21:22  LestatZ  阅读(1231)  评论(0编辑  收藏  举报