HBase
1. 概念
1.1 数据模型
表由行和列组成。表的单元格是行和列坐标的交集,他们有版本号。版本号是自动分配的时间戳。表的行键,表的主键,对表中的行进行排序。默认情况下,以字节为序,所有的表都通过主键进行访问。
每行的列被分组,形成列族。所有的列族成员有相同的前缀。temperature:air 和 temperature:dew_point 都是temperature列族的成员。
表的列族必须在事先作为表架构定义的一部分被声明,但是可以根据需要增加新的列族成员。
物理上,所有列族成员在文件系统中被存储在一起。HBase是面向列族的存储。
区域
HBase自动把表横向切分成不同的区域。每个区域包含一个子集。
锁定
无论多少列组成行级事务,行的更新都是原子的。
1.2 实现
HBase由一个主节点协调一个或多个regionserver从节点组成。HBase主节点负责引导初始安装,分配区域给已注册的region server, 恢复region server的故障。
regionserver负责0到多个区域,响应客户端的读写请求。同时也负责同志HBase主节点,区域要分割成新的子区域的信息,以便HBase主节点管理。
HBase依赖于Zookeeper,默认情况下使用一个Zookeeper实例为集群状态提供授权。
1.3 常见命令
create 'test', 'data'
list
put 'test', 'row1', 'data:1', 'value1'
put 'test', 'row1', 'data:2', 'value2'
put 'test', 'row1', 'data:3', 'value3'
scan 'test'
// delete tabel
disable 'test'
drop 'test'
2. HBase 与 RDMS比较
HBase特性:
- 无真正的索引
- 自动分区
- 创建新节点时自动线性扩展
- 商用硬件
- 容错性
- 批量处理
3. 实践
3.1 HBase 与 HDFS
- 文件描述信息块用尽
- 数据节点的线程用尽
- 不良块
3.2 架构设计
-
连接
没有本地数据库连接能力
-
行的键
混合型键,从0开始给组件编号,才能保证01在10前面。
键是整数,一般用二进制表示,而不是使用数字的字符串表示。