HBase过滤器系列(一),你学废了吗?

290 阅读3分钟

      之前在公司做爬虫的时候,我们将大量的文章以及作者数据存储在了Hbase中,大家都知道,Hbase的定位是大数据规模+高并发+毫秒级响应的OLTP实时数据库,但是当查询跨region时,也会造成查询时长增加,下面我就介绍一下当时我使用的一种解决方式--过滤器~

一、何为过滤器?

Hbase提供了种类丰富的过滤器来提高数据处理的效率,用户可以通过内置或自定义的过滤器来对数据进行过滤,所有的过滤器都在服务端生效,即谓词下推。这样可以保证过滤掉的数据不会被传送到客户端,从而减轻网络传输和客户端的压力。

二、如何用过滤器?

Hbase中所有的内置过滤器都会直接或者间接的继承FilterBase这个抽象类,而抽象类FilterBase则又实现了Filter这个接口。那么如何使用过滤器呢?那就更简单了,只需要通过Scan或者Get的setFilter进行设置即可。

三、过滤器如何分类?

HBase内置的过滤器主要可以分为三类:分别是比较过滤器、专用过滤器和包装过滤器,下面由宋某和大家一起认识一下他们吧~~ 本篇文章主要向大家介绍一下Hbase中比较过滤器,其他两种过滤器以及过滤器之间的组合使用在以后的文章中会进行介绍~

四、比较过滤器

所有比较过滤器都是继承了CompareFilter接口,而创建一个比较过滤器仅需要两个参数,如图,分别是比较运算符比较器实例

    以下进行一下参数说明:

    ​1、CompareOp

我们也是可以通过源码来进行了解滴~如下图,源码中以枚举的方式清楚明白的说明了可供我们使用的类型。

     2、ByteArrayComparable

     这是一个抽象类,我们在使用比较过滤器时,只需要传入符合我们要求的实现类即可~也可以自己去继承这个抽象类,具体去实现自己的比较器。

    

五、使用

那说了这么多,肯定有小伙伴还是会比较迷糊,那比较过滤器具体都有哪些呢?他又具体能起到什么作用呢?别急别急,干货马上就来了~

HBase中的比较过滤器共有五大类: 
   RowFilter  基于行键来过滤数据   
   FamilyFilter  基于列族来过滤数据  
   QualifierFilter  基于列限定符来过滤数据  
   ValueFilter  基于单元格(cell)内容来过滤数据  
   DependentColumnFilter 指定一个参考列来过滤其他列的过滤器,过滤的原则是基于参考列的时间戳来进行筛选

      下面,就举一个简答的例子来说明一下比如我们要根据查询Hbase中一列的值,我们给定了一个基准,列值不能大于111,那么我们就可以这样来写

Filter filter = new QualifierFilter(
    CompareFilter.CompareOp.GREATER,
    new BinaryComparator(Bytes.toBytes(111))
); 
Scan scan = new Scan(); 
scan.setFilter(filter);

      最后的最后,我想跟各位小伙伴在强调一下,Hbase的过滤器是在服务端生效的呦,使用得当的话,会大大提高我们的工作效率,大量减轻查询数据过程中的网络压力滴~ 今天就先分享到这里啦,接下来会慢慢给大家分享专用过滤器、包装过滤器以及多个过滤器的组合使用~