Hive新版本工作原理详解——不要在看老版本的工作原理了

Hive的服务端组件

1.Driver组件:该组件包括:Compiler、Optimizer、Executor,它可以将Hive编译、解析、优化转化为Map Reduce任务提交给Hadoop中的Source Manager来进行实际的执行相应的任务。

2.Meta Store组件:存储着hive的元数据信息,将自己的元数据存储到了关系型数据库中,支持的数据库主要有MySQL、Derby,支持把meta store独立出来放在远程的集群上面,使得hive更加健壮。元数据主要包括了表的名称、表的列、分区和属性、表的属性(是不是外部表等等 tblproperties)、表的数据所在的目录。

3.用户接口:CLI(Command Line Interface)命令行模式接口。
Client:hive的客户端用户连接至Hive Server,再启动Client的时候,需要指定Hive Server所在的节点,并且再该节点上启动Hive Server。
WUI:通过浏览器的方式访问Hive。
Hive新版本工作原理详解——不要在看老版本的工作原理了

Hive工作原理

一、用户接口把HQL提交到Driver驱动。

二、Driver内部工作流程

1、获取Hive元数据信息。 编译器Compiler根据用户任务去Meta Store获取需要的Hive元数据信息;

2、生成抽象语法树AST。Antlr(一种可以根据输入自动生成语法熟并可视化显示出来的开源语法分析器)定义SQL语法规则,完成SQL语法、词法解析,将SQL转换为抽象语法树AST;

3、生成查询块Query Block。 遍历AST,抽象出查询的基本组成单元查询块Query Block;

4、生成逻辑执行计划Operator Tree。 遍历Query Block,将Query Block转化为逻辑查询计划Operator Tree,SemanticAnalyzer.genPlan(逻辑执行计划生成器)完成;

5、优化逻辑执行计划。 逻辑层优化器进行Operator Tree变换,合并不必要的ReduceSinkOperator,减少shuffle数据量;

6、生成物理执行计划。 Physical Plan Generator生成物理执行计划;

7、优化物理执行计划。 Physical Optimizer(物理计划优化器)完成;

8、计划执行。将计划转交给ExecutionEngine(执行引擎)去执行,然后提交给Resource Manager。
Hive新版本工作原理详解——不要在看老版本的工作原理了

部分步骤详解

1.将SQL转化为AST

(1)ANTLR(Another Tool for Language Recognition)
是一个语法分析器(Parser),可以用来构造领域语言。它允许我们定义识别字符流的词法规则和用户解释Token流的分析规则,然后,ANTLR将根据用户提供的语法文件自动生成相应的词法/语法分析器。用户可以利用他们讲输入的文本进行编译,并转换成其他形式,如AST。

(2)AST(Abstract Syntax Tree) 抽象语法树
AST表明Hive是如何将查询解析成token(符号)和literal(字面值)。

2.语义分析(Semantics Analyze)
这个过程主要是遍历AST,抽象出查询的基本组成单元查询块(QueryBlock)。
Query Block是一条SQL最基本的组成单元,包括三个部分:输入源、计算过程、输出。简单来讲一个Query Block就是一个子查询。

3.将Query Block转化为Operator Tree 逻辑查询计划
遍历Query Block,生成Operator Tree,Operator Tree由很多逻辑操作符组成,如TableScanOperator 、SelectOperator、FilterOperator、JoinOperator、GroupByOperator和ReduceSinkOperator等。这些逻辑操作符可在Map、Reduce阶段完成某一特定操作。

Hive驱动模块中的执行器执行最终MR任务时,Hive本身不会生成MR算法程序。它通过一个表示“Job执行计划“的XML文件,来驱动内置的、原生的Mapper和Reduce模块。