什么是Hive
Hive:由Facebook开源用于解决海量结构化日志的数据统计。
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。
本质是:将HQL转化成MapReduce程序
- Hive处理的数据存储在HDFS
- Hive分析数据底层的实现是MapReduce
- 执行程序运行在Yarn上
Hive的优缺点
优点
-
操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)。
-
避免了去写MapReduce,减少开发人员的学习成本。
-
Hive的执行延迟比较高,因此Hive常用于数据分析,对实时性要求不高的场合。
-
Hive优势在于处理大数据,对于处理小数据没有优势,因为Hive的执行延迟比较高。
-
Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
缺点
1.Hive的HQL表达能力有限
(1)迭代式算法无法表达
(2)数据挖掘方面不擅长
2.Hive的效率比较低
(1)Hive自动生成的MapReduce作业,通常情况下不够智能化
(2)Hive调优比较困难,粒度较粗
Hive架构原理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-on8dTpdT-1595483794182)(…/…/…/…/Pictures/Typora/clip_image002.png)]
-
用户接口:Client
CLI(hive shell)、JDBC/ODBC(java访问hive)、WEBUI(浏览器访问hive) -
元数据:Metastore
元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;
默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore -
Hadoop
使用HDFS进行存储,使用MapReduce进行计算。 -
驱动器:Driver
- 解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。
- 编译器(Physical Plan):将AST编译生成逻辑执行计划。
- 优化器(Query Optimizer):对逻辑执行计划进行优化。
- 执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/Spark。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CmQRasEk-1595483794183)(…/…/…/…/Pictures/Typora/clip_image002-1594110789219.png)]
Hive通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapReduce,提交到Hadoop中执行,最后,将执行返回的结果输出到用户交互接口。
Interface-命令窗口模式:
- 两种工具:beeline 和 Hive命令行(CLI)
- 两种模式:命令行模式和交互模式
Hive-数据类型
###原始数据类型
类型 | 示例 | 类型 | 示例 |
---|---|---|---|
TINYINT | 10Y | SMALLINT | 10S |
INT | 10 | BIGINT | 100L |
FLOAT | 1.342 | DOUBLE | 1.234 |
DECIMAL | 3.14 | BINARY | 1010 |
BOOLEAN | TRUE | STRING | ’Book’ or “Book” |
CHAR | 'YES’ or “YES” | VARCHAR | 'Book’ or “Book” |
DATE | '2013-01-31’ | TIMESTAMP | '2013-01-31 00:13:00.345’ |
复杂数据类型
类型 | 格式 | 定义 | 示例 |
---|---|---|---|
ARRAY | [‘Apple’,’Orange’,’Mongo’] | ARRAY | a[0] = ‘Apple’ |
MAP | {‘A’:’Apple’,’O’:’Orange’} | MAP<string, string> | b[‘A’] = ‘Apple’ |
STRUCT | {‘Apple’, 2} | STRUCT<fruit:string, weight:int> | c.weight = 2 |
- ARRAY:存储的数据为相同类型
- MAP:具有相同类型的键值对
- STRUCT:封装了一组字段
Hive元数据结构
数据结构 | 描述 | 逻辑关系 | 物理存储(HDFS) |
---|---|---|---|
Database | 数据库 | 表的集合 | 文件夹 |
Table | 表 | 行数据的集合 | 文件夹 |
Partition | 分区 | 用于分割数据 | 文件夹 |
Buckets | 分桶 | 用于分布数据 | 文件 |
Row</ |