HBase
外观
Developer(s) | Apache软件基金会 |
---|---|
Initial release | 2008年 |
Repository |
|
Written in | Java |
Engine | |
Operating system | 跨平台 |
Type | 分布式数据库 |
License | Apache许可证2.0 |
Website | hbase |
HBase是一个开源的、分布式的、版本化的NoSQL数据库,基于Google的Bigtable设计,运行在Hadoop分布式文件系统(HDFS)之上。它是Apache软件基金会的顶级项目,专为处理大规模数据集而设计,能够提供实时读/写访问能力。
概述[编辑 | 编辑源代码]
HBase是一个列式存储数据库,适合存储非结构化和半结构化数据。它具有以下主要特点:
- 高可靠性 - 数据自动分片和复制
- 高扩展性 - 可线性扩展到数十亿行和数百万列
- 强一致性 - 提供强一致性的读写操作
- 自动分片 - 表自动分区并在集群中分布
- 自动故障转移 - RegionServer故障时自动恢复
架构[编辑 | 编辑源代码]
HBase采用主从架构,主要组件包括:
HMaster[编辑 | 编辑源代码]
负责:
- 表的管理操作(创建、删除、修改)
- RegionServer的负载均衡
- 处理Region的分配和迁移
RegionServer[编辑 | 编辑源代码]
负责:
- 处理客户端的读写请求
- 管理Region的分裂
- 处理HFile的合并(compaction)
ZooKeeper[编辑 | 编辑源代码]
用于:
- 维护集群状态
- 实现分布式协调
- 存储HBase的元数据
数据模型[编辑 | 编辑源代码]
HBase的数据模型由以下概念组成:
- 表(Table):数据存储在表中
- 行(Row):每行有一个唯一的行键(Row Key)
- 列族(Column Family):列的集合,物理存储单元
- 列限定符(Column Qualifier):列族下的具体列
- 单元格(Cell):由{row, column, version}唯一确定的数据单元
- 时间戳(Timestamp):数据的版本标识
基本操作[编辑 | 编辑源代码]
通过HBase Shell操作[编辑 | 编辑源代码]
# 创建表
create 'user', 'info', 'contact'
# 插入数据
put 'user', 'row1', 'info:name', '张三'
put 'user', 'row1', 'info:age', '25'
put 'user', 'row1', 'contact:email', 'zhangsan@example.com'
# 获取数据
get 'user', 'row1'
# 扫描表
scan 'user'
# 删除数据
delete 'user', 'row1', 'info:age'
通过Java API操作[编辑 | 编辑源代码]
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
public class HBaseExample {
public static void main(String[] args) throws Exception {
Configuration config = HBaseConfiguration.create();
Connection connection = ConnectionFactory.createConnection(config);
// 获取表引用
Table table = connection.getTable(TableName.valueOf("user"));
// 插入数据
Put put = new Put(Bytes.toBytes("row1"));
put.addColumn(Bytes.toBytes("info"), Bytes.toBytes("name"), Bytes.toBytes("李四"));
table.put(put);
// 查询数据
Get get = new Get(Bytes.toBytes("row1"));
Result result = table.get(get);
byte[] value = result.getValue(Bytes.toBytes("info"), Bytes.toBytes("name"));
System.out.println("Name: " + Bytes.toString(value));
// 关闭连接
table.close();
connection.close();
}
}
应用场景[编辑 | 编辑源代码]
HBase适用于以下场景:
- 海量数据存储:如用户行为日志、交易记录等
- 实时查询:需要低延迟随机读写的场景
- 时间序列数据:如物联网设备数据、监控数据
- 消息/社交数据:如聊天记录、用户关系
- 推荐系统:存储用户画像和物品特征
与其他技术的比较[编辑 | 编辑源代码]
特性 | HBase | Cassandra | MongoDB |
---|---|---|---|
数据模型 | 列式存储 | 列式存储 | 文档存储 |
一致性 | 强一致性 | 最终一致性 | 可配置 |
扩展性 | 线性扩展 | 线性扩展 | 分片扩展 |
查询能力 | 简单扫描 | 二级索引 | 丰富查询 |
适用场景 | 海量随机读写 | 全球分布式 | 灵活文档 |
性能优化[编辑 | 编辑源代码]
- 行键设计:避免热点问题,使用散列或反转时间戳
- 预分区:创建表时预先分区
- 缓存配置:合理设置BlockCache和MemStore
- 压缩:启用列族压缩
- 批量操作:使用批量Put/Get减少RPC调用
生态系统集成[编辑 | 编辑源代码]
HBase可以与以下技术集成:
版本历史[编辑 | 编辑源代码]
- 2008年:HBase成为Apache顶级项目
- 2010年:发布0.90版本,首个稳定版本
- 2015年:发布1.0版本
- 2017年:发布2.0版本,重大架构改进
参见[编辑 | 编辑源代码]
参考资料[编辑 | 编辑源代码]
- 模块:Citation/CS1/Configuration第2123行Lua错误:attempt to index field '?' (a nil value)
- 模板:Cite book