在讨论布隆过滤器在HBase中的应用之前,先介绍一下HBase的块索引机制。块索引是HBase固有的一个特性,因为HBase的底层数据是存储在HFile中的,而每个HFile中存储的是有序的<key, value>键值对,HFile文件内部由连续的块组成[1],每个块中存储的第一行数据的行键组成了这个文件的块索引,这些块索引信息存储在文件尾部。当HBase打开一个HFile时,块索引信息会优先加载到内存;HBase首先在内存的块索引中进行二分查找,确定可能包含给定键的块,然后读取磁盘块找到实际想要的键(重点啊)
但实际应用中,仅仅只有块索引满足不了需求,这是因为,块索引能帮助我们更快地在一个文件中找到想要的数据,但是我们可能依然需要扫描很多文件。而布隆过滤器就是为解决这个问题而生。因为布隆过滤器的作用是,用户可以立即判断一个文件是否包含特定的行键,从而帮我们过滤掉一些不需要扫描的文件。如下图所示,块索引显示每个文件中都可能包含对应的行键,而布隆过滤器能帮我们跳过一些明显不包含对应行键的文件。

如上图所示,布隆过滤器不能明确指出哪一个文件一定包含所查找的行键,布隆过滤器的结果有误差存在。当布隆过滤器判断文件中不包含对应的行时,这个答案是绝对正确的;但是,当布隆过滤器判断得到文件中包含对应行时,这个答案却有可能是错的。也就是说,HBase还是有可能加载了不必要的块。尽管如此,布隆过滤器还是可以帮助我们跳过一些明显不需要扫描的文件。另外,错误率可以通过调整布隆过滤器所占空间的大小来调整,通常设置错误率为1%。
需要注意的是,使用布隆过滤器,并不一定能立即提升个别的get操作性能,因为同一时间可能有多个客户端向HBase发送请求,当负载过大时,HBase的性能受限于读磁盘的效率。但是,使用了布隆过滤器之后,可以减少不必要的块加载,从而可以提高整个集群的吞吐率。并且,因为HBase加载的块数量少了,缓存波动也降低了,进而提高了读缓存的命中率。
然而,相比与布隆过滤器的优点,它的缺点显得如此微不足道,就是需要占用少量的存储空间。
在使用布隆过滤器时,需要注意两个问题:

什么时候应该使用布隆过滤器?根据上面的描述,布隆过滤器的主要作用,是帮助HBase跳过那些显然不包括所查找数据的底层文件。那么,当所查找的数据均匀分布在所有文件中(当用户定期更新所有行时,就可能导致这种情况),布隆过滤器的作用就微乎其微,反而浪费了存储空间。相反,如果我们查找的数据只包含在少部分的文件中,就应该果断使用布隆过滤器。
应该选择行级还是行加列级布隆过滤器?很显然,行加列级因为粒度更细,占用的存储空间也就越多。因此,如果用户总是读取整行的数据,行级布隆过滤器就够用了。在可以选择的情形下,尽可能使用行级布隆过滤器,因为它在额外的空间开销和利用过滤存储文件提升性能之间取得了更好的平衡。

注[1]: 注意这里的块不是HDFS的块,HBase块的默认大小是64KB。可以根据需要配置不同的大小,对于顺序访问较多的表,建议使用较大的块;随机访问较多的表,建议使用较小的块。
参考资料:《HBase权威指南》
用一句话总结就是,当我们根据rowkey查询数据的时候,先根据块索引确定行键所在的块,但是我们要扫描很多文件的块索引,如果想跳过大量非查找数据的文件时,就需要用布隆过滤器,布隆过滤器判断某键在某文件上不一定是正确的,但是它判断的某键不在某文件上一定是正确的!所以才叫过滤器的嘛~ 嗯,就这样~

布隆过滤器在HBase中的应用相关推荐

  1. 【Linux服务器开发】1.4 布隆过滤器-判断海量数据中某条数据是否存在

    目录 0.链接 1.问题的引入 2.看看是否有可供选择的数据结构来帮助我们判断在海量数据中某条数据是否存在  2.1 红黑树 2.1.1 从时间来分析 2.1.2 从空间来分析 2.2 哈希表 2.2 ...

  2. 布隆过滤器在hbase的应用

    1.布隆过滤器应用 之前再讲hbase的数据存储原理的时候,我们知道hbase的读操作需要访问大量的文件,大部分的实现通过布隆过滤器来避免大量的读文件操作. 2.布隆过滤器的原理 通常判断某个元素是否 ...

  3. redis布隆过滤器PHP,Redis 中的布隆过滤器

    什么是『布隆过滤器』 布隆过滤器是一个神奇的数据结构,可以用来判断一个元素是否在一个集合中.很常用的一个功能是用来去重.在爬虫中常见的一个需求:目标网站 URL 千千万,怎么判断某个 URL 爬虫是否 ...

  4. 如何使用布隆过滤器在Java中建立大容量的内存缓存

    背景 缓存是解决日常软件问题的重要概念. 您的应用程序可能会执行CPU密集型操作,而您又不想一次又一次地执行这些操作,而是只导出一次结果并将其缓存在内存中. 有时瓶颈是IO,例如您不想重复访问数据库, ...

  5. HBase的布隆过滤器详解

    HBase的布隆过滤器详解 1.布隆过滤器的简单介绍 2.布隆过滤器的原理分析 2.1 哈希表存在的问题 2.2 布隆过滤器的原理 2.2.1 原理详解 2.2.2 布隆过滤器失误率的调节 2.2.3 ...

  6. hbase之布隆过滤器

    一.布隆过滤器 布隆过滤器(Bloom Filter)是1970由布隆提出的.通过一个很长的二进制向量于一系列随即哈希函数生成.下面我就将通过以下小节来介绍布隆过滤器: 1.原因与结构解析 2.数学公 ...

  7. Hbase-之Bloom Filter布隆过滤器 hbase请求交互

    Hbase-之Bloom Filter布隆过滤器&Hbase 1 BloomFilter是什么? 布隆过滤器,以它的创始人Burton Howard Bloom的名字命名,首先明确一个点,它只 ...

  8. 小工匠聊架构-布隆过滤器在亿级流量的电商系统中的应用

    文章目录 Pre 无效请求超高并发,会导致崩溃 预防缓存穿透"神器":布隆过滤器 布隆过滤器在电商商品中的实践 如何减少布隆过滤器的误判? 布隆过滤器在 Java 中的应用 布隆过 ...

  9. Redis 高级主题之布隆过滤器(BloomFilter)

    最近计划准备整理几篇关于Reids高级主题的博文,本文整理的是关于布隆过滤器在Redis中如何应用,先来一张思维导图浏览全文. 1. 认识BloomFilter 1.1 原理 布隆过滤器,英文叫Blo ...

  10. 3层b+树索引访问磁盘次数_从B+树到LSM树,及LSM树在HBase中的应用

    点击上方蓝色字体,选择"设为星标" 回复"资源"获取更多资源 大数据技术与架构点击右侧关注,大数据开发领域最强公众号! 暴走大数据点击右侧关注,暴走大数据! 前 ...

最新文章

  1. 管理索引表:深入研究B树索引--重建,合并,删除(理论篇3)
  2. 【大版本】Adobe PDF控件ABCpdf V11发布 | 附下载
  3. 【组合数学】基本计数原则 ( 加法原则 | 乘法原则 )
  4. Laravel POST请求API接口 使用validate表单验证返回欢迎页
  5. docker学习笔记(四): 镜像和仓库
  6. Ubuntu apt-get 源详解
  7. String.subString内存泄露
  8. 简记模态对话框和非模态对话框
  9. python自然语言处理库_Python 自然语言处理(NLP)工具库汇总
  10. linux 免密安装
  11. 六、spring之通过FactoryBean为ioc容器中添加组件
  12. 神舟战神怎么装win11系统
  13. 【PAT (Basic Level) Practice (中文)】1029 旧键盘 (20分)
  14. 论文综述(KNN算法)
  15. 雷达多普勒频率计算公式_手持式雷达电波流速仪应用
  16. win10定时锁定计算机,Win10自动锁屏时间太长了怎么设置?Win10设置自动锁屏时间的操作...
  17. 陈耀烨九段加冕新名人见证实录
  18. 外星文明 未来计算机,科学家有望未来在地球“设计打印”外星生命
  19. 【01:转自知乎:关于 openSUSE 】
  20. 个人小作品之迷你音乐播放器(移动端)

热门文章

  1. ios 开发控件中心点_AppCan
  2. 自动搜索关键词点击广告或网站,自动换ip实现过程
  3. 请教刷机教程9008线刷
  4. node配置邮箱发送验证码
  5. Android Uri的几种使用方法,分享共同学习
  6. 数据挖掘:概念与技术笔记(一)引言
  7. 瀚高数据库安全配置要求
  8. 马哥教育42期第三周作业
  9. 马哥教育42期第二周作业
  10. xz压缩文件的解压缩过程