本文是大数据系列第 33 篇,系统梳理 HBase 的整体架构设计,涵盖核心组件职责、数据模型及典型应用场景。
HBase 简介
HBase 是基于 Google BigTable 论文设计的开源分布式 NoSQL 数据库,采用列族存储模型,运行在 HDFS 之上,支持 PB 级数据的实时随机读写。
与 MySQL 等关系型数据库的核心区别:
| 对比维度 | MySQL | HBase |
|---|---|---|
| 存储模型 | 行式存储 | 列族存储 |
| 数据量级 | 亿级行 | PB 级 |
| 扩展方式 | 垂直扩展为主 | 水平线性扩展 |
| 事务支持 | 完整 ACID | 单行 ACID |
| 适用场景 | 结构化业务数据 | 海量半结构化数据 |
核心特性
海量数据存储:支持 PB 级数据,自动分片到多个节点,并支持 50% 以上的数据压缩率,适合用户日志、物联网传感器数据、金融交易记录等场景。
高可用与横向扩展:主从架构,RegionServer 可在线动态添加,存储容量和计算能力理论上线性增长,无需停机扩容。
列族存储:数据按列族物理存储,同列族数据集中存放,空字段不占存储空间,适合宽表场景(数千个字段的用户画像表)。
强一致性:行级 ACID 事务,MVCC 多版本并发控制,WAL 预写日志保证数据持久性,适合金融转账、库存扣减等强一致场景。
快速随机读写:多层存储架构——MemStore(写内存缓冲)+ HFile(磁盘持久化)+ BlockCache(读缓存),结合 BloomFilter 加速查询,典型响应时间 < 10ms。
数据模型
HBase 采用四维坐标定位一个数据单元:
(RowKey, ColumnFamily:Column, Timestamp) → Value
| 维度 | 说明 |
|---|---|
| Row Key(行键) | 主键,字典序排序,决定数据物理分布 |
| Column Family(列族) | 建表时预定义,物理存储单位,同一列族数据存同一文件 |
| Column Qualifier(列限定符) | 列族内的具体列,可动态添加,无需预定义 |
| Timestamp(时间戳) | 版本控制,默认使用写入时间戳,可配置保留版本数 |
所有数据均以字节数组存储,类型转换由应用层负责。
整体架构
HBase 由四大核心组件协同工作:
ZooKeeper — 协调服务
- 通过选举机制确保任意时刻只有一个活跃 HMaster
- 持久化存储
hbase:meta元数据表的位置信息 - 心跳监控各节点状态,默认 30 秒超时检测,触发故障转移
HMaster — 管理节点
HMaster 负责集群级别的管理操作,不直接参与数据读写:
- Region 分配与跨节点负载均衡(默认每 5 分钟运行一次)
- 维护表结构信息和列族配置(Schema 变更)
- RegionServer 故障时接管 WAL 日志进行数据恢复
- 协调 DDL 操作(建表、删表、修改表结构)
HMaster 支持主备高可用:ZooKeeper 保证只有一个活跃 Master,备 Master 实时待命。
HRegionServer — 数据节点
RegionServer 是真正处理客户端读写请求的节点:
- 托管多个 Region,单个 RegionServer 管理约 100 个 Region
- 处理客户端的 Get / Put / Scan / Delete 请求
- MemStore 写满(默认 128MB)后触发 Flush,生成 HFile
- 定期执行 Minor Compaction(合并小文件)和 Major Compaction(全量合并,清理过期版本)
Region — 存储单元
Region 是 HBase 数据分片的基本单位:
- 每个表按 RowKey 范围划分为多个 Region,每个 Region 存储一个连续的 RowKey 区间
- 每个列族对应 Region 内的一个独立 Store
- Store 包含:
- MemStore:写缓冲区,基于跳跃表有序存储,默认 16MB
- StoreFile(HFile):磁盘持久化文件,包含 BloomFilter 索引块
- 当 Region 大小达到阈值(默认 10GB)时自动分裂为两个子 Region
数据访问流程
客户端
→ 连接 ZooKeeper,获取 hbase:meta 表位置
→ 读取 meta 表,定位目标 RowKey 所在的 RegionServer
→ 直接连接 RegionServer,执行读写操作
→ 写操作先写 WAL 日志,再写 MemStore
→ MemStore 满时 Flush 到 HDFS 生成 HFile
客户端会缓存 Region 位置信息,后续请求不再查询 ZooKeeper,避免热点。
典型应用场景
| 行业 | 场景 |
|---|---|
| 交通 | GPS 轨迹数据存储、高速收费流水记录 |
| 金融 | 用户交易流水、信用卡消费记录、风控特征 |
| 电商 | 用户行为序列、订单实时写入、库存日志 |
| 电信 | 通话详单(CDR)、基站日志、上网行为数据 |
阿里巴巴、滴滴、美团、京东等头部公司均在核心系统中大规模使用 HBase。
不适合 HBase 的场景
- 需要多表 JOIN 的关系型查询
- 低延迟实时查询(毫秒级并发,建议结合 Redis 缓存)
- 数据量小、Schema 固定的业务(应选 MySQL/PostgreSQL)
- 需要完整跨行事务的场景
小结
HBase 通过 ZooKeeper 协调、HMaster 管理、RegionServer 数据服务的分层架构,实现了高可用、可线性扩展的分布式存储能力。理解其四维数据模型和 Region 分片机制是合理设计 RowKey 方案、避免热点问题的基础。