一、什么是Hive

(1)Hive是Hadoop工具家族中一个重要成员,可以将结构化的数据文件(HDFS)映射为一张数据库表。

(2)Hive 定义了简单的类 SQL 查询语言,被称为 HQL,实现方便高效的数据查询

(3)Hive的本质是将HQL,转换成MapReduce任务,完成整个的数据的ETL,减少编写MapReduce的复杂度

(4)Hive是一个数据分析引擎,提供不懂Java程序的数据分析人员使用。

二、Hive体系结构

Hive架构包括如下组件:CLI(command line interface)命令行、JDBC/ODBC驱动、Thrift Server、Hive WEB Interface(HWI)WEB访问接口、metastore元数据和Driver(Complier、Optimizer和Executor),如下图:

2018-08-31期 Hive体系结构_大数据_02

(1)Driver组件:核心组件,整个Hive的核心,该组件包括Complier、Optimizer和Executor,它的作用是将我们写的HQL语句进行解析、编译优化,生成执行计划,然后调用底层的MapReduce计算框架。

(2) Metastore组件:元数据服务组件,这个组件存储hive的元数据,hive的元数据存储在关系数据库里,hive支持的关系数据库有derby、mysql、oracle等,存储内容包括包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。

(3)用户接口:用户接口主要有三个:CLI,Client 和 WUI。其中最常用的是CLI,Cli启动的时候,会同时启动一个Hive副本。Client是Hive的客户端,用户连接至Hive Server。在启动 Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server。 WUI是通过浏览器访问Hive。

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

(5)Hive WEB Interface(HWI):hive客户端提供了一种通过网页的方式访问hive所提供的服务。这个接口对应hive的hwi组件(hive web interface)

(6)数据存储: Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成(包含*的查询,比如select * from tbl不会生成MapRedcue任务)

三、Hive执行流程

步骤1:Hive 将通过CLI接入,JDBC/ODBC接入,或者HWI接入的相关查询:

步骤2:通过Driver(Complier、Optimizer和Executor),进行编译,分析优化,最后变成可执行的MapReduce

步骤3:将解析成MapReduce任务提交Hadoop执行。

大家看到这些是不是特别熟悉,对的这个和传统的数据库的结构非常类似。

四、数据库连接模式

1、单用户模式(本地模式或者嵌入模式)

此模式连接到一个In-memory 的数据库Derby,Derby数据是Hive自带的数据库,默认只能有一个连接,用户连接到Hive后,会在当前目录生成一个metastore文件来存放操作元数据信息,不同的用户连接到Hive看到的信息不一致。

2、多用户模式

通过网络连接到一个关系型数据库中,如MySQL,是最经常使用到的模式。这样多个用户操作的元数据信息统一存放到关系型数据库,这样不同用户可以操作相同的对象。

3、远程服务器模式

用于非Java客户端访问元数据库,在服务器端启动MetaStoreServer,客户端利用Thrift协议通过MetaStoreServer访问元数据库。

五、Hive的数据模型

对于数据存储,Hive没有专门的数据存储格式,也没有为数据建立索引,用户可以非常自由的组织Hive中的表,只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符,Hive就可以解析数据。

Hive中所有的数据都存储在HDFS中,存储结构主要包括数据库、文件、表和视图。

Hive中包含以下数据模型:Table内部表,External Table外部表,Partition分区,Bucket桶。Hive默认可以直接加载文本文件,还支持sequence file 、RCFile。