2.3 HBase
简介
HBase 是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。HBase 适合于存储大表数据(表的规模可以达到数十亿行以及数百万列),并且对大表数据的读、写访问可以达到实时级别。
- 利用 Hadoop HDFS(Hadoop Distributed File System)作为其文件存储系统,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。
- 为 Spark 和 Hadoop MapReduce 提供海量数据实时处理能力。
- 利用 ZooKeeper 作为协同服务。
结构
HBase 集群由主备 Master 进程和多个 RegionServer 进程组成。
HBase 数据模型
HBase 以表的形式存储数据,数据模型如 图 2 所示。表中的数据划分为多个 Region,并由 Master 分配给对应的 RegionServer 进行管理。
每个 Region 包含了表中一段 Row Key 区间范围内的数据,HBase 的一张数据表开始只包含一个 Region,随着表中数据的增多,当一个 Region 的大小达到容量上限后会分裂成两个 Region。您可以在创建表时定义 Region 的 Row Key 区间,或者在配置文件中定义 Region 的大小。
图 HBase 数据模型
表 2 概念介绍
名称 | 描述 |
---|---|
Row Key | 行键,相当于关系表的主键,每一行数据的唯一标识。字符串、整数、二进制串都可以作为 Row Key。所有记录按照 Row Key 排序后存储。 |
Timestamp | 每次数据操作对应的时间戳,数据按时间戳区分版本,每个 Cell 的多个版本的数据按时间倒序存储。 |
Cell | HBase 最小的存储单元,由 Key 和 Value 组成。Key 由 row、column family、column qualifier、timestamp、type、MVCC version 这 6 个字段组成。Value 就是对应存储的二进制数据对象。 |
Column Family | 列族,一个表在水平方向上由一个或多个 Column Family 组成。一个 CF(Column Family)可以由任意多个 Column 组成。Column 是 CF 下的一个标签,可以在写入数据时任意添加,因此 CF 支持动态扩展,无需预先定义 Column 的数量和类型。HBase 中表的列非常稀疏,不同行的列的个数和类型都可以不同。此外,每个 CF 都有独立的生存周期(TTL)。可以只对行上 锁,对行的操作始终是原始的。 |
Column | 列,与传统的数据库类似,HBase 的表中也有列的概念,列用于表示相同类型的数据。 |
- RegionServer 数据存储
RegionServer 主要负责管理由 HMaster 分配的 Region,RegionServer 的数据存储结构如 图 3 所示。
图 RegionServer 的数据存储结构
表 3 Region 结构说明 | |
---|---|
名称 | 描述 |
Store | 一个 Region 由一个或多个 Store 组成,每个 Store 对应 图 2 中的一个 Column Family。 |
MemStore | 一个 Store 包含一个 MemStore,MemStore 缓存客户端向 Region 插入的数据,当 RegionServer 中的 MemStore 大小达到配置的容量上限时,RegionServer 会将 MemStore 中的数据“flush”到 HDFS 中。 |
StoreFile | MemStore 的数据 flush 到 HDFS 后成为 StoreFile,随着数据的插入,一个 Store 会产生多个 StoreFile,当 StoreFile 的个数达到配置的最大值时,RegionServer 会将多个 StoreFile 合并为一个大的 StoreFile。 |
HFile | HFile 定义了 StoreFile 在文件系统中的存储格式,它是当前 HBase 系统中 StoreFile 的具体实现。 |
HLog | HLog 日志保证了当 RegionServer 故障的情况下用户写入的数据不丢失,RegionServer 的多个 Region 共享一个相同的 HLog。 |
元数据表
元数据表是 HBase 中一种特殊的表,用来帮助 Client 定位到具体的 Region。元数据表包括“hbase:meta”表,用来记录用户表的 Region 信息,例如,Region 位置、起始 Row Key 及结束 Row Key 等信息。
元数据表和用户表的映射关系如 图 4 所示。
图 元数据表和用户表的映射关系
- 数据操作流程
HBase 数据操作流程如 图 5 所示。
图 HBase 数据操作流程
- 对 HBase 进行增、删、改、查数据操作时,HBase Client 首先连接 ZooKeeper 获得“hbase:meta”表所在的 RegionServer 的信息(涉及 namespace 级别修改的,比如创建表、删除表需要访问 HMaster 更新 meta 信息)。
- HBase Client 连接到包含对应的“hbase:meta”表的 Region 所在的 RegionServer,并获得相应的用户表的 Region 所在的 RegionServer 位置信息。
- HBase Client 连接到对应的用户表 Region 所在的 RegionServer,并将数据操作命令发送给该 RegionServer,RegionServer 接收并执行该命令从而完成本次数据操作。
为了提升数据操作的效率,HBase Client 会在内存中缓存“hbase:meta”和用户表 Region 的信息,当应用程序发起下一次数据操作时,HBase Client 会首先从内存中获取这些信息;当未在内存缓存中找到对应数据信息时,HBase Client 会重复上述操作。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论