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