HBase分布式架构 #
一、架构概述 #
HBase采用Master-Slave架构,基于HDFS存储数据,使用ZooKeeper进行协调服务。
1.1 整体架构图 #
text
┌─────────────────────────────────────────────────────────────────────┐
│ HBase 架构图 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ Client │ │ Client │ │
│ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │
│ └───────────┬───────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ ZooKeeper 集群 │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │ ZK 1 │ │ ZK 2 │ │ ZK 3 │ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ │ │
│ │ - 集群状态管理 - Master选举 - Region定位 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌───────────┴───────────┐ │
│ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ Master │ │ Master │ (Backup) │
│ │ (Active) │ │ (Standby) │ │
│ └──────┬──────┘ └─────────────┘ │
│ │ │
│ │ Region分配、负载均衡、元数据管理 │
│ │ │
│ ┌──────┴──────────────────────────────────────────────────┐ │
│ │ RegionServer 集群 │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐│ │
│ │ │ RS 1 │ │ RS 2 │ │ RS 3 │ │ RS 4 ││ │
│ │ │ Region A │ │ Region B │ │ Region C │ │ Region D ││ │
│ │ │ Region E │ │ Region F │ │ Region G │ │ Region H ││ │
│ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘│ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ HDFS 集群 │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │DataNode 1│ │DataNode 2│ │DataNode 3│ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ │ - 数据存储 - 数据复制 - 容错 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘
1.2 核心组件 #
| 组件 | 角色 | 职责 |
|---|---|---|
| Master | 主节点 | 管理元数据、Region分配、负载均衡 |
| RegionServer | 工作节点 | 处理读写请求、管理Region |
| ZooKeeper | 协调服务 | 状态同步、Master选举、Region定位 |
| HDFS | 存储层 | 数据持久化存储、副本管理 |
| Client | 客户端 | 发起读写请求、缓存元数据 |
二、Master详解 #
2.1 Master职责 #
text
Master核心职责
├── 表管理
│ ├── 创建、删除、修改表
│ └── 表结构变更
│
├── Region管理
│ ├── Region分配
│ ├── Region迁移
│ └── Region合并
│
├── 负载均衡
│ ├── Region分布均衡
│ └── 热点Region迁移
│
└── 元数据管理
├── hbase:meta表维护
└── Namespace管理
2.2 Master HA机制 #
text
┌─────────────────────────────────────────────────────────┐
│ Master HA 机制 │
├─────────────────────────────────────────────────────────┤
│ │
│ ZooKeeper │
│ ┌─────────────────────────────────────────────────┐ │
│ │ /hbase/master → Master节点信息 │ │
│ │ /hbase/backup-masters → 备Master列表 │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ 选举流程: │
│ 1. 多个Master启动,尝试创建临时节点 │
│ 2. 成功创建者成为Active Master │
│ 3. 其他Master成为Backup Master │
│ 4. Active Master故障,Backup Master接管 │
│ │
│ 故障转移: │
│ 1. ZooKeeper检测到Master节点消失 │
│ 2. Backup Master竞争成为Active │
│ 3. 新Master初始化,恢复集群状态 │
│ │
└─────────────────────────────────────────────────────────┘
2.3 Master配置 #
xml
<!-- hbase-site.xml -->
<property>
<name>hbase.master.port</name>
<value>16000</value>
</property>
<property>
<name>hbase.master.info.port</name>
<value>16010</value>
</property>
<property>
<name>hbase.master.logcleaner.ttl</name>
<value>600000</value>
</property>
三、RegionServer详解 #
3.1 RegionServer职责 #
text
RegionServer核心职责
├── 请求处理
│ ├── 处理读写请求
│ ├── 执行Scan操作
│ └── 执行过滤器
│
├── Region管理
│ ├── 管理多个Region
│ ├── Region切分
│ └── Region合并
│
├── 数据存储
│ ├── MemStore管理
│ ├── StoreFile管理
│ └── HFile管理
│
└── 数据维护
├── Compaction
├── Flush
└── WAL管理
3.2 RegionServer内部结构 #
text
┌─────────────────────────────────────────────────────────────────────┐
│ RegionServer 内部结构 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ RegionServer │ │
│ │ ┌─────────────────────────────────────────────────────────┐│ │
│ │ │ Region 1 ││ │
│ │ │ ┌─────────────┐ ┌─────────────┐ ││ │
│ │ │ │ Store │ │ Store │ (每个列族一个Store) ││ │
│ │ │ │ (CF: info) │ │ (CF: data) │ ││ │
│ │ │ │ ┌─────────┐ │ │ ┌─────────┐ │ ││ │
│ │ │ │ │MemStore │ │ │ │MemStore │ │ ││ │
│ │ │ │ └─────────┘ │ │ └─────────┘ │ ││ │
│ │ │ │ ┌─────────┐ │ │ ┌─────────┐ │ ││ │
│ │ │ │ │StoreFile│ │ │ │StoreFile│ │ ││ │
│ │ │ │ └─────────┘ │ │ └─────────┘ │ ││ │
│ │ │ └─────────────┘ └─────────────┘ ││ │
│ │ └─────────────────────────────────────────────────────────┘│ │
│ │ │ │
│ │ ┌──────────────────┐ ┌──────────────────┐ │ │
│ │ │ BlockCache │ │ WAL │ │ │
│ │ │ (读缓存) │ │ (写前日志) │ │ │
│ │ └──────────────────┘ └──────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘
3.3 RegionServer配置 #
xml
<!-- hbase-site.xml -->
<property>
<name>hbase.regionserver.port</name>
<value>16020</value>
</property>
<property>
<name>hbase.regionserver.info.port</name>
<value>16030</value>
</property>
<property>
<name>hbase.regionserver.handler.count</name>
<value>30</value>
</property>
<property>
<name>hbase.regionserver.global.memstore.size</name>
<value>0.4</value>
</property>
<property>
<name>hfile.block.cache.size</name>
<value>0.4</value>
</property>
四、ZooKeeper协调服务 #
4.1 ZooKeeper在HBase中的作用 #
text
ZooKeeper核心作用
├── Master选举
│ └── 确保只有一个Active Master
│
├── 集群状态管理
│ ├── RegionServer状态监控
│ └── 故障检测与通知
│
├── 元数据入口
│ └── 记录hbase:meta表位置
│
├── Region定位
│ └── 帮助Client定位Region
│
└── 分布式锁
└── 表操作锁、Region操作锁
4.2 ZooKeeper节点结构 #
text
/hbase
├── /master → Active Master地址
├── /backup-masters → Backup Master列表
├── /region-servers → RegionServer列表
├── /table → 表状态信息
├── /table-lock → 表锁
├── /meta-region-server → meta表所在RegionServer
├── /rs → RegionServer临时节点
└── /splitWAL → WAL切分任务
4.3 ZooKeeper配置 #
xml
<!-- hbase-site.xml -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>zk1,zk2,zk3</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/data/zookeeper</value>
</property>
<property>
<name>zookeeper.session.timeout</name>
<value>180000</value>
</property>
五、HDFS存储层 #
5.1 HDFS在HBase中的作用 #
text
HDFS核心作用
├── 数据持久化
│ ├── HFile存储
│ └── WAL日志存储
│
├── 数据复制
│ └── 默认3副本
│
├── 容错机制
│ └── DataNode故障自动恢复
│
└── 数据本地性
└── RegionServer与DataNode同节点
5.2 HDFS目录结构 #
text
/hbase
├── /data
│ ├── /default → 默认命名空间
│ │ └── /table_name
│ │ └── /region_id
│ │ └── /column_family
│ │ └── *.hfile
│ └── /myapp → 自定义命名空间
│
├── /WALs → WAL日志
│ └── /regionserver_name
│ └── *.wal
│
├── /archive → 归档数据
├── /corrupt → 损坏数据
└── /oldWALs → 旧WAL日志
5.3 数据本地性 #
text
┌─────────────────────────────────────────────────────────┐
│ 数据本地性 │
├─────────────────────────────────────────────────────────┤
│ │
│ 本地性级别: │
│ ├── LOCAL (本地) - 数据在本机 │
│ ├── RACK (机架) - 数据在同机架其他节点 │
│ └── OTHER (其他) - 数据在其他机架 │
│ │
│ 优势: │
│ - 减少网络传输 │
│ - 提高读写性能 │
│ │
│ 配置: │
│ - RegionServer与DataNode部署在同一节点 │
│ - HBase利用HDFS短路读 │
│ │
└─────────────────────────────────────────────────────────┘
六、客户端架构 #
6.1 Client工作流程 #
text
┌─────────────────────────────────────────────────────────┐
│ Client 工作流程 │
├─────────────────────────────────────────────────────────┤
│ │
│ 1. 初始化 │
│ └── 连接ZooKeeper获取集群信息 │
│ │
│ 2. 元数据缓存 │
│ └── 缓存Region位置信息 │
│ │
│ 3. 请求路由 │
│ ├── 根据RowKey定位Region │
│ └── 直接与RegionServer通信 │
│ │
│ 4. 写入流程 │
│ ├── 写WAL │
│ └── 写MemStore │
│ │
│ 5. 读取流程 │
│ ├── 查BlockCache │
│ ├── 查MemStore │
│ └── 查HFile │
│ │
└─────────────────────────────────────────────────────────┘
6.2 元数据缓存 #
text
Client元数据缓存机制
├── 缓存内容
│ ├── Region位置信息
│ └── RegionServer地址
│
├── 缓存更新
│ ├── Region移动时失效
│ └── 定期刷新
│
└── 缓存配置
└── hbase.client.scanner.caching
七、组件协作流程 #
7.1 表创建流程 #
text
1. Client向Master发送创建表请求
2. Master验证请求合法性
3. Master创建表目录(HDFS)
4. Master创建hbase:meta表记录
5. Master分配Region到RegionServer
6. RegionServer创建Region
7. Client收到创建成功响应
7.2 写入流程 #
text
1. Client从ZooKeeper获取meta表位置
2. Client查询meta表获取目标Region位置
3. Client直接向RegionServer发送写请求
4. RegionServer写入WAL
5. RegionServer写入MemStore
6. 返回写入成功响应
7.3 读取流程 #
text
1. Client从ZooKeeper获取meta表位置
2. Client查询meta表获取目标Region位置
3. Client直接向RegionServer发送读请求
4. RegionServer查询BlockCache
5. RegionServer查询MemStore
6. RegionServer查询HFile
7. 返回查询结果
八、高可用设计 #
8.1 故障检测 #
text
故障检测机制
├── Master故障
│ ├── ZooKeeper会话超时
│ └── Backup Master接管
│
├── RegionServer故障
│ ├── ZooKeeper会话超时
│ ├── Master检测到故障
│ └── Region重新分配
│
└── DataNode故障
├── HDFS心跳超时
└── 数据副本重建
8.2 故障恢复 #
text
RegionServer故障恢复流程
├── 1. ZooKeeper检测到节点消失
├── 2. Master收到通知
├── 3. Master将故障节点的Region标记为离线
├── 4. Master将Region分配到其他RegionServer
├── 5. 新RegionServer读取WAL进行恢复
├── 6. Region恢复完成,开始服务
└── 7. 更新meta表信息
九、总结 #
本节介绍了HBase的分布式架构:
| 组件 | 核心功能 |
|---|---|
| Master | 元数据管理、Region分配、负载均衡 |
| RegionServer | 处理读写请求、管理Region和数据 |
| ZooKeeper | 协调服务、Master选举、状态同步 |
| HDFS | 数据持久化存储、副本管理 |
| Client | 发起请求、缓存元数据、直接访问RegionServer |
下一步,让我们深入学习HBase的数据存储模型!
最后更新:2026-03-27