布隆过滤器及其应用_第1页
布隆过滤器及其应用_第2页
布隆过滤器及其应用_第3页
布隆过滤器及其应用_第4页
布隆过滤器及其应用_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、布隆过滤器及其在HBase中的应用什么是布隆过滤器什么是布隆过滤器1布隆过滤器的布隆过滤器的Java实现实现2布隆过滤器在布隆过滤器在HBase中的中的应用应用3主要内容什么是布隆过滤器*布隆过滤器(Bloom Filter)是一种概率空间高效的数据结构。它与hashmap非常相似,用于检索一个元素是否在一个集合中。它在检索元素是否存在时,能很好地取舍空间使用率与误报比例。正是由于这个特性,它被称作概率性数据结构(probabilistic data structure)布隆过滤器的基本思想* Bloom-Filter算法的核心思想就是利用多个不同的Hash函数来解决“冲突”。 计算某元素x是

2、否在一个集合中,首先能想到的方法就是将所有的已知元素保存起来构成一个集合R,然后用元素x跟这些R中的元素一一比较来判断是否存在于集合R中;我们可以采用链表等数据结构来实现。但是,随着集合R中元素的增加,其占用的内存将越来越大。试想,如果有几千万个不同网页需要下载,所需的内存将足以占用掉整个进程的内存地址空间。即使用MD5,UUID这些方法将URL转成固定的短小的字符串,内存占用也是相当巨大的.布隆过滤器优缺点*优点: 具有很好的空间和时间效率(只需要哈希表的1/8或1/4的空间复杂度就能完成同样的问题) 不存在false negative (漏报),就是说如果元素存在的话,必能得到正确的结果缺

3、点: 不能删除已储存的元素 元素越多,false positive rate(误报率)越大,也就说将不存在的元素判定为存在。(常见的补救方法:增加一个白名单,存储可能被误判的元素)布隆过滤器的空间效率*当使用列表或者集合时,空间效率都是重要且显著的,那么布隆过滤器就应当被考虑。布隆过滤器基础*布隆过滤器是N位的位数组,其中N是位数组的大小。它还有另一个参数k,表示使用哈希函数的个数。这些哈希函数用来设置位数组的值。当往过滤器中插入元素x时,h1(x), h2(x), , hk(x)所对应索引位置的值被置“1”,索引值由各个哈希函数计算得到。注意,如果我们增加哈希函数的数量,误报的概率会趋近于0

4、.但是,插入和查找的时间开销更大,布隆过滤器的容量也会减小。为了用布隆过滤器检验元素是否存在,我们需要校验是否所有的位置都被置“1”,与我们插入元素的过程非常相似。如果所有位置都被置“1”,那也就意味着该元素很有可能存在于布隆过滤器中。若有位置未被置“1”,那该元素一定不存在什么是布隆过滤器什么是布隆过滤器1布隆过滤器的布隆过滤器的Java实现实现2布隆过滤器在布隆过滤器在HBase中的中的应用应用3主要内容布隆过滤器Java实现*示例: 为了存储一亿个电子邮件地址 建立一个含有十六亿二进制比特,也就是两亿字节 将十六亿的比特全部设置为0 我们用八个不同的哈希函数,以电子邮件地址为键,算出值,

5、有8个(也许不是数字) 我们再一个哈希函数,分别以这8个值为键,会得到8个数值(范围为1到十六亿的某个数字) 以上一步算出的8个数值为下标,将这8个位置的二进制都设置为1(存储了一个地址)查询时只需要用类似的方法得到相应电子邮件的8个数值,以其为下标看二进制是否都设置为了1,如果设置为了1,那么这个电子邮件就存在在这个表中。什么是布隆过滤器什么是布隆过滤器1布隆过滤器的布隆过滤器的Java实现实现2布隆过滤器在布隆过滤器在HBase中的应用中的应用3主要内容布隆过滤器的应用*应用:1. 垃圾邮件过滤中的黑白名单2. 爬虫(Crawler)的网址判重模块3. HBase ROWKEY查询HBas

6、e布隆过滤器的原理*数据块索引提供了一个有效的方法,在访问一个特定的行时用来查找应该读取的HFile的数据块。但是它的效用是有限的。HFile数据块的默认大小是64KB,这个大小不能调整太多如果你要查找一个短行,只在整个数据块的起始行键上建立索引无法给你细粒度的索引信息。例如,如果你的行占用100字节存储空间,一个64KB的数据块包含(64 * 1024)/100 = 655.53 = 700行,而你只能把起始行放在索引位上。你要查找的行可能落在特定数据块上的行区间里,但也不是肯定存放在那个数据块上。这有多种情况的可能,或者该行在表里不存在,或者存放在另一个HFile里,甚至在MemStore

7、里。这些情况下,从硬盘读取数据块会带来IO开销,也会滥用数据块缓存。这会影响性能,尤其是当你面对一个巨大的数据集并且有很多并发读用户时 布隆过滤器允许你对存储在每个数据块的数据做一个反向测试。当某行被请求时,先检查布隆过滤器看看该行是否不在这个数据块。布隆过滤器要么确定回答该行不在,要么回答它不知道布隆过滤器的代价*存储这个额外的索引层次占用额外的空间。布隆过滤器随着它们的索引对象数据增长而增长,所以行级布隆过滤器比列标识符级布隆过滤器占用空间要少。当空间不是问题时,它们可以帮助你榨干系统的性能潜力。 Bloomfilter是一个列族(cf)级别的配置属性,如果你在表中设置了Bloomfilt

8、er,那么HBase会在生成StoreFile时包含一份bloomfilter结构的数据,称其为MetaBlock;MetaBlock与DataBlock(真实的KeyValue数据)一起由LRUBlockCache维护。所以,开启bloomfilter会有一定的存储及内存cache开销布隆过滤器在HBase中的应用*HBase利用Bloomfilter来提高随机读(Get)的性能,对于顺序读(Scan)而言,设置Bloomfilter是没有作用的(0.92以后,如果设置了bloomfilter为ROWCOL,对于指定了qualifier的Scan有一定的优化,但不是那种直接过滤文件,排除在查

9、找范围的形式)布隆过滤器在HBase表中使用方式*hbase(main):007:0 create mytable, NAME = colfam1, BLOOMFILTER = ROWCOL BLOOMFILTER参数的默认值是NONE。一个行级布隆过滤器用ROW打开,列标识符级布隆过滤器用ROWCOL打开。行级布隆过滤器在数据块里检查特定行键是否不存在,列标识符级布隆过滤器检查行和列标识符联合体是否不存在。ROWCOL布隆过滤器的开销高于ROW布隆过滤器。布隆过滤器在如何提高GET性能*对于某个region的随机读,HBase会遍历读memstore及storefile(按照一定的顺序),将

10、结果合并返回给客户端。如果你设置了bloomfilter,那么在遍历读storefile时,就可以利用bloomfilter,忽略某些storefileHBase中布隆过滤器的类型及应用*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)时就会过滤sf2,get(r3)就会过滤sf1 ROWCOL,根据Ke

11、yValue中的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)就会过滤sf1ROW vs ROWCOL*ROWCOL一定比一定比ROW效果好

12、效果好么么?1.ROWCOL只对指定列(Qualifier)的随机读(Get)有效,如果应用中的随机读get,只含row,而没有指定读哪个qualifier,那么设置ROWCOL是没有效果的,这种场景就应该使用ROW 2.如果随机读中指定的列(Qualifier)的数目大于等于2,在0.90版本中ROWCOL是无效的,而在0.92版本以后,HBASE-2794对这一情景作了优化,是有效的(通过KeyValueScanner#seekExactly) 3.如果同一row多个列的数据在应用上是同一时间put的,那么ROW与ROWCOL的效果近似相同,而ROWCOL只对指定了列的随机读才会有效,所以

13、设置为ROW更佳 4.ROWCOL与ROW只在名称上有联系,ROWCOL并不是ROW的扩展,不能取代ROW结论*1. region下的下的storefile数目越多,数目越多,bloomfilter的效果越好的效果越好2. region下的下的storefile数目越少,数目越少,HBase读性能越好读性能越好 任何类型的get(基于rowkey和基于row+col)bloomfilter都能生效,关键是get的类型要匹配bloomfilter的类型 基于row的scan是没办法优化的 scan是一个范围,如果是row的bloomfilter不命中只能说明该rowkey不在此storefile中,但next rowkey可能在。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论