HBase简介 #

一、什么是Apache HBase #

Apache HBase是一个开源的、分布式的、面向列的NoSQL数据库,运行在Hadoop HDFS之上。它模仿Google Bigtable设计,提供对海量结构化数据的随机实时读写访问。HBase能够处理数十亿行、数百万列的大表,是Hadoop生态系统中重要的数据存储组件。

1.1 发展历史 #

时间 事件
2006年 Powerset公司开始开发HBase
2007年 成为Apache Hadoop子项目
2008年 发布第一个稳定版本
2010年 成为Apache顶级项目
2015年 发布HBase 1.0,API稳定
2017年 发布HBase 2.0,重大架构改进
2020年 发布HBase 2.3,性能优化

1.2 核心组件 #

text
┌─────────────────────────────────────────────────────────┐
│                    HBase 架构组件                        │
├─────────────┬─────────────┬─────────────┬───────────────┤
│   Client    │   Master    │RegionServer │   ZooKeeper   │
│   客户端    │   主节点    │  区域服务器  │   协调服务    │
├─────────────┼─────────────┼─────────────┼───────────────┤
│   HDFS      │  MemStore   │  StoreFile  │   WAL         │
│   存储      │   内存      │   磁盘      │   日志        │
└─────────────┴─────────────┴─────────────┴───────────────┘

二、核心特点 #

2.1 分布式架构 #

text
┌─────────────────────────────────────────────────────────┐
│                    HBase 集群架构                        │
├─────────────────────────────────────────────────────────┤
│                                                         │
│    ┌─────────┐                                          │
│    │ Master  │  管理元数据、负载均衡、Region分配        │
│    └────┬────┘                                          │
│         │                                               │
│    ┌────┴────────────────────────────────────────┐      │
│    │              ZooKeeper 集群                  │      │
│    │         协调服务、状态同步、故障检测          │      │
│    └─────────────────────────────────────────────┘      │
│         │                                               │
│    ┌────┴────┬─────────┬─────────┬─────────┐            │
│    │         │         │         │         │            │
│    ▼         ▼         ▼         ▼         ▼            │
│ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐          │
│ │ RS 1 │ │ RS 2 │ │ RS 3 │ │ RS 4 │ │ RS 5 │          │
│ └──────┘ └──────┘ └──────┘ └──────┘ └──────┘          │
│                                                         │
│              HDFS 分布式存储层                          │
└─────────────────────────────────────────────────────────┘

2.2 高可用性 #

特性 说明
数据复制 HDFS默认3副本存储
Master HA 支持多Master热备
RegionServer故障转移 自动重新分配Region
WAL机制 写前日志保证数据不丢失

2.3 可扩展性 #

text
水平扩展能力
├── 存储容量:随RegionServer增加线性扩展
├── 读写吞吐:随节点增加线性提升
├── 自动Region切分:数据增长自动分裂
└── 负载均衡:自动迁移热点Region

2.4 面向列存储 #

text
关系型数据库                    HBase
┌─────────────────────────┐    ┌─────────────────────────┐
│ Row │ Col1 │ Col2 │ Col3│    │ RowKey │ Column Family  │
├─────┼──────┼──────┼─────┤    │        ├─────┬──────────┤
│  1  │  A   │  B   │  C  │    │  row1  │ cf1 │ qual1:A  │
│  2  │  D   │ NULL │  E  │    │        │     │ qual2:B  │
│  3  │  F   │  G   │ NULL│    │        │ cf2 │ qual3:C  │
└─────┴──────┴──────┴─────┘    └────────┴─────┴──────────┘

优势:
- 稀疏数据高效存储(NULL不占空间)
- 同列族数据存储在一起,压缩效率高
- 支持动态添加列

三、数据模型 #

3.1 层级结构 #

text
Namespace(命名空间)- 类似数据库
└── Table(表)
    └── Region(区域)- 数据分片
        └── Column Family(列族)
            └── Column Qualifier(列限定符)
                └── Cell(单元格)
                    └── Version(版本)

3.2 数据模型详解 #

text
┌─────────────────────────────────────────────────────────┐
│                    HBase 数据模型                        │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  RowKey: user001                                        │
│  ┌─────────────────────────────────────────────────┐   │
│  │ Column Family: info                              │   │
│  │ ┌──────────────┬──────────────┬──────────────┐  │   │
│  │ │ name         │ age          │ email        │  │   │
│  │ ├──────────────┼──────────────┼──────────────┤  │   │
│  │ │ v1: 张三      │ v1: 25       │ v1: a@b.com  │  │   │
│  │ │ v2: 张三丰    │ v2: 26       │              │  │   │
│  │ └──────────────┴──────────────┴──────────────┘  │   │
│  └─────────────────────────────────────────────────┘   │
│  ┌─────────────────────────────────────────────────┐   │
│  │ Column Family: history                           │   │
│  │ ┌──────────────┬──────────────┐                 │   │
│  │ │ login        │ purchase     │                 │   │
│  │ ├──────────────┼──────────────┤                 │   │
│  │ │ v1: 2024-01  │ v1: order1   │                 │   │
│  │ │ v2: 2024-02  │ v2: order2   │                 │   │
│  │ │ v3: 2024-03  │              │                 │   │
│  │ └──────────────┴──────────────┘                 │   │
│  └─────────────────────────────────────────────────┘   │
│                                                         │
└─────────────────────────────────────────────────────────┘

3.3 核心概念 #

概念 说明
RowKey 行键,唯一标识一行数据,按字典序排序
Column Family 列族,物理存储单元,需预先定义
Column Qualifier 列限定符,可动态添加
Timestamp 时间戳,用于版本控制
Cell 单元格,由{RowKey, CF, CQ, Timestamp}唯一确定
Version 版本,同一单元格可存储多个版本

四、应用场景 #

4.1 适用场景 #

场景 说明
时序数据 监控数据、IoT传感器数据、日志存储
用户画像 存储用户属性、行为数据、标签数据
消息存储 聊天记录、消息推送记录
推荐系统 用户行为日志、特征数据存储
内容管理 文章、评论、元数据存储
金融数据 交易流水、账户历史记录

4.2 行业案例 #

text
互联网公司
├── Facebook - 消息系统、实时分析
├── Twitter - 用户时间线
├──阿里巴巴 - 订单系统、用户画像
└── 小米 - IoT设备数据存储

金融行业
├── 银行交易流水
├── 风控数据存储
└── 账户历史记录

物联网
├── 设备传感器数据
├── 实时监控数据
└── 历史数据存储

4.3 不适用场景 #

场景 原因
复杂关联查询 不支持JOIN,需要应用层处理
小数据量 大材小用,增加运维复杂度
随机范围查询 RowKey设计不当会导致全表扫描
强事务需求 只支持行级原子性

五、与其他数据库对比 #

5.1 vs MySQL #

特性 HBase MySQL
架构 分布式、Master-Slave 单机/主从复制
扩展方式 水平扩展 垂直扩展为主
数据模型 列式存储 关系模型
查询方式 API/Shell SQL
JOIN 不支持 支持
事务 行级原子性 完整ACID

5.2 vs Cassandra #

特性 HBase Cassandra
架构 Master-Slave 无主架构
依赖 Hadoop生态 无外部依赖
一致性 强一致性 可调一致性
写入性能 极高
运维复杂度 较高 较低

5.3 vs MongoDB #

特性 HBase MongoDB
数据模型 列式存储 文档存储
查询 API/Shell 丰富的查询语法
索引 二级索引有限 丰富的索引支持
事务 行级原子性 多文档事务
生态 Hadoop生态 独立生态

六、HBase Shell简介 #

6.1 基本操作 #

bash
# 进入HBase Shell
hbase shell

# 创建表
create 'user', 'info', 'history'

# 插入数据
put 'user', 'user001', 'info:name', '张三'
put 'user', 'user001', 'info:age', '25'

# 查询数据
get 'user', 'user001'

# 扫描表
scan 'user'

# 删除数据
delete 'user', 'user001', 'info:age'

# 删除表
disable 'user'
drop 'user'

6.2 命名空间操作 #

bash
# 创建命名空间
create_namespace 'myapp'

# 查看命名空间
list_namespace

# 在命名空间中创建表
create 'myapp:user', 'info'

七、版本选择 #

7.1 版本对比 #

版本 特点 适用场景
1.x 稳定版本 生产环境
2.x 架构改进,性能提升 新项目
3.x 开发中 测试体验

7.2 版本特性 #

text
HBase 2.x 新特性
├── 新版Client API
├── 异步客户端
├── 改进的Region分配
├── 更好的容错机制
└── 性能优化

八、学习路线 #

text
入门阶段
├── 理解列式存储概念
├── 安装HBase
├── 学习Shell基本命令
└── 掌握基本CRUD操作

进阶阶段
├── 理解数据存储原理
├── RowKey设计
├── 过滤器使用
└── 协处理器开发

高级阶段
├── 集群规划与部署
├── 性能调优
├── 运维管理
└── 故障排查

九、总结 #

HBase核心优势:

  1. 海量存储:支持数十亿行、数百万列的大表
  2. 高可用性:数据多副本、Master HA、自动故障转移
  3. 可扩展性:线性扩展存储和计算能力
  4. 实时读写:毫秒级的随机读写访问
  5. 生态整合:与Hadoop生态无缝集成

下一步,让我们学习HBase的安装与配置!

最后更新:2026-03-27