`
shenchunhui
  • 浏览: 147186 次
  • 来自: 杭州
社区版块
存档分类
最新评论

对HBase中Bloomfilter类型的设置及使用的理解

阅读更多
1.Bloomfilter的原理?
可参考 http://hi.baidu.com/yizhizaitaobi/blog/item/cc1290a0a0cd69974610646f.html

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


如有错误,谢谢指正!
分享到:
评论
6 楼 leibnitz 2014-10-20  
shenchunhui 写道
楼上的同学的英文选摘,不知出自何处,但实际上Scan是不会对文件进行过滤的,why?
其实很好理解:
假设目录有2个文件,文件1中记录的kv为row A至row K;文件2中记录的kv为row L至 row Z;那么如果某次scan其startRow是a,endRow为空,难道bloomfilter要过滤文件2?

不过,0.92以后的版本,对于bloomfilter类型为ROW+COL,对于指定qualifier的scan会有一些优化,但不是那种直接过滤的方式


引用错了,应该是基于这个的,sorry
5 楼 leibnitz 2014-10-20  
chenchao051 写道
shenchunhui 写道
楼上的同学的英文选摘,不知出自何处,但实际上Scan是不会对文件进行过滤的,why?
其实很好理解:
假设目录有2个文件,文件1中记录的kv为row A至row K;文件2中记录的kv为row L至 row Z;那么如果某次scan其startRow是a,endRow为空,难道bloomfilter要过滤文件2?

不过,0.92以后的版本,对于bloomfilter类型为ROW+COL,对于指定qualifier的scan会有一些优化,但不是那种直接过滤的方式


一楼的内容来自 HBase The Definitive Guide一书,p379


没用过BF,但觉得你这是特殊情况,过滤与否都是一样.
但对于如果scan只是部分files时,过依然是明智的
4 楼 agilesc 2013-03-28  
个人觉得这个bloomfilter 在scan的时候,只对松散的表有作用吧。如果根据column+quator过来的话,如果我的是表每行数据每一个quator都有数据的话。一个storeFile不肯定是包含所有该family下的quator的数据的。对于楼主举的例子:

sf1包含kv1(r1 cf:q1 v)、kv2(r2 cf:q1 v)
sf2包含kv3(r1 cf:q2 v)、kv4(r2 cf:q2 v)

这种情况。只有松散的表才会出现吧。比如我的一行记录是只有q1,而另外一行只有q2.
这样我scan的时候只查q2.是可以过滤掉。如果是很严谨的话,那sf1肯定是会包含q1和q2的吧。这样就不能过滤掉其中一个了吧

不知道我的理解对不对。请楼主解答下。
3 楼 chenchao051 2012-11-13  
shenchunhui 写道
楼上的同学的英文选摘,不知出自何处,但实际上Scan是不会对文件进行过滤的,why?
其实很好理解:
假设目录有2个文件,文件1中记录的kv为row A至row K;文件2中记录的kv为row L至 row Z;那么如果某次scan其startRow是a,endRow为空,难道bloomfilter要过滤文件2?

不过,0.92以后的版本,对于bloomfilter类型为ROW+COL,对于指定qualifier的scan会有一些优化,但不是那种直接过滤的方式


一楼的内容来自 HBase The Definitive Guide一书,p379
2 楼 shenchunhui 2012-07-11  
楼上的同学的英文选摘,不知出自何处,但实际上Scan是不会对文件进行过滤的,why?
其实很好理解:
假设目录有2个文件,文件1中记录的kv为row A至row K;文件2中记录的kv为row L至 row Z;那么如果某次scan其startRow是a,endRow为空,难道bloomfilter要过滤文件2?

不过,0.92以后的版本,对于bloomfilter类型为ROW+COL,对于指定qualifier的scan会有一些优化,但不是那种直接过滤的方式
1 楼 shenbai 2012-06-19  
对于顺序读(Scan)而言,设置Bloomfilter是没有作用的

这个说法不合适,你的理解有偏差,如果开启了bloom Filter,无论是get还是Scan都做是否在文件中的检查。

The final question is whether to use a row or a row+column Bloom filter. The answer
depends on your usage pattern. If you are doing only row scans, having the more specific row+column filter will not help at all: having a row-level Bloom filter enables you to narrow down the number of files that need to be checked, even when you do row+column read operations, but not the other way around.

相关推荐

    HBase官方文档中文版-HBase手册中文版

    这份“HBase官方文档中文版”提供了全面深入的HBase知识,帮助用户理解和掌握如何在大数据场景下有效地使用HBase。 一、HBase概述 HBase设计目标是提供大规模数据的实时读写能力,它运行在Hadoop之上,利用HDFS作为...

    HBase使用的jar包

    为了在Hadoop项目中使用HBase进行明细查询,我们需要依赖特定的jar包。这些jar包包含了HBase运行所需的所有类库和函数,使得开发者可以在应用程序中调用HBase的相关API来操作数据。 首先,我们要理解HBase的架构。...

    hbase-2.4.17-bin 安装包

    4. Bloom Filter:使用Bloom Filter可以减少不必要的磁盘I/O,提高查询性能。 5. Indexing:虽然HBase本身不支持索引,但可以通过第三方库如 phoenix 或 hbase-indexer 实现索引功能。 六、监控与维护 1. 使用...

    HBase多表关联查找资料

    * bloomfilter:根据应用需求,判断是否需要精确到 rowkey 或 column, bloomfilter 可以对 region 下的 hfile 进行查询优化。 2. rowkey 设计 rowkey 是 HBase 的 key-value 存储中的 key,通常使用用户要查询的...

    hbase性能优化

    例如,启用bloomfilter过滤器,bloomfilter可以在查询时过滤掉不存在的行,这将显著提高查询性能;增加HBase堆内存,根据业务需求调整hbase-env.sh中的HBASE_HEAPSIZE设置;增加RPC调用数量,通过修改hbase-site.xml...

    hbase 学习 hbase原理 hbase资料

    HBase是一种分布式、高性能、基于列族的NoSQL数据库,...记住,理论知识与实践相结合是掌握HBase的关键,通过实际操作和项目经验,你会对HBase有更深入的理解。提供的“hbase 培训”资料应该能帮助你开始这段学习之旅。

    HBase权威指南中文版

    这本书旨在帮助读者理解和掌握如何有效地使用HBase处理大规模数据存储和检索问题。HBase是建立在Apache Hadoop之上,一个面向列的、分布式的、可扩展的开源数据库,它能够提供实时的数据访问,并且具有强大的数据...

    hbase-0.94.1.tar.gz

    - ** Bloom Filter**:利用Bloom Filter减少不必要的磁盘I/O,提升查询效率。 总之,HBase-0.94.1作为一个早期版本,展示了HBase在大数据实时处理中的强大能力。随着技术的发展,HBase已经迭代到更高的版本,但其...

    hbase 1.2.0源码

    通过对HBase 1.2.0源码的阅读,可以深入了解这些机制的实现细节,比如Region分配算法、数据读写的内部流程、Bloom Filter的构建和使用、以及Compaction策略的设定等。这将有助于开发者更好地优化HBase应用,解决实际...

    HBase实战实例

    2. Bloom Filter:利用Bloom Filter减少不必要的磁盘I/O,提高查询效率。 3. Compaction策略:适时进行Compaction,平衡存储空间和读取速度。 六、挑战与解决方案 1. 数据一致性:在高并发场景下,如何保证数据的...

    HBase权威指南中文版+官方文档

    - **Bloom Filter**:介绍如何使用Bloom Filter来提高查询效率。 #### 三、HBase升级指南 - **从0.20.x或0.89.x升级到0.90.x**:列出具体的步骤与注意事项。 - **从0.90.x到0.92.x**:提供升级路径与建议。 ####...

    hbase学习笔记

    理解并熟练掌握上述概念和命令,将有助于在实践中高效地使用HBase来处理大规模数据。在设计HBase表结构时,需要综合考虑数据模型、访问模式、存储和计算资源等因素,以达到最佳的性能和可扩展性。

    hbase 表设计

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

    hbase shell

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

    Hbase项目实例相关资料

    本资料将围绕一个具体的HBase项目实例,深入探讨其配置、使用及优化等方面的知识。 一、HBase基本概念 HBase是一个非关系型数据库(NoSQL),它以行键、列族、时间戳为数据存储结构,特别适合处理海量稀疏数据。在...

    HBase上搭建广告实时数据处理平台-广点通.pdf

    - 内存Cache优化:增大写入缓存,利用Bloom Filter减少磁盘I/O,部分小表设为全内存表。 - 负载均衡:针对时间序列数据的定制化算法,避免热点Region集中在单一节点。 - 单点故障避免:通过分类分发批处理操作和...

    weibo_hbase_

    2. Bloom Filter:利用Bloom Filter减少不必要的磁盘I/O,加快数据查找速度。 3. Compaction:定期执行Compaction操作,合并小文件,降低读取延迟。 六、监控与维护 1. ZooKeeper协调:HBase依赖ZooKeeper进行集群...

    基于Hadoop和HBase的大规模海量数据去重.zip

    常见的去重算法有基于哈希的去重(如Bloom Filter)、排序后去重、位图法等。在Hadoop环境中,通常使用MapReduce实现这些算法。例如,Map阶段计算数据的哈希值,Reduce阶段检查并去除重复的哈希值。 5. **...

    HBase用户手册-v2.2.docx

    表的属性包括压缩、 Bloom Filter、BlockCache等,这些设置会影响存储效率和查询性能。 6.2 表创建实例 手册提供了具体的SQL样例,指导用户如何创建表,包括指定列族、配置属性等。 7. bulk loading的使用 7.1 ...

Global site tag (gtag.js) - Google Analytics