Hive是什么?
-
缘由
由于Mysql数据库存储能力的限制,因此发展而来的Hive可以将数据存储于HDFS上以解决该问题。
-
简介
Hive:由Facebook开源用于解决海量结构化日志的数据统计工具。
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能
-
本质:将HQL转化成MapReduce程序
-
Hive处理的数据存储在HDFS
-
Hive分析数据底层的实现是MapReduce
-
执行程序运行在Yarn上
-
-
优点
- 操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)。进而避免了去写MapReduce,减少开发人员的学习成本。
- Hive优势在于处理大数据,支持海量数据的分析与计算。
- Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数
-
缺点(由HDFS的缺点继承而来)
-
Hive的HQL表达能力有限。
- Hive自动生成的MapReduce作业,通常情况下不够智能化。
- 数据挖掘方面不擅长,由于MapReduce数据处理流程的限制,效率更高的算法却无法实现。
-
Hive的效率比较低。
- Hive的执行延迟比较高,因此Hive常用于数据分析,对实时性要求不高的场合。
- Hive调优比较困难,粒度较粗
-
Hive不支持实时查询和行级别更新
hive分析的数据是存储在hdfs上,hdfs不支持随机写,只支持追加写,所以在hive中不能update和delete,能select和insert
-
Hive框架原理
整体流程:
Hive通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapReduce,提交到Hadoop中执行,最后,将执行返回的结果输出到用户交互接口 。
-
用户接口:Client
命令行接口、JDBC接口等
-
元数据:Metastore
元数据包括表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等。
默认存储于derby数据库中,推荐Mysql存储Metastore。
-
HDFS
用于存储数据库的数据。(Mysql仅存取表的相关信息)
-
MapReduce
将sql转换为mr程序,MapReduce提供计算。
-
驱动器:Driver
-
SQL Parser解析器:
将SQL字符串转换成抽象语法树AST,对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。
-
Physical Plan 编译器:将AST编译生成逻辑执行计划。
-
Query Optimizer 优化器:对逻辑执行计划进行优化。
-
Execution执行器:把逻辑执行计划转换成可以运行的物理计划。
-
Hive和数据库的比较
首先Hive不是数据库,它主要功能就是将Sql转换为MapReduce任务。
数据更新:
数据仓库的内容是读多写少的。因此,Hive中不建议对数据的改写。而数据库中的数据通常是需要经常进行修改的,因此可以在数据库使用 INSERT INTO … VALUES 添加数据和使用 UPDATE … SET修改数据。
执行延迟:
- Hive 在查询数据的时候,由于没有索引,需要扫描整个表,因此延迟较高。
- Hive 执行延迟高的因素是 MapReduce框架。
数据规模:
Hive建立在集群上并可以利用MapReduce进行并行计算,因此可以支持很大规模的数据。