目录
1、Hive概述
1.1、Hive是什么
1.2、数据仓库的特点
1.3、Hive优缺点
1.3.1、优点
1.3.2、缺点
1.4、Hive与传统数据库对比
1.4.1、读时模式与写时模式
1.4.2、更新
1.4.3、索引
1.4.4、数据存储
1.4.5、可扩展性
1.5、Hive与HBase
2、Hive体系架构
3、工作流程
Hive是由Facebook开源用于解决海量结构化日志的数据统计,是分析数据的框架。
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射成一张表,并提供了类SQL查询功能。本质是将HQL转化为MapReduce程序。Hive类似于一个Hadoop的客户端,所以Hive并非集群。
使用大象的鼻子去采花即数据流大;蜜蜂产蜜即分析结果
数据仓库是面向主题的、集成的、时变的、非易失的
1)Hive提供了类似于SQL的HQL语言来查询储存在hdfs上的数据
2)Hive可以将大多数的查询转换为MapReduce任务
3)Hive适合数据仓库应用程序,常用于静态数据分析,执行延迟比较高,适合不需要快速响应给出结果的场合
4)Hive的优势在于处理大数据集,因为Hive执行延迟较高
5)Hive支持用户自定义函(UDF),扩展性好
1)Hive不支持记录级别的更新、插入或者删除,但用户可以通过查询生成新表或将查询结果导入到文件中
2)Hive查询延时比较严重,因为Hadoop是面向批处理的系统,而MapReduce的启动过程需要消耗一段时间,并且粒度较粗调优比较困难
3)Hive不支持事务,也就是说不支持OLTP(联机事务处理)所需的关键功能ACID。而更接近于OLAP(联机分析技术),适合离线处理大数据集,虽然还未满足OLAP中OL部分
4)HQL表达能力有限,无法表达迭代式算法,所以在数据挖掘方面不太擅长
5)Hive会自动生成MapReduce作业,通常不够智能化
写时模式
传统数据库中采用的是写时模式,表的模式实在数据加载时强制确定的,如果在加载时发现数据不符合模式,则拒绝加载数据。数据在写入数据库时对照模式检查。写时模式有利于提升查询性能,因为数据库可以对列进行索引,并对数据进行压缩。
读时模式
Hive对数据的验证则是在查询时进行的,这有利于大数据集的导入,读时模式使数据的加载非常迅速,数据的加载仅是文件复制或移动。
Hive是针对数据仓库应用设计的,所以数仓的内容是读多写少的。Hive中不建议对数据进行改写,所有数据都是在加载的时候确定好的;而数据库中的数据通常是需要经常进行修改的。
Hive要访问数据中特定数据时,需要全表扫描,因此访问延迟较高。由于MapReduce的引入,Hive可以并行访问数据,在大数据的访问上仍然具有优势。Hive只提供了有限的索引功能,可以为一些字段建立索引,一张表的索引数据存储在另外一张表中。由于数据的访问延迟较高,Hive不适合在线数据查询;数据库在少量的特定条件的数据访问中,索引可以提供较低的延迟。
Hive是建立在Hadoop之上的,所有Hive的数据都是存储在hdfs中的,而metastore元数据建议存储在独立的关系型数据库中;数据库则将数据存储在块设备或者本地文件系统中。
由于Hive是建立在Hadoop之上的,因此Hive具有良好的可扩展性;数据库由于ACID语义的严格限制,扩展性十分有限
Hbase和Hive在大数据架构中处在不同位置,Hbase主要解决实时数据查询问题,Hive主要解决数据处理和计算问题,一般是配合使用。
Hbase
hbase是基于Hadoop数据库,是一种NoSQL数据库,用于存储HDFS中结构化和非结构化的数据。数据持久化存储的体现形式是 Hfile,存放于 DataNode 中,被 ResionServer 以 Region 的形式进行管理
HBase 可以实现单表大量数据的存储,同时提供了高效的数据访问速度。延迟较低,接入在线业务使用
适用于单表非关系型数据的存储,不适合做关联查询,类似 JOIN 等操作。
主要解决的是hdfs只能追加的写入方式的不足
Hive
Hive是Hadoop数据仓库,主要是让开发人员能够通过SQL来计算和处理HDFS上的结构化数据,本质其实就相当于将 HDFS 中已经存储的文件在 Mysql 中做了一个双射关系,以方便使用 HQL 去管理查询。
适用于离线的批量数据计算,延迟较高
Hive 存储的数据依旧在 DataNode 上,编写的 HQL 语句终将是转换为 MapReduce 代码执行。
1)用户接口 Client:Hive提供了客户与HDFS之间交互的接口,如Web UI、Hive命令行(CLI)、HD Insight等。
2)元数据 Meta Store:Hive使用了独立的SQL数据库(默认为derby)来存放关于表名、表所属数据库、列/分区字段、表的类型(内部表还是外部表)、等等的元数据
3)驱动器 Driver
1、HQL处理引擎 HQL Process Engine
2、执行引擎 Execution Engine:把逻辑计划转换成可以运行的物理计划(MapReduce程序)
4)HDFS或HBase:hdfs或者Hbase是将数据存储到分布式文件系统中的技术
1、执行查询
2、获取计划
3、获取元数据
4、发送元数据
5、发送计划
6、执行计划
7、执行任务
7.1、元数据操作
8、获取结果
9、执行引擎端发送结果
10、Driver端发送结果
总结来说:Hive通过用户提供的一系列交互交口,接受到用户的指令,使用Hive自身的Driver,结合元数据将指令翻译成MapReduce,提交到Hadoop中执行,最后将执行返回结果输出到用户接口