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

本文详细介绍了使用Hbaseshell命令模式和JAVA API模式查询HBase同一记录多个版本数据的方法,并阐述了BloomFilter在HBase中的应用原理及影响,最后讨论了HBase短时间大量数据导入导致锁定的问题解决策略以及预分区的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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临界值.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾文教编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值