hbase 学习笔记

本文介绍HBase的单机安装步骤,并详细探讨RowKey的设计原则与实践案例,包括事务数据、统计数据及通用数据的RowKey设计方案。

一、单机安装

1.官网下载安装包

2.解压至usr

3.sudo vim /etc/profile  文件末尾添加export PATH=$PATH:/usr/hbase/bin

source /etc/profile

4.hbase version

验证是否安装成功

单机:

1)配置conf/hbase-env.sh export HBASE_MANAGES_ZK=true 

2)

 vim conf/hbase-site.sh
<configuration>
    <property>
        <name>hbase.rootdir</name>
        <value>file:///usr/hbase/hbase-tmp</value>
    </property>
</configuration>

3)启动hbase

start-hbase.sh

4)进入shell模式  hbase shell

5)停止hbase stop-hbase.sh



注:解决远程删除键失效

在File->Properties->Terminal->Keyboard下,把DELETE/BACKSPACE key sequence选为ASCII 127(Ctrl+?)。



hbase超详细介绍:http://blog.csdn.net/frankiewang008/article/details/41965543











 查询 info:author的值中含有java的行。
import org.apache.hadoop.hbase.filter.CompareFilter
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter
import org.apache.hadoop.hbase.filter.SubstringComparator
import org.apache.hadoop.hbase.util.Bytes
scan 'blogtable', { COLUMNS => 'info:author', FILTER =>
SingleColumnValueFilter.new(Bytes.toBytes('info'),
Bytes.toBytes('author'),
CompareFilter::CompareOp.valueOf('EQUAL'),
SubstringComparator.new('java'))




hbase查询速度还是要依靠rowkey,所以根据业务逻辑把rowkey设计好,之后所有的查询都通过rowkey,是会非常快。 批量查询最好是用 scan的startkey endkey来做查询条件

 HBase是根据Rowkey来进行检索的,系统通过找到某个Rowkey (或者某个 Rowkey 范围)所在的Region,然后将查询数据的请求路由到该Region获取数据。HBase的检索支持3种方式:
(1) 通过单个Rowkey访问,即按照某个Rowkey键值进行get操作,这样获取唯一一条记录;
(2) 通过Rowkey的range进行scan,即通过设置startRowKey和endRowKey,在这个范围内进行扫描。这样可以按指定的条件获取一批记录;
(3) 全表扫描,即直接扫描整张表中所有行记录。
HBASE按单个Rowkey检索的效率是很高的,耗时在1毫秒以下,每秒钟可获取1000~2000条记录,不过非key列的查询很慢。 


Rowkey是一个二进制码流,Rowkey的长度被很多开发者建议说设计在10~100个字节,不过建议是越短越好,不要超过16个字节。


 1.事务数据是带时间属性的,建议将时间信息存入到Rowkey中,对于事务数据建议缺省就按天为数据建表。按天分表后,时间信息就可以去掉日期部分只保留小时分钟毫秒,这样4个字节即可搞定。加上散列字段2个字节一共6个字节即可组成唯一 Rowkey。
事务数据Rowkey设计
第0字节第1字节第2字节第3字节第4字节第5字节…
散列字段时间字段(毫秒)扩展字段
0~65535(0x0000~0xFFFF)0~86399999(0x00000000~0x05265BFF)

2.统计数据也是带时间属性的,统计数据最小单位只会到分钟(到秒预统计就没意义了)。按天分表后,时间信息只需要保留小时分钟,那么0~1400只需占用两个字节即可保存时间信息。由于统计数据某些维度数量非常庞大,因此需要4个字节作为序列字段,因此将散列字段同时作为序列字段使用也是6个字节组成唯一Rowkey。
统计数据Rowkey设计
第0字节第1字节第2字节第3字节第4字节第5字节…
散列字段(序列字段)时间字段(分钟)扩展字段
0x00000000~0xFFFFFFFF)0~1439(0x0000~0x059F)

3.通用数据采用自增序列作为唯一主键,用户可以选择按天建分表也可以选择单表模式
通用数据Rowkey设计
第0字节第1字节第2字节第3字节…
散列字段(序列字段)扩展字段(控制在12字节内)
0x00000000~0xFFFFFFFF)可由多个用户字段组成

4.支持多条件查询的RowKey设计1)scan可以通过setCaching与setBatch方法提高速度。2)通过setStartRow与setEndRow来限定范围3)可以通过setFilter方法添加过滤器,这也是分页、多条件查询的基础。

例子:
我们在表中存储的是文件信息,每个文件有5个属性:文件id(long,全局唯一)、创建时间(long)、文件名(String)、分类名(String)、所有者(User)。
我们可以输入的查询条件:文件创建时间区间(比如从20120901到20120914期间创建的文件),文件名(“中国好声音”),分类(“综艺”),所有者(“浙江卫视”)。
假设当前我们一共有如下文件:
IDCreateTimeNameCategoryUserID
120120902中国好声音第1期综艺1
220120904中国好声音第2期综艺1
320120906中国好声音外卡赛综艺1
420120908中国好声音第3期综艺1
520120910中国好声音第4期综艺1
620120912中国好声音选手采访综艺花絮2
720120914中国好声音第5期综艺1
820120916中国好声音录制花絮综艺花絮2
920120918张玮独家专访花絮3
1020120920加多宝凉茶广告综艺广告4

UserID的含义:
1代表 浙江卫视; 2代表 好声音剧组; 3代表 XX微博; 4代表赞助商。
输入find(20120901,20121001,”中国好声音”,”综艺”,”浙江卫视”)。此时我们应该得到记录应该有第1、2、3、4、5、7条
采用 UserID + CreateTime + FileID组成RowKey,

按照这种RowKey存储上述文件记录,在HBase表中是下面的结构:
rowKey(userID 6 + time 8 + fileID 6) name category ….
00000120120902000001
00000120120904000002
00000120120906000003
00000120120908000004
00000120120910000005
00000120120914000007
00000220120912000006
00000220120916000008
00000320120918000009
00000420120920000010

我们setStartRow(00000120120901),setEndRow(00000120120914)。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值