Hive介绍以及Hive架构详解
概念
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能, 是一种大数据离线分析工具
Hive的底层就是将类SQL语句转换成MapReduce
Hive提供了一系列的工具, 可以用来进行数据提取, 转化, 加载(ETL Extract-Transform-Load)
Hive的特点
优点
- 操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)
- 避免了去写MapReduce,减少开发人员的学习成本
- Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数
- 可以处理海量数据
缺点
- 因为Hive底层是MapReduce, 所以执行延迟比较高, 无法提供实时查询, 而且不支持流式数据
- 不支持行级别的增删改
- 迭代算法无法表达
- Hive优化比较困难
数据库和数据仓库对比
| 数据库 | 数据仓库 |
|---|---|
| 为线上系统提供实时数据 | 为离线分析存储历史数据 |
| 具有完整的增删改查的能力 | 只支持一次写入多次查询,不支持行级别的增删改 |
| 具有完整的事务能力 | 不强调事务的特性 |
| 尽量的避免冗余 提高存储 和处理的效率 | 人为的制造冗余 提高查询的效率 |
| 数据来源单一 | 数据来源多样 |
- OLTP(Online Transaction Processing) 联机事务处理系统
数据库属于OLTP, 涵盖了企业大部分的日常操作,如购物、库存、制造、银行、工资、注册、记账等, 比如Mysql,oracle等关系型数据库
OLTP是面向用户的、用于程序员的事务处理以及客户的查询处理
OLTP系统的访问由于要保证原子性,所以有事务机制和恢复机制
OLTP系统具有较强的事务
- OLAP(Online Analytical Processing) 联机分析处理系统
主要用于分析数据, Hive, HBase都属于OLAP
OLAP是面向市场的,用于知识工人(经理、主管和数据分析人员)的数据分析
OLAP通常会集成多个异构数据源的数据,数量巨大
OLAP系统一般存储的是历史数据,所以大部分都是只读操作,不需要事务
Hive架构和执行流程
Hive架构
- Client(客户端)
即用户接口, 其中包括CLI(command-line interface)、JDBC/ODBC(jdbc访问hive)、WEBUI(浏览器访问hive)
- Metastore(元数据)
元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等
注意
HIve默认的元数据存储在自带derby数据库中, 但是不推荐使用derby数据库, 可以自定义成MySQL数据库存储
- Hadoop
Hive基于HDFS存储, 将类SQL语句翻译成MapReduce在Yarn上运行
-
Driver(驱动器)
-
解析器
将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。
-
编译器
将AST编译生成逻辑执行计划
-
优化器
对逻辑执行进行优化
-
执行器
把逻辑执行计划转换成可运行的物理计划, 对于Hive来说, 也就是MapReduce或者Spark
-
Hive执行流程
- 用户通过客户端提交一个HQL语句
- 通过complier(编译组件) 对HQL语句进行词法和语法分析, 在这一步编译器会分析出HQL语句要操作哪张表
- 去元数据获取表信息
- complier编译器提交HQL语句分析方案
- 执行HQL语句
这里注意,执行器在执行方案时,会进行判断:如果当前方案不涉及到MapReduce组件,比如为表添加分区信息、比如字符串操作等,比如简单的查询操作等,此时就会直接和元数据库交互,然后去HDFS上去找具体数据
如果涉及到计算或者复杂的查询, 就需要将HQL语句转换成MapReduce去执行