参考
- Hbase 与 Mysql 的区别
- 浅谈 Hbase 和 Hive 的区别以及分别适用的场景
- 一篇文章让你了解 Hive 和 HBase 的区别
- HBase 原理 | HBase 核心原理与应用场景
- 为什么没有以 hbase 作为存储引擎的关系型数据库实现
- ClickHouse 深度揭秘
定义
MySQL
关系型数据库,主要面向 OLTP,支持事务,支持二级索引,支持 SQL,支持主从,Group Replication 架构模型。
HBase
Hadoop Database 的简称,基于 Hadoop 的数据库,是面向列的分布式 NoSQL 数据库,基于 HDFS,支持海量数据读写(尤其是写),支持上亿行,上百万列,比较适合 OLAP。天然分布式,主从架构,不支持事务,不支持二级索引。主要适用于海量明细数据的随机实时查询。
Hive
Hive 是 Hadoop 的数据仓库,主要是让开发人员通过 SQL 来计算和处理 HDFS 上的结构化数据,适用于离线的批量数据计算。
数据存储方式
MySQL
行存储,MySQL 行存储的方式比较适合 OLTP 业务。
Hbase
HBase 不是行式存储,也不是完全的列式存储,而是面向列族的列族式存储。
HBase 的每一列数据在底层都是以 Key / Value 形式存储的,而针对一行数据,同一列族的不同列的数据是顺序相邻存放的,这种模式实际上是行式存储;而如果一个列族下只有一个列的话,就是一种列式存储。因此我们可以说HBase是一种列族式存储。
HBase 通过存储 Key / Value 来工作。支持四种主要操作:增加或更新行,查看一个范围内的 KEY 的 VALUE,获取指定行,删除指定「行,列,或列的版本」。(Hot Key + 同一对象不同时间的数据放在一起)。
Hive
通过元数据来描述 HDFS 上的结构化文本数据,即定义一张表来描述 HDFS 上的结构化文本,包括列名,数据类型等,便于处理数据。很多 SQL On Hadoop 的计算引擎均用的是 Hive 的元数据。
引擎
Hive
通过 SQL 来处理和计算 HDFS 的数据,Hive 会将 SQL 翻译为 MapReduce 来处理数据。
HBase
HBase 是 Google BigTable 的开源实现,底层存储引擎是基于 LSM-Tree 数据结构设计的。
总结
Hive 和 HBase 是两种基于 Hadoop 的不同技术
Hive 是类 SQL 引擎,运行 MapReduce 任务
HBase 是在 Hadoop 之上的 NoSQL Key / Value 数据库
默认情况下 HBase 只对 RowKey 做了单列索引,所以 HBase 能通过 RowKey 进行高效的的单点查询及小范围扫描。HBase 索引还是比较单一的,通过非 RowKey 列查询性能比较低,除非对非 Rowkey 列做二级索引,否则不建议根据非 Rowkey 列做查询。
HBase 的二级索引一般是基于 HBase 协处理器实现,目前比较成熟的方案可以使用 Phoenix,HBase 集成 Phoenix 构建二级索引实践,Phoenix 不仅能够为 HBase 提供二级索引能力,还扮演着 HBase 的 SQL 层,增强了 HBase 即席查询的能力。