Hive与HBase的区别
从使用方面讲
- Hive是一个构建在Hadoop平台上的数据仓库,可以将结构化的数据文件映射为一张数据库表。通过Hive可以使用HQL语言查询存放在HDFS上的数据。HQL是一种类SQL语言,这种语言最终被转化成Map/Reduce。
- HBase 是基于HDFS平台的Key/Value类型的NoSql数据库,是一个分布式、可扩展、存储海量数据的数据库,并且对与null值保存不占用空间。HBase能够在数据库上实时运行,而不是运行MapReduce任务。HBase被分区成表,表格又进一步分割成列族。列族必须使用Schema定义,列族将某一类型的列集合起来。例如:"message"列族可能包含"to"、"from" 、"date" 、"body"等列。HBase中每一个Key/Value被定义为一个cell,一个完整的cell由rowkey、列族、列、时间戳组成。在HBase中,行是Key/Value映射的集合,整个映射通过rowkey来唯一标识。HBase利用Hadoop的基础设施,可以进行水平扩展。
两者的特点
- Hive帮助熟悉SQL的人运行MapReduce任务。运行Hive查询会花费较长时间,因为Hive的默认计算引擎是Hadoop的MapReduce。当然Hive也可以将底层计算引擎更换为Spark/Tez等。
- HBase通过存储Key/Value类型数据来工作。它支持四种主要的操作:增加或者更新行、查看一个范围内的cell、获取指定的行、删除指定的行、列或者列的版本。HBase数据的版本信息主要用来获取历史数据,每一行的历史数据可以被删除,然后通过HBase 的Compactions可以释放空间。虽然HBase包括表格,但是schema仅仅被表格和列族所要求,列不需要schema。HBase的表包括增加和计数功能。
限制
- Hive目前仅支持ORCFile文件格式的数据更新操作(前提是需要开启事务支持),Hive必须提供预先定义好的schema,将文件映射成表。
- HBase的SQL查询功能可以通过 Apache Phonenix实现,需要提供表的schema。HBase的运行需要zookeeper的支持,zookeeper用来分布式协调服务(配置服务、维护元信息、命名空间服务)
应用场景
- Hive主要用户构建基于Hadoop平台的数据仓库,处理大数据量的离线处理工作;
- HBase适合用来大数据的实时查询、海量数据的存储、离散型数据的存储;
总结
Hive和Hbase是两种基于Hadoop的不同技术–Hive是一种类SQL的引擎,并且运行MapReduce任务,HBase是一种在Hadoop之上的NoSQL 的Key/value数据库。当然,这两种工具是可以同时使用的。Hive可以用来进行统计查询,HBase可以用来进行实时查询,数据也可以从Hive写到Hbase,设置再从Hbase写回Hive。