HBase 和 Hive 的差别是什么,各自适用在什么场景中
Hbase 和 Hive 在大数据架构中处在不同位置,Hbase 主要解决实时数据查询问题,Hive 主要解决数据处理和计算问题,一般是配合使用。
一、区别:
Hbase: Hadoop database 的简称,也就是基于 Hadoop 数据库,是一种 NoSQL 数据库,主要适用于海量明细数据(十亿、百亿)的随机实时查询,如日志明细、交易清单、轨迹行为等。
Hive:Hive 是 Hadoop 数据仓库,严格来说,不是数据库,主要是让开发人员能够通过 SQL 来计算和处理 HDFS 上的结构化数据,适用于离线的批量数据计算。
通过元数据来描述 Hdfs 上的结构化文本数据,通俗点来说,就是定义一张表来描述 HDFS 上的结构化文本,包括各列数据名称,数据类型是什么等,方便我们处理数据,当前很多 SQL ON Hadoop 的计算引擎均用的是 hive 的元数据,如 Spark SQL、Impala 等;
基于第一点,通过 SQL 来处理和计算 HDFS 的数据,Hive 会将 SQL 翻译为 Mapreduce 来处理数据;
二、关系
在大数据架构中,Hive 和 HBase 是协作关系,数据流一般如下图:
通过 ETL 工具将数据源抽取到 HDFS 存储;
通过 Hive 清洗、处理和计算原始数据;
HIve 清洗处理后的结果,如果是面向海量数据随机查询场景的可存入 Hbase
数据应用从 HBase 查询数据;
Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的 sql 查询功能,可以将 sql 语句转换为 MapReduce 任务进行运行。 HBase 是 Hadoop 的数据库,一个分布式、可扩展、大数据的存储。单个的从字面意思上或许很难看出二者的区别,别急,下面我们就对二者做个详细的介绍。
两者的特点
Hive 帮助熟悉 SQL 的人运行 MapReduce 任务。因为它是 JDBC 兼容的,同时,它也能够和现存的 SQL 工具整合在一起。运行 Hive 查询会花费很长时间,因为它会默认遍历表中所有的数据。虽然有这样的缺点,一次遍历的数据量可以通过 Hive 的分区机制来控制。分区允许在数据集上运行过滤查询,这些数据集存储在不同的文件夹内,查询的时候只遍历指定文件夹(分区)中的数据。这种机制可以用来,例如,只处理在某一个时间范围内的文件,只要这些文件名中包括了时间格式。
HBase 通过存储 key/value 来工作。它支持四种主要的操作:增加或者更新行,查看一个范围内的 cell,获取指定的行,删除指定的行、列或者是列的版本。版本信息用来获取历史数据(每一行的历史数据可以被删除,然后通过 Hbase compactions 就可以释放出空间)。虽然 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。
评论