官方网站:
http://hbase.apache.org/
programming guide: http://hbase.apache.org/book.html#quickstart
HBase 以列为单位聚合数据,基于“对于特定查询,不是所有列的值都是必须的”的假设。列式存储更有利于压缩。比较适合键值对或者有序数据的存放。HBase源于google的BigTable论文。
基本概念:
行:Row key(行键)的值来确定,行键总是唯一。一列或者多列
列:每列可能有多个版本,在每个单元格(cell)中存储了不同的值。每列的值或单元格都有时间戳。
簇:若干列构成一个列簇(column family),一个列簇的所有列储存在同一个底层的存储文件里,该文件为HFile
列的数量没有限制,常见的引用列形式: famlily: qualifier
自动分区:hbase中扩展和负载均衡的基本单元是region,本质上是以rowkey排序的连续存储的区间。如果region太大,系统会把它们动态拆分,相反会把多个region合并,以减少存储文件数量。拆分的时候按照中间key划分为两个大致相等的子region。每一个region只能由一台region server加载,一个server可以同时加载多个region.
启动: bin/start-hbase.sh
停止:bin/stop-hbase.sh
shell:bin/hbase shell
>exit
>status: 查看server状态。
> create 'scores','grade','course' //创建表score,有两个列簇
>list //查看当前hbase中有哪些表
>list '
scores
' //查看表是否存在
>desc '
scores
' //查看表的结构
>
put'scores','zkb','grade:g1','5' //
加入一行数据
,
行名称为zkb列族grade的列名为g1,值为5
> put'scores','zkb','course:math','97' //
给zkb这一行的数据
添加一列
math到列簇course,值为97
> put'scores','zkb','course:art','87' //同理,
给zkb这一行的数据的列族course添加一列<art,87>
>scan '
scores
' //按一定条件检索表数据
>get '
scores
','zkb' //按rowkey获得单行数据
>
scan'scores',{COLUMNS => 'course'} //
查看scores表中所有数据courses
列族的所有数据
>delete '
scores
','myrow-1','colfam1:q2' //删除单元格
>disable '
scores
'
>drop '
scores
' //必须先disable,才可以drop
CRUD操作
create, read, update, delete:增查改删
HA
HBase设置HA(zookeeper实现,启动两个hbase server,standby实时同步数据,HMaster挂掉后开始起作用)
RowKey
1,设置RowKey为timestamp情形,当行数增加到一定个数,一个region大小超过了预设值,会进行分裂,分裂从RowKey的中间值进行,会出现的情况:
(1)分裂后,由于timestamp始终递增,RowKey小的部分不会再插入数据;反之,RowKey大的部分会一直插入数据,这样下去会得到很多小的region。
(2)由于只往RowKey大的region插入数据,小的region得不到机会,降低了IO并行度。
2,设置RowKey为随机值的情形,对于经常取一段时间连续值的情形,会访问多个region进行取数据,会增加IO负载。
Hbase二级索引
hbase只能按照rowkey查询,开源的项目有Phoenix可以使用sql查询hbase数据。
Hbase增加二级索引可以使用coprocessor,华为实现二级索引方案:
http://my.oschina.net/u/923508/blog/413129
hbase里往column famlily中插入列的个数可以达百万级
二级索引最大的问题是数据一致性,hbase table中的数据value修改了,索引表的值也要相应的修改。
Coprocessor
HBase在0.92之后引入了coprocessors,提供了一系列的钩子,让我们能够轻易实现访问控制和二级索引的特性。下面简单介绍下两种coprocessors,第一种是Observers,它实际类似于触发器,第二种是Endpoint,它类似与存储过程。
observers分为三种:
RegionObserver:提供数据操作事件钩子;
WALObserver:提供WAL(write ahead log)相关操作事件钩子;
MasterObserver:提供DDL操作事件钩子。