https://www.zhihu.com/question/21677041
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是文件的视图,hbase是建了索引的key-value表
Hbase | Hive | |
---|---|---|
应用的系统 | OLTP | OLAP |
表结构 | HBase表是物理表,适合存放非结构化的数据 | 纯逻辑表,就只是表的定义等,即表的元数据 |
模式 | 基于列的而不是基于行的模式,适合海量数据的随机访问 | 基于MapReduce来处理数据,而MapReduce处理数据是基于行的模式 |
松稠性 | 表是疏松的存储的,因此用户可以给行定义各种不同的列 | 表是稠密型,即定义多少列,每一行有存储固定列数的数据 |
实时性 | 近实时系统,支持实时查询 | Hadoop来分析处理数据,而Hadoop系统是批处理系统,因此不能保证处理的低迟延问题 |
是否支持更新 | 基于HBase的查询,支持和row-level的更新 | 不提供row-level的更新,它适用于大量append-only数据集(如日志)的批任务处理 |
SQL | HBase不适用与有join,多级索引,表关系复杂的应用场景 | 提供完整的SQL实现,通常被用来做一些基于历史数据的挖掘、分析 |