一、Hive的组件

Hive架构包括如下组件:Client、Thrift Server、Metastore和Driver。

1,Client

用户接口,主要包含CLI(command language interface)、JDBC或ODBC、WEBUI(以浏览器访问hive);

(1)CLI(command language interface)

最常用的是CLI,Cli启动的时候,会同时启动一个Hive副本。

(2)JDBC或ODBC

Client是Hive的客户端,用户连接至Hive Server。在启动 Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server。而客户端则又可以分为三种Thrift Client,JDBC Client,ODBC Client。

(3)WEBUI

Web Interface是通过浏览器访问Hive。
Hive将元数据存储在数据库中,如mysql、derby。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后由MapReduce调用执行。
Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成(注意,包含*的查询,比如select * from tbl不会生成MapRedcue任务)。
Driver会处理从应用到metastore到filed system的所有请求,以进行后续操作。

2,Thrift Server

提供JDBC/ODBC接入的能力,它用来进行可扩展且跨语言的服务的开发,hive集成了该服务,能让不同的编程语言调用hive的接口;

3,Metastore

元数据,包括表名、表所属的数据库、表的拥有者、列/分区字段、表的类型、表的数据所在目录等内容;

4,Driver:(实现将HQL转化为MR过程)

核心组件,整个Hive的核心,它的作用是将我们写的HQL语句进行解析、编译优化,生成执行计划,然后调用底层的MapReduce计算框架;
(1)解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。
(2)编译器(Physical Plan):将AST编译生成逻辑执行计划。
(3)优化器(Query Optimizer):对逻辑执行计划进行优化。
(4)执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/Spark。

二、Hive的执行过程

1,用户提交查询等任务给Driver。
2,Driver为查询操作创建一个session handler,接着dirver会发送查询操作到compiler去生成一个execute plan
3,Compiler根据用户任务去MetaStore中获取需要的Hive的元数据信息。这些元数据在后续stage中用作抽象语法树的类型检测和修剪。
4,Compiler得到元数据信息,对task进行编译,先将HiveQL转换为抽象语法树,然后将抽象语法树转换成查询块,将查询块转化为逻辑的查询plan,重写逻辑查询plan,将逻辑plan转化为物理的plan(MapReduce), 最后选择最佳策略。
5,将最终的plan提交给Driver。
6,Driver将plan转交给ExecutionEngine去执行,将获取到的元数据信息,提交到JobTracker或者RsourceManager执行该task,任务会直接读取到HDFS中进行相应的操作。
7,获取执行的结果。
8,取得并返回执行结果。

我是喵~~,一起交流学习哇!