Hive 功能特性和组件原理

1、什么是Hive

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

Hive不是:

  • 关系数据库
  • OnLine事务处理(OLTP)的设计
  • 用于实时查询和行级更新的语言

Hive的特点:

  • 为OLAP设计的。
  • 提供用于查询的SQL类型语言,称为HiveQL或HQL。
  • 通过Apache Tez,Apache Spark或MapReduce执行查询。
  • Hive可以自由的扩展集群的规模,一般情况下不需要重启服务。
  • Hive支持用户自定义函数,有良好的延展性,用户可以根据自己的需求来实现自己的函数。
  • 良好的容错性,节点出现问题SQL仍可完成执行。

 

Hive与传统数据库对比

  HIve RDBMS
查询语句 HQL SQL
数据库存储 HDFS Raw Device or Local FS
执行 MapReduce/Tez/Spark Excutor
执行延迟
处理数据规模
索引 0.8版本后加入位图索引 有复杂的索引

hive具有sql数据库的外表,但应用场景完全不同,hive只适合用来做批量数据统计分析。

 

2、Hive体系结构

 

以下组件图描述了Hive的体系结构:

Hive 功能特性和组件原理

该组件图包含不同的单位。下表描述了每个单元:

单元名称 操作
用户界面 Hive是一个数据仓库基础设施软件,可以创建用户和HDFS之间的交互。Hive支持的用户界面是Hive Web UI,Hive命令行和Hive HD Insight(在Windows服务器中)。
Meta Store Hive选择相应的数据库服务器来存储表,数据库,列的架构或元数据,表格,数据类型和HDFS映射。
HiveQL流程引擎 HiveQL与用于查询Metastore上的模式信息的SQL类似。它是MapReduce程序的传统方法的替代之一。我们可以编写MapReduce作业查询并处理它,而不用Java编写MapReduce程序。
执行引擎 HiveQL进程引擎和MapReduce的结合部分是Hive执行引擎。执行引擎处理查询并生成与MapReduce结果相同的结果。它使用MapReduce的风格。
HDFS或HBASE Hadoop分布式文件系统或HBASE是将数据存储到文件系统的数据存储技术。

 

3、Hive工作流程

下图描述了Hive和Hadoop之间的工作流程:

Hive 功能特性和组件原理

步骤号 操作
1 **执行查询** Hive接口(如命令行或Web UI)向Driver(任何数据库驱动程序,如JDBC,ODBC等)发送查询以执行。
2 **获取计划** 驱动程序在查询编译器的帮助下解析查询以检查语法和查询计划或查询的要求。
3 **获取元数据** 编译器将元数据请求发送到Metastore(任何数据库)。
4 **发送元数据** Metastore将元数据作为响应发送给编译器。
5 **发送计划**编译器Compiler得到元数据信息,对任务进行编译,先将HiveQL转换为抽象语法树,然后将抽象语法树转换成查询块,将查询块转化为逻辑的查询计划,重写逻辑查询计划,将逻辑计划转化为物理的计划(MapReduce/TEZ), 最后选择最佳的策略。 将计划重新发送给驱动程序。到此为止,查询的解析和编译已完成。
6 **执行计划** 驱动程序将执行计划发送给执行引擎。
7 **执行作业** 在内部,执行作业的过程是一个MapReduce作业。执行引擎将作业发送到名称节点中的JobTracker,并将该作业分配给数据节点中的TaskTracker。在这里,查询执行MapReduce作业。
7.1 **元数据操作** 同时在执行时,执行引擎可以使用Metastore执行元数据操作。
8 **取结果** 执行引擎从Data节点接收结果。
9 **发送结果** 执行引擎将这些结果值发送给驱动程序。
10 **发送结果** 驱动程序将结果发送给Hive Interfaces。

4、数据类型

Hive数据类型

分类 类型 描述 字面量示例












原始类型

BOOLEAN true/false TRUE
TINYINT 1字节的有符号整数 -128~127 1Y
SMALLINT 2个字节的有符号整数,-32768~32767 1S
INT 4个字节的带符号整数 1
BIGINT 8字节带符号整数 1L
FLOAT 4字节单精度浮点数 1.0
DOUBLE 8字节双精度浮点数 1.0
STRING 字符串,变长 “a”,’b’
BINARY 字节数组 无法表示
TIMESTAMP 时间戳,纳秒精度 122327493795
DATE 日期 ‘2016-03-29’

 

 

 

 

复杂类型

 

ARRAY 有序的的同类型的集合 array(1,2)
MAP key-value,key必须为原始类型,value可以任意类型 map(‘a’,1,’b’,2)
STRUCT 字段集合,类型可以不同 struct(‘1’,1,1.0), named_stract(‘col1’,’1’,’col2’,1,’clo3’,1.0)