数据仓库工具之Hive的架构原理

Posted 简柒微行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据仓库工具之Hive的架构原理相关的知识,希望对你有一定的参考价值。

1.  Hive的本质


Hive是基于Hadoop的一个数据仓库工具,它的本质是将HQL语句转化成MapReduce程序。在它的底层,HDFS负责存储数据,YARN负责进行资源管理,MapReduce负责数据处理


2. Hive架构组成


(1) 用户接口(Client):

ClientCLI(hive shell)、JDBC/ODBC(java访问hive),WEBUI(浏览器访问hive)


(2) 元数据(Metastore):

Metastore元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;默认存储在自带的derby数据库中,推荐使用采用关系型数据库mysql存储Metastore;


(3) 驱动器(Driver)包含:解析器、编译器、优化器、执行器

  • 解析器:将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误(比如select中被判定为聚合的字段在group by中是否有出现);

  • 编译器:将抽象语法树AST编译生成逻辑执行计划;

  • 优化器:对逻辑执行计划进行优化;

  • 执行器:把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/TEZ/Spark。


(4) Hive使用HDFS存储数据

Hive本身不存在数据,Hive虽有表的定义但表是纯的逻辑表,数据是存在HDFS上的。


3.  Hive执行流程(重点)


如上图所示,我们通过Hive提供的一系列交互接口(Client),向Hive提交SQL指令(HSQL)。如果我们提交的是创建表的DDL语句(数据定义语言),Hive会通过使用自己的执行引擎(Driver)将数据表的信息记录在Metastore元数据组件中,正如上面提到的,元数据组件通常用一个关系型数据库实现,其记录着表名,字段名,字段类型以及关联的HDFS文件路径等元信息。


如果我们提交的是DQL语句(数据查询分析语句),Hive的执行引擎(Drive)会结合元数据信息对该语句进行转换,语法分析,语法优化等操作,最后生成一个MapReduce执行计划。


说具体一点,就是Hive执行引擎(Drive)会将该语句提交给自己的解析器(SQL Parser),解析器接收到语句之后,会将SQL查询字符串转换成抽象语法树,并对抽象语法树进行语法分析,比如检测表是否存在,字段是否存在,SQL语义是否有误等,之后将经过语法分析后的抽象语法树提交给编译器。


编译器再将抽象语法树编程成逻辑执行计划(Physical Plan),然后再由优化器(Query Optimizer)对逻辑执行计划进行优化,最后由执行器(Execution)将逻辑执行计划转换成可以运行的物理计划,也即是MapReduce执行计划,然后再根据执行计划生成一个MapReduce的作业,提交到Yarn上执行,最后,将执行返回的结果输出到用户交互接口。


Hive内部预置了很多函数,Hive的执行计划就是根据用户提交的HQL语句生成这些函数的DAG(有向无环图),然后封装进MapReduce的map和reduce函数中。


以上是关于数据仓库工具之Hive的架构原理的主要内容,如果未能解决你的问题,请参考以下文章

Hive架构原理和性能优化

走进大数据 | 大数据仓库Hive原理与架构

Hive的基本架构工作原理及其安装简介

Hive架构原理

Hive的配置| 架构原理

10Hive核心概念和架构原理