1.类数据库存储层(结构化存储)
2.分布式的Hbase依赖于HDFS
3.与Hive相比性能更高,容错性更强,具有及时性;但不支持SQL(Hive适用于静态数据分析工作)
4.Poenix是使用Hbase的好帮手
5.与传统数据库相比:
HBase | RDBMS |
---|---|
硬件架构 | 类似于 Hadoop 的分布式集群,硬件成本低廉 传统的多核系统,硬件成本昂贵 |
容错性 | 由软件架构实现,由于由多个节点组成,所以不担心一点或几点宕机 一般需要额外硬件设备实现 HA 机制 |
数据库大小 | PB GB、TB |
数据排布方式 | 稀疏的、分布的多维的 Map 以行和列组织 |
数据类型 | Bytes 丰富的数据类型 |
事物支持 | ACID 只支持单个 Row 级别 全面的 ACID 支持,对 Row 和表 |
查询语言 只支持 Java API (除非与其他框架一起使用,如 Phoenix、Hive) SQL
索引| 只支持 Row-key,除非与其他技术一起应用,如 Phoenix、Hive 支持
吞吐量| 百万查询/每秒 数千查询/每秒
表 3. 数据在 HBase 中的排布(逻辑上)
Row-Key | Value(CF、Qualifier、Version) |
---|---|
1 | info{‘姓’: ‘张’,‘名’:‘三’} pwd{‘密码’: ‘111’} |
2 | Info{‘姓’: ‘李’,‘名’:‘四’} pwd{‘密码’: ‘222’} |
从上面示例表中,我们可以看出,在 HBase 中首先会有 Column Family 的概念,简称为 CF。CF 一般用于将相关的列(Column)组合起来。在物理上 HBase 其实是按 CF 存储的,只是按照 Row-key 将相关 CF 中的列关联起来。物理上的数据排布大致可以如表 4 所示。
表 4. 数据在 HBase 中的排布
Row-Key | CF:Column-Key | 时间戳 | Cell Value |
---|---|---|---|
1 | info:fn | 123456789 | 三 |
1 | info:ln | 123456789 | 张 |
2 | info:fn | 123456789 | 四 |
2 | info:ln | 123456789 | 李 |
我们已经提到 HBase 是按照 CF 来存储数据的。在表 3 中,我们看到了两个 CF,分别是 info 和 pwd。info 存储着姓名相关列的数据,而 pwd 则是密码相关的数据。上表便是 info 这个 CF 存储在 Hbase 中的数据排布。Pwd 的数据排布是类似的。上表中的 fn 和 ln 称之为 Column-key 或者 Qulifimer。在 Hbase 中,Row-key 加上 CF 加上 Qulifier 再加上一个时间戳才可以定位到一个单元格数据(Hbase 中每个单元格默认有 3 个时间戳的版本数据)。初学者,在一开始接触这些概念是很容易混淆。其实不管是 CF 还是 Qulifier 都是客户定义出来的。也就是说在 HBase 中创建表格时,就需要指定表格的 CF、Row-key 以及 Qulifier。我们会在后续的介绍中,尝试指定这些相关的概念,以便加深理解。这里我们先通过下图理解下 HBase 中,逻辑上的数据排布与物理上的数据排布之间的关系。
图 1. Hbase 中逻辑上数据的排布与物理上排布的关联
从上图我们看到 Row1 到 Row5 的数据分布在两个 CF 中,并且每个 CF 对应一个 HFile。并且逻辑上每一行中的一个单元格数据,对应于 HFile 中的一行,然后当用户按照 Row-key 查询数据的时候,HBase 会遍历两个 HFile,通过相同的 Row-Key 标识,将相关的单元格组织成行返回,这样便有了逻辑上的行数据。讲解到这,我们就大致了解 HBase 中的数据排布格式,以及与 RDBMS 的一些区别。
对于 RDBMS 来说,一般都是以 SQL 作为为主要的访问方式。而 HBase 是一种"NoSQL"数据库。“NoSQL"是一个通用词表示该数据库并不是 RDBMS 。现在的市面上有许多种 NoSQL 数据库,如 BerkeleyDB 是本地 NoSQL 数据库的例子, HBase 则为大型分布式 NoSql 数据库。从技术上来说,Hbase 更像是"数据存储"而非"数据库”(HBase 和 HDFS 都属于大数据的存储层)。因此,HBase 缺少很多 RDBMS 特性,如列类型,二级索引,触发器和高级查询语言等。然而, HBase 也具有许多其他特征同时支持线性化和模块化扩充。最明显的方式,我们可以通过增加 Region Server 的数量扩展 HBase。并且 HBase 可以放在普通的服务器中,例如将集群从 5 个扩充到 10 个 Region Server 时,存储空间和处理容量都可以同时翻倍。当然 RDBMS 也能很好的扩充,但仅对一个点,尤其是对一个单独数据库服务器而言,为了更好的性能,往往需要特殊的硬件和存储设备(往往价格也非常昂贵)。