HBase之BloomFilter

HBase的Get/Scan操作流程

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

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的类型及使用

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

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读性能越好。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-03 15:21:24

HBase之BloomFilter的相关文章

Hbase的Bloomfilter(布隆过滤器)

(1)Bloomfilter在Hbase中的作用 Hbase利用Bloomfilter来提高随机读(get)的性能,对于顺序读(scan)而言,设置Bloomfilter是没有作用的(0.92版本以后,如果设置了bloomfilter为rowcol,对于执行了qualifier的scan有一定的优化) (2)Bloomfilter在Hbase中的开销 Bloomfilter是一个列簇(cf)级别的配置属性,如果在表中设置了Bloomfilter,那么Hbase会在生成storefile时包含一份

Hbase中的BloomFilter(布隆过滤器)

(1)     Bloomfilter在hbase中的作用 Hbase利用bloomfilter来提高随机读(get)的性能,对于顺序读(scan)而言,设置Bloomfilter是没有作用的(0.92版本以后,如果设置了bloomfilter为rowcol,对于执行了qualifier的scan有 一定的优化) (2)     Bloomfilter在hbase中的开销 Bloomfilter是一个列族(cf)级别的配置属性,如果在表中设置了bloomfilter,那么hbase会在生成sto

Hadoop的Reduce Join+BloomFilter实现表链接

适用于场景 连接的列数据量很大,在分布式缓存中无法存储时,Bloom Filter 可解决这个问题,用很小的内存可有MAP端过滤掉不需要JOIN的数据,这样传到REDUCE的数据量减少,减少了网络传及磁盘IO. 缺点 Bloom Filter 会有一定的错误率,但是错误率很低,用空间换取了时间.并且,最终的JOIN在REDUCE端还要进行比对,所以对最终结果无影响. 下面我们先来简单了解下什么是布隆过滤器? Bloom Filter的中文翻译叫做布隆过滤器,是1970年由布隆提出的.它实际上是一

大数据时代的结构化存储—HBase在阿里的应用实践

摘要: # 前言 时间回到2011年,Hadoop作为新生事物,在阿里巴巴已经玩得风生水起,上千台规模的"云梯"是当时国内名声显赫的计算平台. 这一年,Hadoop的好兄弟HBase由毕玄大师带入淘宝,开启了它的阿里之旅. 前言时间回到2011年,Hadoop作为新生事物,在阿里巴巴已经玩得风生水起,上千台规模的"云梯"是当时国内名声显赫的计算平台.这一年,Hadoop的好兄弟HBase由毕玄大师带入淘宝,开启了它的阿里之旅.从最初的淘宝历史交易记录,到去年的支付宝

HBase读写性能优化

一个系统上线之后,开发和调优将会一直伴随在系统的整个生命周期中,HBase也不例外.下面我们要学习如何进行HBase读写性能调优,以获取最大的读写效率. HBase写入优化客户端优化批量写采用批量写,可以减少客户端到RegionServer之间的RPC的次数,提高写入性能.批量写请求要么全部成功返回,要么抛出异常. HTable.put(List<Put>); 异步批量提交如果业务可以接受异常情况下丢失少量数据,可以使用异步批量提交方式提交请求. 用户提交写请求之后,数据会先写入客户端缓存,并

Hbase 布隆过滤器BloomFilter介绍

1.主要功能 提高随机读的性能 2.存储开销 bloom filter的数据存在StoreFile的meta中,一旦写入无法更新,由于StoreFile是不可变的.Bloomfilter是一个列族(cf)级别的配置属性,假设你在表中设置了Bloomfilter,那么HBase会在生成StoreFile时包括一份bloomfilter结构的数据,称其为MetaBlock:MetaBlock与DataBlock(真实的KeyValue数据)一起由LRUBlockCache维护.所以,开启bloomf

BloomFilter在Hbase中的实现与应用

在HFILE文件中的存储 BloomFilterChunk /** Bytes (B) in the array. This actually has to fit into an int. */ protected long byteSize; /** Number of hash functions */ protected int hashCount; /** Hash type */ protected final int hashType; /** Hash Function */ p

Hbase基本语句用法

使用hbase shell命令进入hbase: [[email protected]~]# hbase shell SLF4J: Class path contains multiple SLF4Jbindings. SLF4J: Found binding in[jar:file:/usr/hdp/2.4.3.0-227/hadoop/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Fo

Hbase的属性

Hbase的属性 一:基本属性 1.查看属性 2.解释属性 NAME:列簇名 BLOOMFILTER:布隆过滤器,用于对storefile的过滤 共有三种类型: ROW:行健过滤 ROWCOL:行列过滤 NONE:无 VERSIONS:版本数 MIN_VERSIONS:最小版本数 TTL:版本存货活时间 BLOCKSIZE:数据块的大小,默认64KB IN_MEMORY:激进内存,赋予一些列簇在缓存中具有较高的优先级 BLOCKCACHE:数据块缓存,可以将常用的列簇设为true,不常使用的设为