一、介绍一下 hbase 过滤器。
一般来说调整表设计就可以优化访问模式。但是有时已经把表设计调整得尽可能好了,为不
同访问模式优化得尽可能好了。当仍然需要减少返回客户端的数据时,这就是考虑使用过滤
器的时候了。
过滤器也被称为下推判断器(push-down predicates),支持把数据过滤标准从客户端下推到服务器,带有 Filter 条件的 RPC 查询请求会把 Filter 分发到各个 RegionServer,所有的过滤器都在服务端生效,使被过滤掉的数据不会被传送到客户端,这些过滤逻辑在读操作时使用,对返回客户端的数据有影响。这样可以降低网络传输的压力。
Filter 可以根据 簇、列、版本等更多的条件来对数据进行过滤,基于 HBase 本身提供的三维有序(主键有序、列有序、版本有序),这些 Filter 可以高效的完成查询过滤的任务。
二、HBase 过滤器实现原则
采用 bloomfilter 进行过滤,Bloom Filter 是一种空间效率很高的随机数据结构
1)BLOOMFILTER 在 HBase 的作用
HBase 利用 BLOOMFILTER 来提供随机读(GET)的性能,对于顺序读(Scan),设置BLOOMFILTER 是没有作用的。
2)BLOOMFILTER 在 HBase 的开销
BLOOMFILTER 是一个列族级别的配置,如果你表中设置了 BLOOMFILTER,那么 HBase 在生成 StoreFile 时候包含一份 BLOOMFILTER 的结构数据,称为 MetaBlock;开启 BLOOMFILTER会有一定的存储以及内存的开销。
3)BLOOMFILTER 如何提供随机读(
GET)的性能对于某个 region 的随机读,HBase 会遍历读 memstore 及 storefile(按照一定的顺序),将
结果合并返回给客户端。如果你设置了 bloomfilter,那么在遍历读 storefile 时,就可以利用bloomfilter,忽略某些 storefile。
4)Region 的 StoreFile 数目越多,BLOOMFILTER 效果越好
5)Region 下的 storefile 数目越少,HBase 读性能越好