一、简介
HBase 是一个分布式、面向列的存储系统,基于 Hadoop 的 HDFS。它模仿了 Google 的 BigTable 设计,主要用于存储海量结构化数据,支持实时读写。
二、核心组件
1. HMaster
- 作用:HBase 的主服务器,负责管理 RegionServer,负载均衡、故障恢复、元数据管理等。
- 功能:
- 分配 Region 给 RegionServer
- 管理表的创建、删除、schema 变更
- 监控 RegionServer 状态,进行故障转移
2. RegionServer
- 作用:实际存储和处理数据的节点,负责读写请求。
- 功能:
- 管理多个 Region
- 处理客户端的读写请求
- 执行数据的分裂和合并
3. Region
- 作用:HBase 表的水平分片,每个 Region 存储表的部分数据。
- 特点:
- 自动分裂(数据量大时自动拆分)
- 由 RegionServer 管理
4. ZooKeeper
- 作用:分布式协调服务,负责 HBase 的主备选举、节点状态监控、元数据存储等。
- 功能:
- 保证高可用性
- 协调 HMaster 和 RegionServer 的状态
5. HDFS
- 作用:底层分布式文件系统,所有数据最终存储在 HDFS 上。
三、数据存储结构
1. 表(Table)
- 由行(Row)和列族(Column Family)组成。
2. 行键(Row Key)
- 唯一标识一行数据,按字典序排序。
3. 列族(Column Family)
- 物理存储单元,表设计时确定。
4. 列限定符(Column Qualifier)
- 列族下的具体列,可以动态添加。
5. 单元(Cell)
- 三元组(Row Key, Column Family:Qualifier, Timestamp)唯一确定一个数据单元。
四、数据写入流程
- 客户端发起写请求
- RegionServer 接收请求
- 数据先写入 MemStore(内存)
- 同步写 WAL(Write Ahead Log,预写日志)
- MemStore 达到阈值后,flush 到 HFile(HDFS)
- HFile 按需合并(Compaction)
五、数据读取流程
- 客户端通过 ZooKeeper 获取 RegionServer 地址
- RegionServer 查询 MemStore 和 HFile
- 合并返回结果给客户端
六、元数据管理
- .META. 表:记录每个 Region 的分布信息
- ROOT 表(早期版本):记录 META 表的位置
- 现在统一由 ZooKeeper 进行管理
七、容错与高可用
- 多个 HMaster(主备机制)
- RegionServer 自动重启和数据恢复
- ZooKeeper 保证协调一致性
八、架构示意图
+----------------+ +------------------+
| HMaster | <-----> | ZooKeeper |
+----------------+ +------------------+
| |
v v
+----------------+ +------------------+
| RegionServer 1 | | RegionServer 2 | ...
+----------------+ +------------------+
| |
v v
[Region] [Region]
| |
v v
[HFile] [HFile]
| |
v v
[HDFS] [HDFS]
九、写入流程(详细)
-
客户端定位 RegionServer
- 客户端首先需要确定要写入的 Row Key 属于哪个 Region,由哪个 RegionServer 管理。
- 客户端通过 ZooKeeper 查询 META 表(或缓存)获取 RegionServer 地址。
-
写入 WAL(Write-Ahead Log)
- 写入操作首先记录到 WAL(预写日志),WAL 是持久化日志文件,存储在 HDFS 上。
- 这样即使 RegionServer 崩溃,重启后可以通过 WAL 恢复数据,保证数据不丢失。
-
写入 MemStore
- 数据写入 WAL 后,同时写入 MemStore(内存中的数据结构,类似于内存表)。
- MemStore 按行键排序,便于快速读取和后续刷盘。
-
Flush 到 HFile
- 当 MemStore 数据量达到阈值(如 128MB),会触发 flush 操作,将数据写入 HFile(HDFS 文件)。
- flush 后 MemStore 清空,新的数据继续写入新的 MemStore。
-
Compaction(合并)
- 随着不断 flush,HFile 数量增多,会定期进行文件合并(Compaction),减少文件碎片,提高读取效率。
- 分为 minor compaction(小合并)和 major compaction(大合并,会删除过期或被删除的数据)。
十、读取流程(详细)
-
客户端定位 RegionServer 和 Region
- 客户端通过 ZooKeeper 或缓存定位数据所在的 RegionServer。
-
RegionServer 读取数据
- 首先在 MemStore 查找最新数据(因为 MemStore 可能有尚未刷盘的数据)。
- 如果 MemStore 没有,则查询 HFile(存储在 HDFS 上)。
-
合并结果返回
- 如果有多个版本,会根据时间戳合并,返回最新或指定版本的数据。
-
BlockCache(块缓存)优化
- RegionServer 有 BlockCache(块缓存),常用数据会缓存到内存,加速读取。
十一、Region 的分裂与合并
1. Region 分裂(Split)
- 当某个 Region 数据量过大(如达到 10GB),会自动分裂为两个新的 Region。
- 分裂时,HMaster 负责重新分配和元数据更新。
- 分裂后的 Region 分别由一个或多个 RegionServer 管理,保证负载均衡。
2. Region 合并(Merge)
- 如果某些 Region 数据量过小,可以合并为一个 Region,减少管理开销。
- 合并操作由管理员或自动触发。
十二、Compaction(文件合并)
1. Minor Compaction
- 合并少量小的 HFile,减少文件数量,提升读取性能。
2. Major Compaction
-
合并所有 HFile,清理已删除和过期版本的数据,释放空间。
-
Compaction 优点:
- 提高数据读取效率
- 清理无用数据
- 减少 HFile 数量,降低 NameNode 压力
十三、高可用性与容错机制
1. HMaster 主备机制
- 通常部署多个 HMaster(一个主,多个备),通过 ZooKeeper 选举主节点。
- 主节点故障时,备节点自动接管,保证服务不中断。
2. RegionServer 容错
- RegionServer 崩溃后,HMaster 检测到并将其管理的 Region 迁移到其他 RegionServer。
- WAL 日志保证数据不丢失,RegionServer 重启或迁移时可恢复数据。
3. 数据可靠性
- 所有数据最终存储在 HDFS,利用 HDFS 的副本机制(如 3 副本)保证数据安全。
十四、元数据管理
- META 表:保存所有表的 Region 分布信息。
- ZooKeeper:保存 HMaster、RegionServer 状态、META 表位置等,客户端通过 ZooKeeper 获取最新元数据。
十五、架构优势与适用场景
-
优势:
- 高扩展性(可横向扩展到数百台服务器)
- 高可用性(主备机制,数据多副本)
- 实时读写(适合大数据场景)
- 灵活的列式存储,适合稀疏数据
-
适用场景:
- 海量日志存储
- 实时分析
- 用户画像、推荐系统
- IoT 设备数据存储
十六、总结
HBase 架构是一个典型的主从分布式系统,利用 ZooKeeper 协调,底层依赖 HDFS,数据分片由 Region 管理,读写高效且支持高可用。适合存储大规模、稀疏数据,支持实时查询。

9121

被折叠的 条评论
为什么被折叠?



