`
乡里伢崽
  • 浏览: 112933 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

hbase 布隆过滤器

 
阅读更多
布隆过滤器:
1.原理?
数据块索引提供了一个有效的方法,在访问一个特定的行时用来查找应该读取的HFile的数据块。但是它的效用是有限的。HFile数据块的默认大小是64KB,这个大小不能调整太多。 
如果你要查找一个短行,只在整个数据块的起始行键上建立索引无法给你细粒度的索引信息。例如,如果你的行占用100字节存储空间,一个64KB的数据块包含(64 * 1024)/100 = 655.53 = ~700行,而你只能把起始行放在索引位上。你要查找的行可能落在特定数据块上的行区间里,
但也不是肯定存放在那个数据块上。这有多种情况的可能,或者该行在表里不存在,或者存放在另一个HFile里,甚至在MemStore里。这些情况下,从硬盘读取数据块会带来IO开销,也会滥用数据块缓存。这会影响性能,尤其是当你面对一个巨大的数据集并且有很多并发读用户时。 
布隆过滤器允许你对存储在每个数据块的数据做一个反向测试。当某行被请求时,先检查布隆过滤器看看该行是否不在这个数据块。布隆过滤器要么确定回答该行不在,要么回答它不知道。这就是为什么我们称它是反向测试。布隆过滤器也可以应用到行里的单元上。当访问某列标识符时先使用同样的反向测试。 
布隆过滤器也不是没有代价。存储这个额外的索引层次占用额外的空间。布隆过滤器随着它们的索引对象数据增长而增长,所以行级布隆过滤器比列标识符级布隆过滤器占用空间要少。当空间不是问题时,它们可以帮助你榨干系统的性能潜力。 
你可以在列族上打开布隆过滤器,如下所示: 
hbase(main):007:0> create 'mytable', 
{NAME => 'colfam1', BLOOMFILTER => 'ROWCOL'} 
BLOOMFILTER参数的默认值是NONE。一个行级布隆过滤器用ROW打开,列标识符级布隆过滤器用ROWCOL打开。行级布隆过滤器在数据块里检查特定行键是否不存在,列标识符级布隆过滤器检查行和列标识符联合体是否不存在。ROWCOL布隆过滤器的开销高于ROW布隆过滤器。
2.Bloomfilter在HBase中的作用?
HBase利用Bloomfilter来提高随机读(Get)的性能,对于顺序读(Scan)而言,设置Bloomfilter是没有作用的(0.92以后,如果设置了bloomfilter为ROWCOL,对于指定了qualifier的Scan有一定的优化,但不是那种直接过滤文件,排除在查找范围的形式)
3.Bloomfilter在HBase中的开销?
Bloomfilter是一个列族(cf)级别的配置属性,如果你在表中设置了Bloomfilter,那么HBase会在生成StoreFile时包含一份bloomfilter结构的数据,称其为MetaBlock;MetaBlock与DataBlock(真实的KeyValue数据)一起由LRUBlockCache维护。所以,开启bloomfilter会有一定的存储及内存cache开销。
4.Bloomfilter如何提高随机读(Get)的性能?
对于某个region的随机读,HBase会遍历读memstore及storefile(按照一定的顺序),将结果合并返回给客户端。如果你设置了bloomfilter,那么在遍历读storefile时,就可以利用bloomfilter,忽略某些storefile。
5.HBase中的Bloomfilter的类型及使用?
a)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
b)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
6.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更佳
7.ROWCOL与ROW只在名称上有联系,ROWCOL并不是ROW的扩展,不能取代ROW
8.region下的storefile数目越多,bloomfilter的效果越好
9.region下的storefile数目越少,HBase读性能越好
结论如下:
1.任何类型的get(基于rowkey和基于row+col)bloomfilter都能生效,关键是get的类型要匹配bloomfilter的类型
2.基于row的scan是没办法优化的
scan是一个范围,如果是row的bloomfilter不命中只能说明该rowkey不在此storefile中,但next rowkey可能在。
3.row+col+qualify的scan可以去掉不存在此qualify的storefile,也算是不错的优化了,而且指明qualify也能减少流量,因此scan尽量指明qualify。
而rowcol的bloomfilter就不一样了,如果rowcol的bloomfilter没有命中表明该qualifiy不在这个storefile中,因此这次scan就不需要scan此storefile了!
分享到:
评论

相关推荐

    Hbase布隆过滤器详解

    布隆过滤器是一种高效的空间节约型数据结构,用于判断一个元素是否可能存在于一个大型集合中。它由布隆于1970年提出,主要利用了位数组和多个哈希函数来实现。基本思想是通过将元素经过多个独立的哈希函数映射到一个...

    14.hbase中判断数据是否在一个持久化文件中的机制--布隆过滤器.mp4

    14.hbase中判断数据是否在一个持久化文件中的机制--布隆过滤器.mp4

    hbase 表设计

    在HBase中使用布隆过滤器可以减少文件的打开次数,从而减少磁盘I/O。布隆过滤器对于提高查询性能至关重要,尤其是在处理大量数据时。 综上所述,HBase表设计要求设计者深入理解其非关系型的数据模型和底层架构特性...

    hbase的hbase-1.2.0-cdh5.14.2.tar.gz资源包

    3. **布隆过滤器**:使用布隆过滤器减少不必要的磁盘I/O,提高查询效率。 4. **Compaction**:定期进行Compaction减少文件数量,提升读写性能。 5. **BlockCache**:配置BlockCache大小,缓存最近访问的数据,提高...

    hbase-2.4.11-bin.tar.gz

    7. **性能优化**:HBase提供了多种优化策略,如表分区、布隆过滤器、压缩等,可以根据实际场景调整以提升性能。 8. **安全性**:HBase支持Kerberos认证,可以实现安全的集群环境。同时,可以利用Hadoop的权限管理来...

    Hbase的JavaAPI

    为了优化性能,开发者可以考虑使用布隆过滤器、预读取(BlockCache)、压缩、Region分裂等技术。 以上是HBase Java API的基础知识,理解并熟练掌握这些概念和操作,将有助于开发高效、稳定的大数据存储和检索应用...

    Hbase配置.docx

    作为一种空间效率高的数据结构,布隆过滤器用于在查询时快速判断某条数据是否存在,虽然可能会产生误报(false positive),但不会漏报(false negative)。这在处理大规模数据时能有效减少无效的磁盘读取。 6. **...

    HBase权威指南中文版

    可以利用布隆过滤器(Bloom Filter)减少无效的磁盘I/O,以及Scan操作来批量获取数据。 7. **HBase与Hadoop集成**:HBase构建在Hadoop的HDFS之上,利用HDFS的分布式存储特性。MapReduce可以用于对HBase进行批量操作...

    Distributed-Systems-Bloom-Filters-Coded-Bloom-Filter-Counting-Bloom-Filter:在此项目中,我实现了Bloom Bloom过滤器,编码Bloom Bloom过滤器,Counting Bloom Filter计数。 这些用于Google Bigtable,Apache HBase,Apache Cassandra和PostgreSQL等系统中

    分布式系统布鲁姆过滤器编码布鲁姆过滤器计数布鲁姆过滤器 在此项目中,我实现了Bloom Bloom过滤器,编码Bloom Bloom过滤器,Counting Bloom ... 实际上,常规的布隆过滤器可以被认为是具有1位存储桶大小的计数过滤器。

    HBase官网文档解读.pdf

    HBase是Apache基金会下的一个开源项目,它是一个分布式的、多版本的、面向列的NoSQL数据库,适用于大数据场景下的海量数据的存储和读写。HBase的设计初衷是为了在廉价的硬件上提供高可靠性、高性能、可伸缩以及面向...

    HBase性能优化方法总结

    2. **布隆过滤器**:在不确定数据是否存在时,使用Bloom Filter避免无效的磁盘访问。 3. **Scan优化**:限制返回结果的数量,使用StartRow和StopRow控制扫描范围,避免全表扫描。 五、运维优化 1. **监控与调优**:...

    HBase分布式事务与SQL实现

    此外,HBase通过块缓存和布隆过滤器来优化实时查询,并通过服务器端过滤器实现查询谓词下推,从而加速查询处理。HBase还支持多版本并发控制(MVCC),这种机制允许多个版本的数据项并存,通常用于实现读写一致性。 ...

    HBase权威指南_Hadoop权威指南_pdf_

    8. **索引和查询优化**:虽然HBase主要依赖Row Key进行查询,但可以通过Secondary Index或布隆过滤器实现更复杂的查询优化。 9. **备份与恢复**:HBase提供了快照功能,可以定期创建数据快照,用于灾难恢复或数据...

    Apache HBase PrimerPDF

    优化包括预分区、布隆过滤器、Compaction策略等,以提升性能。 9. **应用场景**: HBase常用于实时分析、日志存储、物联网(IoT)数据、监控数据等领域,特别适合需要随机读写、大数据量、低延迟的应用。 10. **...

    hbase学习笔记

    - `bloomFilter`和`scope`: 分别是布隆过滤器类型和列的复制范围。 5. **HBase Shell常用命令**: HBase Shell提供了与HBase交互的命令行工具,包括创建表、删除表、插入数据、查询数据等操作。例如: - `create...

    hbase简介共8页.pdf.zip

    6. **实时查询和性能优化**:HBase支持的过滤器、扫描器,以及如何通过索引和布隆过滤器提升查询性能。 7. **监控和故障恢复**:使用HBase的监控工具监控系统状态,以及如何处理Region Server故障。 8. **实战应用**...

    HBase.The.Definitive.Guide

    书中介绍了Get、Put、Scan等基本操作,以及如何优化查询性能,例如使用过滤器(Filter)和布隆过滤器(Bloom Filter)。此外,还涉及到了HBase的分布式特性,如Region划分和RegionServer的角色,以及数据的分裂和...

    hbase shell

    - `BLOOMFILTER`:布隆过滤器的类型。 - `REPLICATION_SCOPE`:复制范围。 - `COMPRESSION`:压缩算法。 - `VERSIONS`:版本数。 - `TTL`:数据生存时间。 - `BLOCKSIZE`:块大小。 - `IN_MEMORY`:是否将数据缓存在...

    HBase_Client_Api_Guide

    - `setBloomFilter`: 设置是否使用布隆过滤器来加速数据查询的速度。 #### 三、使用HBase客户端时的建议 **3.1 RowKey设计** RowKey的设计对于HBase表的性能至关重要,合理的设计可以极大地提高数据的访问效率。...

    hbase-0.98.17-hadoop2-bin.tar.gz

    - 读取时,HBase会从内存和HDFS中的HFile查找数据,利用布隆过滤器(Bloom Filter)优化查找效率。 以上就是关于HBase 0.98.17在Linux环境下的安装、配置和使用的基本知识点。在实际生产环境中,还需要考虑集群...

Global site tag (gtag.js) - Google Analytics