HBase 和 Hive 的差异是什么,各自适用在什么场景中?

https://www.zhihu.com/question/21677041/answer/185664626web


先放结论:Hbase和Hive在大数据架构中处在不一样位置:数据库

  • Hbase主要解决实时数据查询问题架构

  • Hive主要解决数据处理和计算问题,通常是配合使用。app


1、区别:ide

  1. Hbase: Hadoop database 的简称,也就是基于Hadoop数据库,是一种NoSQL数据库,主要适用于海量明细数据(十亿、百亿)的随机实时查询,如日志明细、交易清单、轨迹行为等。工具

  2. Hive:Hive是Hadoop数据仓库,严格来讲,不是数据库,主要是让开发人员可以经过SQL来计算和处理HDFS上的结构化数据,适用于离线的批量数据计算。oop

  • 经过元数据来描述Hdfs上的结构化文本数据,通俗点来讲,就是定义一张表来描述HDFS上的结构化文本,包括各列数据名称,数据类型是什么等,方便咱们处理数据,当前不少SQL ON Hadoop的计算引擎均用的是hive的元数据,如Spark SQL、Impala等;大数据

  • 基于第一点,经过SQL来处理和计算HDFS的数据,Hive会将SQL翻译为Mapreduce来处理数据;spa


2、关系翻译

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

  1. 经过ETL工具将数据源抽取到HDFS存储;

  2. 经过Hive清洗、处理和计算原始数据;

  3. HIve清洗处理后的结果,若是是面向海量数据随机查询场景的可存入Hbase

  4. 数据应用从HBase查询数据;


h1.jpg


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,多级索引,表关系复杂的应用场景。

相关文章
相关标签/搜索