返回介绍

2.3 HBase

发布于 2024-09-24 23:25:31 字数 5460 浏览 0 评论 0 收藏 0

简介

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 的大小。

image-20191205204757378

图 HBase 数据模型

表 2 概念介绍

名称描述
Row Key行键,相当于关系表的主键,每一行数据的唯一标识。字符串、整数、二进制串都可以作为 Row Key。所有记录按照 Row Key 排序后存储。
Timestamp每次数据操作对应的时间戳,数据按时间戳区分版本,每个 Cell 的多个版本的数据按时间倒序存储。
CellHBase 最小的存储单元,由 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 所示。

image-20191205204838950

图 RegionServer 的数据存储结构

图 3 中 Region 的各部分的说明如 表 3 所示。

 表 3 Region 结构说明
名称描述
Store一个 Region 由一个或多个 Store 组成,每个 Store 对应 图 2 中的一个 Column Family。
MemStore一个 Store 包含一个 MemStore,MemStore 缓存客户端向 Region 插入的数据,当 RegionServer 中的 MemStore 大小达到配置的容量上限时,RegionServer 会将 MemStore 中的数据“flush”到 HDFS 中。
StoreFileMemStore 的数据 flush 到 HDFS 后成为 StoreFile,随着数据的插入,一个 Store 会产生多个 StoreFile,当 StoreFile 的个数达到配置的最大值时,RegionServer 会将多个 StoreFile 合并为一个大的 StoreFile。
HFileHFile 定义了 StoreFile 在文件系统中的存储格式,它是当前 HBase 系统中 StoreFile 的具体实现。
HLogHLog 日志保证了当 RegionServer 故障的情况下用户写入的数据不丢失,RegionServer 的多个 Region 共享一个相同的 HLog。

元数据表

元数据表是 HBase 中一种特殊的表,用来帮助 Client 定位到具体的 Region。元数据表包括“hbase:meta”表,用来记录用户表的 Region 信息,例如,Region 位置、起始 Row Key 及结束 Row Key 等信息。

元数据表和用户表的映射关系如 图 4 所示。

image-20191205204911185

图 元数据表和用户表的映射关系

  • 数据操作流程

HBase 数据操作流程如 图 5 所示。

image-20191205204930051

图 HBase 数据操作流程

  1. 对 HBase 进行增、删、改、查数据操作时,HBase Client 首先连接 ZooKeeper 获得“hbase:meta”表所在的 RegionServer 的信息(涉及 namespace 级别修改的,比如创建表、删除表需要访问 HMaster 更新 meta 信息)。
  2. HBase Client 连接到包含对应的“hbase:meta”表的 Region 所在的 RegionServer,并获得相应的用户表的 Region 所在的 RegionServer 位置信息。
  3. HBase Client 连接到对应的用户表 Region 所在的 RegionServer,并将数据操作命令发送给该 RegionServer,RegionServer 接收并执行该命令从而完成本次数据操作。

为了提升数据操作的效率,HBase Client 会在内存中缓存“hbase:meta”和用户表 Region 的信息,当应用程序发起下一次数据操作时,HBase Client 会首先从内存中获取这些信息;当未在内存缓存中找到对应数据信息时,HBase Client 会重复上述操作。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文