HBase-7.hbase查询多版本数据&过滤器原则&批量导入Hbase&hbase预分区

来源:互联网 发布:世伟洛克淘宝 编辑:程序博客网 时间:2024/05/17 07:12

HBase怎么查询同一条记录多个版本数据

(1)Hbase shell命令模式

get 'stu','rk01', {COLUMN => 'info:name', VERSIONS => 5}

(2)JAVA  API 模式

Get get = new Get("rk01".getBytes());

get.addColumn("info".getBytes(), "name".getBytes());

get.setMaxVersions(5);

rs = tTable.get(get);

 

HBase过滤器实现原则

采用bloomfilter进行过滤,Bloom Filter是一种空间效率很高的随机数据结构

 

(1)BLOOMFILTER在HBase的作用

HBase利用 BLOOMFILTER来提供随机读(GET)的性能,对于顺序读(Scan),设置BLOOMFILTER是没有作用的。

(2)BLOOMFILTER在HBase的开销

BLOOMFILTER是一个列族级别的配置,如果你表中设置了BLOOMFILTER,那么HBase在生成StoreFile时候包含一份BLOOMFILTER的结构数据,称为MetaBlock;开启BLOOMFILTER会有一定的存储以及内存的开销。

(3)BLOOMFILTER如何提供随机读(GET)的性能

对于某个region的随机读,HBase会遍历读memstore及storefile(按照一定的顺序),将结果合并返回给客户端。如果你设置了bloomfilter,那么在遍历读storefile时,就可以利用bloomfilter,忽略某些storefile。 

(4)Region的StoreFile数目越多,BLOOMFILTER效果越好

(5)Region下的storefile数目越少,HBase读性能越好



HBase短时间批量导入数量过多的话就会被锁,该怎么办?

    通过调用 HTable.setAutoFlush(false)方法可以将 HTable 写客户端的自动 flush关闭, 这样可以批量写入数据到 HBase, 而不是有一条 put 就执行一次更新, 只有当put 填满客户端写缓存时, 才实际向 HBase 服务端发起写请求。默认情况下 auto flush是开启的。

HBase怎么预分区

预分区的目的主要是在创建表的时候指定分区数,提前规划表有多个分区,以及每个分区的区间范围,这样在存储的时候rowkey按照分区的区间存储,可以避免region热点问题。

 

通常有两种方案

方案1:shell 方法

create 'tb_splits', {NAME => 'cf',VERSIONS=> 3},{SPLITS => ['10','20','30']}

方案2: JAVA程序控制

l  取样,先随机生成一定数量的rowkey,将取样数据按升序排序放到一个集合里

l  根据预分区的region个数,对整个集合平均分割,即是相关的splitKeys.

l  HBaseAdmin.createTable(HTableDescriptor tableDescriptor,byte[][]splitkeys)可以指定预分区的splitKey,即是指定region间的rowkey临界值.


0 0
原创粉丝点击