HBase - BloomFilter(布隆过滤器)

hbase>describe '表名'  (可查看当前表是什么类型的BloomFilter) 

 , BLOOMFILTER => 'ROW',

HBase的Get/Scan操作流程


hbase中有BloomFilter的功能,可以在有些情况下过滤掉不需要的hfile,节省IO。

客户端发起一个read请求,先在一个Bloom filter集合中查找, 然后 在memStore 或在Block cache中查找,在Block cache中查找不到才在StoreFile查找。最后结果merge成一个结果集返回给客户端。

BloomFilter作用

BloomFilter在HBase中的作用? 
HBase**利用BloomFilter来提高随机读**(Get)的性能,对于顺序(Scan)而言,设置Bloomfilter是没有作用的(0.92以后,如果设置了bloomfilter为ROWCOL,对于指定了qualiter的Scan有一定的优化)。

BloomFilter在HBase中的开销? 
BloomFilter是一个列族(of)级别的配置属性,如果在表中设置了BloomFilter,那么HBase会在生成StoreFile时,包含一份BloomFilter 
结构的数据,称其为MetaBlock;MetaBlock与DataBlock(真实的KeyValue数据)一起由LRUBlockCache维护,所以开启BloomFilter会有一定的存储及内存cache开销。

HBase中的Bloomfilter的类型及使用

1.ROW:根据KeyValue中的row来过滤storefile。 
举例:假设有2个storefile文件sf1和sf2, 
sf1包含kv1(r1 cf:q1 v)、kv2(r2 cf:q1 v) 
sf2包含kv3(r3 cf:q1 v)、kv4(r4 cf:q1 v)

如果设置CF属性中的bloomfilter为ROW,那么get(r1)时就会过滤sf1,get(r3)就会过滤sf2

2.ROWCOL:根据KeyValue中的row+qualifier来过滤storefile。 级别更细
举例:假设有2个storefile文件sf1和sf2, 
sf1包含kv1(r1 cf:q1 v)、kv2(r2 cf:q1 v) 
sf2包含kv3(r1 cf:q2 v)、kv4(r2 cf:q2 v)

如果设置了CF属性中的bloomfilter为ROW, 
无论get(r1,q1)还是get(r1,q2),都会读取sf1+sf2; 
而如果设置了CF属性中的bloomfilter为ROWCOL,那么get(r1,q1)就会过滤sf2,get(r1,q2)就会过滤sf1

ROWCOL一定比ROW效果好么?

答案:不一定 
a、ROWCOL只对指定列(Qualifier)的随机读(Get)有效,如果应用中的随机读get,只含row,而没有指定读哪个qualifier,那么设置ROWCOL是没有效果的,这种场景就应该使用ROW。 

b、如果随机读中指定的列(Qualifier)的数目大于等于2,在0.90版本中ROWCOL是无效的,而在0.92版本以后,HBASE-2794对这一情景作了优化,是有效的(通过KeyValueScanner#seekExactly) 

c、如果同一row多个列的数据在应用上是同一时间put的,那么ROW与ROWCOL的效果近似相同,而ROWCOL**只对指定了列**的随机读才会有效,所以设置为ROW更佳。

注意: 
ROWCOL与ROW只在名称上有联系,ROWCOL并不是ROW的扩展,不能取代ROW。 
region下的storefile数目越多,bloomfilter的效果越好。region下的storefile数目越少,HBase读性能越好。


1.任何类型的get(基于rowkey或row+col)Bloom Filter的优化都能生效,关键是get的类型要匹配Bloom Filter的类型

2.基于row的scan是没办法走Bloom Filter的。因为Bloom Filter是需要事先知道过滤项的。对于顺序scan是没有事先办法知道rowkey的。而get是指明了rowkey所以可以用Bloom Filter,scan指明column同理。

3.row+col+qualify的scan可以去掉不存在此qualify的storefile,也算是不错的优化了,而且指明qualify也能减少流量,因此scan尽量指明qualify

发布了111 篇原创文章 · 获赞 103 · 访问量 56万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览