目录
- 布隆过滤器
- HBase中如何设置
布隆过滤器
布隆是个人,发明了布隆算法,基于布隆算法实现的组件,称为布隆过滤器!这个组件一般是用作过滤!
过滤功能: 在海量数据中,用非常高的效率和性能,判断一个数据是否在集合中存在!
作用: 布隆过滤器只能判断一个数据要么一定在集合中不存在,要么在集合中可能存在!
误判: 布隆过滤器判断数据可能存在,实际扫描后,发现不存在,这种情况有存在的几率!
布隆过滤器是可以提升读的性能!存在误判率!
那么我就画一个图来解释一下
说明R3在集合中一定不存在

说明R4可能存在

HBase中如何设置
1.HBase中通过列族设置过滤器。
2.HBase支持两种布隆过滤器: ROW | ROWCOL ROW: 布隆过滤器在计算时,使用每行的rowkey作为参数,进行判断!举例:
info-----------info1
info storefile1: (r1,info:age,20) ,(r2,info:age,20)
info1 storefile2: (r3,info1:age,20) ,(r4,info1:age,20)
查询r1时,如果命中,判断storefile2中一定没有r1的数据,在storefile1中可能有!ROWCOL: 布隆过滤器在计算时,使用每行的rowkey和column一起作为参数,进行判断!
举例:
info------------info1
info storefile1: (r1,info:age,20) ,(r2,info:age,20)
info1 storefile2: (r3,info1:age,20) ,(r4,info1:age,20)
查询rowkey=r1,只查info:age=20 列时,如果命中,判断storefile2中一定没有此数据,在storefile1中可能有!注意:
旧版本,只有get操作,才会用到布隆过滤器,scan用不到!
1.x之后,scan也可用用布隆过滤器,稍微起点作用!启用布隆过滤器后,会占用额外的内存,布隆过滤器通常是在blockcache和memstore中!举例:
执行 get ‘t1’,‘r1’
①扫描r1所在region的所有列族的memstore,扫memstore时,先通过布隆过滤器判断r1是否存在,如果不存在,就不扫!可能存在,再扫描!
②扫描Storefile时,如果storefile中,r1所在的block已经缓存在blockcache中,直接扫blockcache,在扫描blockcache时,先使用布隆过滤器判断r1是否存在,如果不存在,就不扫!可能存在,再扫描!
















