本文是大数据系列第 33 篇,系统梳理 HBase 的整体架构设计,涵盖核心组件职责、数据模型及典型应用场景。

完整图文版(含截图):CSDN 原文 | 掘金

HBase 简介

HBase 是基于 Google BigTable 论文设计的开源分布式 NoSQL 数据库,采用列族存储模型,运行在 HDFS 之上,支持 PB 级数据的实时随机读写。

与 MySQL 等关系型数据库的核心区别:

对比维度MySQLHBase
存储模型行式存储列族存储
数据量级亿级行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 方案、避免热点问题的基础。