一、Hive简介
-
Facebook为了解决海量日志数据的分析而开发了Hive,后来开源给了Apache软件基金会。
-
Hive是一种用类SQL语句来协助读写、管理那些存储在分布式存储系统上大数据集的数据仓库软件。
-
Hive的几个特点:
1. Hive最大的特点是通过类SQL来分析大数据,而避免了写MapReduce程序来分析数据,这样使得分析数据更
容易。
2. 数据是存储在HDFS上的,Hive本身并不提供数据的存储功能。
3. Hive是将数据映射成数据库和一张张的表,库和表的元数据信息一般存在关系型数据库上(比如MySQL)。
4. 数据存储方面:它能够存储很大的数据集,并且对数据完整性、格式要求并不严格。
5. 数据处理方面:因为Hive语句最终会生成MapReduce任务去计算,所以不适用于实时计算的场景,它适用于
离线分析。
二、Hive架构
Hive的核心
Hive的核心是驱动引擎,驱动引擎由四部分组成:
- 解释器:解释器的作用是将HiveSQL语句转换为语法树(AST)。
- 编译器:编译器是将语法树编译为逻辑执行计划。
- 优化器:优化器是对逻辑执行计划进行优化。
- 执行器:执行器是调用底层的运行框架执行逻辑执行计划。
Hive的底层存储
Hive的数据是存储在HDFS上的。Hive中的库和表可以看作是对HDFS上数据做的一个映射。所以Hive必须是运行在一个Hadoop集群上的。
Hive语句的执行过程
- Hive中的执行器,是将最终要执行的MapReduce程序放到YARN上以一系列Job的方式去执行。
Hive的元数据存储
- Hive的元数据是一般是存储在MySQL这种关系型数据库上的,Hive和MySQL之间通过MetaStore服务交互。
元数据项 | 说明 |
---|---|
DB_ID | 数据库的编号 |
DESC | 数据的描述 |
DB_LOCATION_URI | 数据库在HDFS上的目录 |
NAME | 数据库名 |
OWNER_NAME | 创建用户 |
OWNER_TYPE | 创建者的类型 |
Owner | 库、表的所属者 |
LastAccessTime | 最后修改时间 |
Table Type | 表类型(内部表、外部表) |
CreateTime | 创建时间 |
Location | 存储位置 |
表的字段信息 |
Hive有很多种客户端。
- cli命令行客户端:采用交互窗口,用hive命令行和Hive进行通信。
- HiveServer2客户端:用Thrift协议进行通信,Thrift是不同语言之间的转换器,是连接不同语言程序间的协议,通过JDBC或者ODBC去访问Hive。
- HWI客户端:hive自带的一个客户端,但是比较粗糙,一般不用。
- HUE客户端:通过Web页面来和Hive进行交互,使用的比较多。
三、Hive基本数据类型
Hive支持关系型数据中大多数基本数据类型,同时Hive中也有特有的三种复杂类型。
下面的表列出了Hive中的常用基本数据类型:
数据类型 | 长度 | 备注 |
---|---|---|
Tinyint | 1字节的有符号整数 | -128~127 |
SmallInt | 2个字节的有符号整数 | -32768~32767 |
Int | 4个字节的有符号整数 | -2147483648 ~ 2147483647 |
BigInt | 8个字节的有符号整数 | |
Boolean | 布尔类型,true或者false | true、false |
Float | 单精度浮点数 | |
Double | 双精度浮点数 | |
String | 字符串 | |
TimeStamp | 整数 | 支持Unix timestamp,可以达到纳秒精度 |
Binary | 字节数组 | |
Date | 日期 | 0000-01-01 ~ 9999-12-31,常用String代替 |
- - - | - - - | - - - |