Hbase笔记

官方网站: 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二级索引
Stratio / cassandra-lucene-index 项目实现了lucene对cassandra的二级索引。
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操作事件钩子。









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值