步骤
Hive的编译主要经过以下几个步骤
- Parser(解析器)
- Semantic Analyzer(语义分析器)
- Logical Plan Gen(逻辑计划生成)
- Logical Optimizer(逻辑优化器)
- Physical Plan Gen(物理计划生成)
- Physical Optimizer(物理优化器)
细节
- Hive SQL经过Parser变成AST(Abstract Syntax Tree抽象语法树);
- AST经过Semantic Analyzer变成QB(Query Block查询块)。通常一个From子句会生成一个QB;
- QB经过Logical Plan Gen变成Operator图(一个DAG有向无环图);
- Operator图经过Logical Optimizer变成一个优化后的Operator图(一个优化后的DAG有向无环图),这里的优化包括谓词下推,分区裁剪、关联排序等;
- 优化后的Operator图经过Physical Plan Gen被切成了很多子图,每个子图构成一个节点。这些节点又连成一个执行计划图Task Tree。Hive通常是遇到数据分发的地方就切一刀,生成一个MR作业,如Group By、Join、Distribute By、Distinct等地方;
- Task Tree经过Physical Optimizer变成了一个优化后的Task Tree;
- 优化后的Task Tree中每个节点就是一个MapReduce作业,就可以执行了。