Hive SQL 是怎样解析成 MR job 的?
Hive 60
- Hive使用Antlr实现语法解析.根据Antlr制定的SQL语法解析规则,完成SQL语句的词法/语法解析,将SQL转为抽 象语法树AST.
- 遍历AST,生成基本查询单元QueryBlock.QueryBlock是一条SQL最基本的组成单元,包括三个部分:输入 源,计算过程,输出.
- 遍历QueryBlock,生成OperatorTree.Hive最终生成的MapReduce任务,Map阶段和Reduce阶段均由 OperatorTree组成。Operator就是在Map阶段或者Reduce阶段完成单一特定的操作。QueryBlock生成 Operator Tree就是遍历上一个过程中生成的QB和QBParseInfo对象的保存语法的属性.
- 优化OperatorTree.大部分逻辑层优化器通过变换OperatorTree,合并操作符,达到减少MapReduceJob, 减少shuffle数据量的目的
- OperatorTree生成MapReduceJob.遍历OperatorTree,翻译成MR任务.
- 对输出表生成MoveTask
- 从OperatorTree的其中一个根节点向下深度优先遍历
- ReduceSinkOperator标示Map/Reduce的界限,多个Job间的界限
- 遍历其他根节点,遇过碰到JoinOperator合并MapReduceTask
- 生成StatTask更新元数据
- 剪断Map与Reduce间的Operator的关系
- 优化任务.使用物理优化器对MR任务进行优化,生成最终执行任务