定义
- hive是一个构建在hadoop基础设施上的数据仓库,通过hive可以使用hql语言查询存放在hdfs上的数据。hql是一种类sql语言,这种语言最终被转化为map/reduce。虽然hive提供了sql查询功能,但是hive不能进行交互查询。(只能在hadoop上批量执行hadoop)
- hbase是一种key/value系统,运行在hdfs之上。和hive不一样,hbase能够在数据库上实时运行,而不是运行map/reduce任务。hive被分区为表格,表格又被进一步分割为列簇。列簇必须使用schema定义,列簇将某一类型列集合起来。每一个key/value对在hbase中被定义为一个cell,每一个key由row-key,列簇,列和时间戳。在hbase中,行是key/value映射的集合,这个映射通过row-key来唯一标识。
特点
- hive帮助熟悉sql的人运行map/reduce任务。因为它是jdbc兼容的,同时它也能够和现存的sql工具整合一起。运行hive查询会花费很长时间,因为它会默认遍历表中所有数据。虽然有这样的缺点,一次遍历的数据量可以通过hive的分区机制来控制。分区允许在数据集上运行过滤查询,这些数据集存储在不同的文件夹内,查询的时候只遍历指定文件夹(分区)中的数据。
- hbase通过存储key/value来工作。它支持四种主要的操作,增加或者更新行,查看一个范围内的cell,获取指定的行,删除指定的行、列或者列的版本。版本信息用来获取历史数据(每一行的历史数据可以被删除,然后通过hbase compaction就可以释放空间)。虽然hbase包括表格,但是schema仅仅被表格和列簇所要求,列不需要schema。hbase的表格包括增加/计数功能。
限制
- hive目前不支持更新操作。另外,由于hive在hadoop上运行批量操作,它需要花费很长的时间,通常是几分钟到几个小时才可以获取到查询的结果。Hive必须提供预先定义好的schema将文件和目录映射到列,并且Hive与ACID不兼容。
- HBase查询是通过特定的语言来编写的,这种语言需要重新学习。类SQL的功能可以通过Apache Phonenix实现,但这是以必须提供schema为代价的。另外,Hbase也并不是兼容所有的ACID特性,虽然它支持某些特性。最后但不是最重要的–为了运行Hbase,zookeeper是必须的,zookeeper是一个用来进行分布式协调的服务,这些服务包括配置服务,维护元信息和命名空间服务。
应用场景
- Hive适合用来对一段时间内的数据进行分析查询,例如,用来计算趋势或者网站的日志。Hive不应该用来进行实时的查询。因为它需要很长时间才可以返回结果。
- Hbase非常适合用来进行大数据的实时查询。Facebook用Hbase进行消息和实时的分析。它也可以用来统计Facebook的连接数。
总结
Hive和Hbase是两种基于Hadoop的不同技术–Hive是一种类SQL的引擎,并且运行MapReduce任务,Hbase是一种在Hadoop之上的NoSQL 的Key/vale数据库。当然,这两种工具是可以同时使用的。就像用Google来搜索,用FaceBook进行社交一样,Hive可以用来进行统计查询,HBase可以用来进行实时查询,数据也可以从Hive写到Hbase,设置再从Hbase写回Hive。