hive是文件的视图,hbase是建了索引的key-value表。 web
先放结论:Hbase和Hive在大数据架构中处在不一样位置,Hbase主要解决实时数据查询问题,Hive主要解决数据处理和计算问题,通常是配合使用。数据库
Hive的底层能够是HBase或者HDFS上存储的文件。
Hive的做用是把HQL翻译成MapReduce程序,从而减小分析人员每次都要写冗长Java程序的工做量。单次Hive查询都须要耗费分钟级以上的时间(哪怕一个再小的表),所以没法做为web后端的数据库使用。
HBase能够替代MySQL使用,至少淘宝就是这么作了。HBase是建造在HDFS基础上的分布式数据库,能够支持海量数据(比MySQL高一到两个量级)的存储和查询。还不容易丢失数据。后端
1、区别:架构
2、关系app
在大数据架构中,Hive和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,多级索引,表关系复杂的应用场景。