Hive和HBase的区别

hive是文件的视图,hbase是建了索引的key-value表。 web

先放结论:Hbase和Hive在大数据架构中处在不一样位置,Hbase主要解决实时数据查询问题,Hive主要解决数据处理和计算问题,通常是配合使用。数据库

Hive的底层能够是HBase或者HDFS上存储的文件。
Hive的做用是把HQL翻译成MapReduce程序,从而减小分析人员每次都要写冗长Java程序的工做量。单次Hive查询都须要耗费分钟级以上的时间(哪怕一个再小的表),所以没法做为web后端的数据库使用。
HBase能够替代MySQL使用,至少淘宝就是这么作了。HBase是建造在HDFS基础上的分布式数据库,能够支持海量数据(比MySQL高一到两个量级)的存储和查询。还不容易丢失数据。后端

1、区别:架构

  1. Hbase: Hadoop database 的简称,也就是基于Hadoop数据库,是一种NoSQL数据库,主要适用于海量明细数据(十亿、百亿)的随机实时查询,如日志明细、交易清单、轨迹行为等。
  2. Hive:Hive是Hadoop数据仓库,严格来讲,不是数据库,主要是让开发人员可以经过SQL来计算和处理HDFS上的结构化数据,适用于离线的批量数据计算。
  • 经过元数据来描述Hdfs上的结构化文本数据,通俗点来讲,就是定义一张表来描述HDFS上的结构化文本,包括各列数据名称,数据类型是什么等,方便咱们处理数据,当前不少SQL ON Hadoop的计算引擎均用的是hive的元数据,如Spark SQL、Impala等;
  • 基于第一点,经过SQL来处理和计算HDFS的数据,Hive会将SQL翻译为Mapreduce来处理数据;

2、关系app

在大数据架构中,Hive和HBase是协做关系,数据流通常以下图:分布式

  1. 经过ETL工具将数据源抽取到HDFS存储;
  2. 经过Hive清洗、处理和计算原始数据;
  3. HIve清洗处理后的结果,若是是面向海量数据随机查询场景的可存入Hbase
  4. 数据应用从HBase查询数据;


 

附详细说明:工具

1. 二者分别是什么?  oop

 Apache Hive是一个构建在Hadoop基础设施之上的数据仓库。经过Hive可使用HQL语言查询存放在HDFS上的数据。HQL是一种类SQL语言,这种语言最终被转化为Map/Reduce. 虽然Hive提供了SQL查询功能,可是Hive不可以进行交互查询--由于它只可以在Haoop上批量的执行Hadoop。学习

    Apache HBase是一种Key/Value系统,它运行在HDFS之上。和Hive不同,Hbase的可以在它的数据库上实时运行,而不是运行MapReduce任务。Hbase被分区为表格,表格又被进一步分割为列簇。列簇必须使用schema定义,列簇将某一类型列集合起来(列不要求schema定义)。例如,“message”列簇可能包含:“to”, ”from” “date”, “subject”, 和”body”. 每个 key/value对在Hbase中被定义为一个cell,每个key由row-key,列簇、列和时间戳。在Hbase中,行是key/value映射的集合,这个映射经过row-key来惟一标识。Hbase利用Hadoop的基础设施,能够利用通用的设备进行水平的扩展。大数据

2. 二者的特色

  Hive帮助熟悉SQL的人运行MapReduce任务。由于它是JDBC兼容的,同时,它也可以和现存的SQL工具整合在一块儿。运行Hive查询会花费很长时间,由于它会默认遍历表中全部的数据。虽然有这样的缺点,一次遍历的数据量能够经过Hive的分区机制来控制。分区容许在数据集上运行过滤查询,这些数据集存储在不一样的文件夹内,查询的时候只遍历指定文件夹(分区)中的数据。这种机制能够用来,例如,只处理在某一个时间范围内的文件,只要这些文件名中包括了时间格式。

    HBase经过存储key/value来工做。它支持四种主要的操做:增长或者更新行,查看一个范围内的cell,获取指定的行,删除指定的行、列或者是列的版本。版本信息用来获取历史数据(每一行的历史数据能够被删除,而后经过Hbase compactions就能够释放出空间)。虽然HBase包括表格,可是schema仅仅被表格和列簇所要求,列不须要schema。Hbase的表格包括增长/计数功能。

3. 限制

  Hive目前不支持更新操做。另外,因为hive在hadoop上运行批量操做,它须要花费很长的时间,一般是几分钟到几个小时才能够获取到查询的结果。Hive必须提供预先定义好的schema将文件和目录映射到列,而且Hive与ACID不兼容。

    HBase查询是经过特定的语言来编写的,这种语言须要从新学习。类SQL的功能能够经过Apache Phonenix实现,但这是以必须提供schema为代价的。另外,Hbase也并非兼容全部的ACID特性,虽然它支持某些特性。最后但不是最重要的--为了运行Hbase,Zookeeper是必须的,zookeeper是一个用来进行分布式协调的服务,这些服务包括配置服务,维护元信息和命名空间服务。

4. 应用场景

    Hive适合用来对一段时间内的数据进行分析查询,例如,用来计算趋势或者网站的日志。Hive不该该用来进行实时的查询。由于它须要很长时间才能够返回结果。

    Hbase很是适合用来进行大数据的实时查询。Facebook用Hbase进行消息和实时的分析。它也能够用来统计Facebook的链接数。

5. 总结

    Hive和Hbase是两种基于Hadoop的不一样技术--Hive是一种类SQL的引擎,而且运行MapReduce任务,Hbase是一种在Hadoop之上的NoSQL 的Key/vale数据库。固然,这两种工具是能够同时使用的。就像用Google来搜索,用FaceBook进行社交同样,Hive能够用来进行统计查询,HBase能够用来进行实时查询,数据也能够从Hive写到Hbase,设置再从Hbase写回Hive。

 

 

 

做者:yuan daisy
连接:https://www.zhihu.com/question/21677041/answer/78289309
来源:知乎
著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。

1. Hive中的表是纯逻辑表,就只是表的定义等,即表的元数据。Hive自己不存储数据,它彻底依赖HDFS和MapReduce。这样就能够将结构化的数据文件映射为为一张数据库表,并提供完整的SQL查询功能,并将SQL语句最终转换为MapReduce任务进行运行。 而HBase表是物理表,适合存放非结构化的数据。

2. Hive是基于MapReduce来处理数据,而MapReduce处理数据是基于行的模式;HBase处理数据是基于列的而不是基于行的模式,适合海量数据的随机访问。

3. HBase的表是疏松的存储的,所以用户能够给行定义各类不一样的列;而Hive表是稠密型,即定义多少列,每一行有存储固定列数的数据。

4. Hive使用Hadoop来分析处理数据,而Hadoop系统是批处理系统,所以不能保证处理的低迟延问题;而HBase是近实时系统,支持实时查询。

5. Hive不提供row-level的更新,它适用于大量append-only数据集(如日志)的批任务处理。而基于HBase的查询,支持和row-level的更新。

6. Hive提供完整的SQL实现,一般被用来作一些基于历史数据的挖掘、分析。而HBase不适用与有join,多级索引,表关系复杂的应用场景。

相关文章
相关标签/搜索