一、Hive介绍

Hive是一个构建在Hadoop之上的数据仓库,提供类似sql的查询语句HiveQL对数据进行分析处理。Hive将HiveQL语句转换一系列成MapReduce作业并执行。目前,Hive除了支持MapReduce计算引擎,还支持Spark和Tez这两中分布式计算引擎。图1.1为Hive的体系结构。

一、Hive介绍_第1张图片

                                             图1.1Hive体系结构

由图可以看出,Hive系统由用户接口层、HiveServer层、元数据管理、HiveQL解析器以及执行引擎构成。

1.1、用户接口层

       用户接口层包含了用户使用Hive的所有方式,包括命令行方式(CLI和Beeline),JDBC方式以及ODBC方式等。下面分别进行介绍:

       1)CLI

              CLI(Command Line Interface)是hive的命令行接口,提供了用户通过命令行的方式使用hive。执行${HIVE_HOME}/bin/hive即可进入Hive的命令行交互模式。CLI支持HiveQL语句、函数创建、设置属性等操作。使用CLI不需要其他额外的服务(Hadoop等分布式系统需要提前启动),另外,同一时刻只能启动一次CLI命令,Hive不允许同时开启多次CLI进程。

2)Beeline

Beeline是Hive提供的另外一种命令行接口,支持嵌入模式和远程模式两种运行方式。在嵌入模式下,不需要启动额外的服务即可以使用;在远程模式下,Beeline通过Thrift访问HiveServer2的服务。Beeline提供基于SQLLine 的命令行方式。

   3)JDBC

Hive提供JDBC Driver访问Hive的数据,支持嵌入模式和远程模式使用HiveServer2。JDBC URL连接格式如下:

jdbc:hive2://:,:/dbName;sess_var_list?hive_conf_list#hive_var_list

       其中:

:,:HiveServer2的地址和端口列表,HiverServer2支持动态服务发现功能。如何地址列表为空,则使用嵌入模式。

dbName为数据库名称。

sess_var_list为分号隔开的会话信息键值对(如user=xx;password=xx)。

hive_conf_list为分号隔开的Hive配置信息键值对。

hive_var_list为分号隔开的Hive变量键值对。

       4)ODBC

       Hive提供了ODBC接口的实现,目前只有HiveServer1支持该功能,HiverServer2不在支持。

1.2、 HiveServer

       HiveServer是一个可选服务,提供了远程提交Hive查询请求的功能,基于Thrift实现,支持多种语言。HiveServer包含两个版本:HiveServer1和HiveServer2。HiveServer1只能同时处理一个客户端的请求,HiveServer2是HiveServer1的升级版,可以同时处理多个客户端请求。HiveServer的客户端包含前面提到的Beeline,JDBC以及ODBC。

1.3、元数据管理

       Hive中元数据主要包含Hive数据库和表相关的结构信息数据。比如表名称以及其包含的字段名称类型和类型、序列化方式、存储格式等数据都属于元数据。其他元数据好包括Hive函数信息、分桶信息等。

       Hive的元数据存放在关系数据库中,支持MySQL、Postgres、Oracle、MS SQL Server以及derby,其中derby是Hive内置的数据库。这些存放元数据的数据库称为元数据库(megastore database)。Hive元数据管理通过JPOX ORM框架来修改、查询、存储元数据。元数据管理可以独立服务的方式向Hive提供服务,也可以内嵌的方式使用。在独立服务方式下,元数据管理将启动一个Thrift服务metastore server,客户端通过Thrift协议访问metastore server,这种方式的好处是可以支持多种语言。在内嵌方式下,Hive直接访问元数据数据库 metastore database。

       Hive同时提供对metastore database进行初始化,版本升级等操作的工具Hive MetaTool和Hive SchemaTool。具体使用方式参考官方文档.

1.4      HiveQL解析器

   HiveQL解析器是Hive的核心组件,实现了对类sql查询语言HiveQL的词法分析、语法分析和语义分析,最终将HiveQL语句转换成底层执行引擎能够执行的任务.

   HiveQL解析器通过语法分析工具ntlr3实现词法分析和语法分析功能.Antlr是一款非常流行的领域语言分析工具,Antlr3是第三版,目前最新版本是antlr4.antlr3采用了自顶向下的分析方法LL(k),将语言转换为相应的抽象语法树(AST)。用户只需要编写相应语言的词法规则和语法规则,使用antlr3提供的api即可实现语言到AST的转换。Hive的词法规则位于HiveLexer.g文件中,语法规则位于HiveParser.g、FromClauseParser.g等文件中,具体实现请参考第二章的介绍。

   语义分析则是将抽象语法树AST转化成底层计算引擎可执行任务的过程,包含以下几个阶段:

一、Hive介绍_第2张图片

   图1.2HiveQL处理流程

Antlr3将输入的HiveQL语句转换成AST抽象语法树,然后交给语义分析器进行处理。语义分析器首先对AST进行解析提取语法树的相关信息如表名称,select表达式,group by表达式等,存放在QueryBlock对象中;接着,根据QueryBlock对象生成逻辑算子(Operator)DAG.一个算子代表了对数据库中一条记录的处理过程,Hive通过一系列具有前后依赖关系的算子对数据进行处理,这些前后依赖关系的算子构成了一张DAG图。关于算子的介绍请参考第三章的内容;然后,语义分析器对生成的Opeator DAG进行优化处理,加快数据处理速度;优化后的Operator DAG紧接着被转换成底层计算引擎执行的任务(Task).通常,一条HiveQL语句会生成多个任务,这些任务存在先后的依赖关系,因此任务和算子类似,也以DAG图的方式组织。最后,对Task DAG图进行优化并提交给底层技术引擎执行。

1.5执行引擎

执行引擎实际执行逻辑算子DAG中的数据处理逻辑。Hive目前支持的计算引擎包括MapReduce、Spark和Tez。本文主要介绍MapReduce计算引擎的部分。



你可能感兴趣的:(hive)