文件过滤_HBase自定义过滤器

一、概述

在查询Hbase数据时,如果能巧妙使用其过滤器,可以减少数据的扫描范围,加快数据的查询,HBase中内置了很多过滤器,但内置的过滤器无法满足我们的需求时,可以自定义过滤器来实现我们的需求。二、过滤器调用顺序

1、基于行键执行过滤:

boolean filterRowKey(byte[] buffer, int offset, int length);

如果行需要被过滤掉(不出现在结果集合中),返回true,反之返回false(也就是需要返回客户端)。

2、如果该行没有被第1步给过滤掉,接着调用这个方法处理当前行的每个KeyValue对象:

ReturnCode filterKeyValue(KeyValue v);

返回的ReturnCode决定该KeyValue对象将要发送的什么事情。

3、在第2步过滤KeyValue对象后,接着是这个方法:

void filterRow(List kvs);

这个方法被传入成功通过过滤的KeyValue对象列表(发送给客户端的列表)。倘若这个方法访问到这个列表,此时可以在这个列表中进行任何转换或运算。

4、如果还想过滤掉某些行,此时这个方法再一次提供了这个机会:

boolean filterRow();

返回true,将过滤掉正在计算的行。(不返回给客户端)

5、通过在过滤器中构造逻辑来提早停止一次扫描。就是这个方法:

boolean filterAllRemaining();

这是过滤器过滤过程中最后调用的一个方法。

void reset():重置过滤器

三、自定义过滤器

1、继承FilterBase(可以少些点模板代码),并实现其中的方法filterKeyValue()、filterRow()、reset()、toByteArray()、parseFrom();其中的parseFrom父类中没有,直接编写方法即可,parseFrom方法前面如下:

    public static Filter parseFrom(final byte[] pbBytes)throws DeserializationException

2、编写protobuf描述文件(*.proto)

3、使用protobuf编译定义的protobuf描述文件:

    protoc -I=./ --java_out=../java

    -I: 指定proto描述文件的父目录

    --java_out: 指定java的类路径

4、将自定义的filter打包并上传到regionserver上(可以直接放入到lib目录下,也可以在hbase-env.sh目录中导入:export HBASE_CLASSPATH=custom-filter.jar目录)

5、在需要使用的地方导入自定义的filter

四、总结

以上就是在HBase中自定义过滤器的全过程,可以看到还是比较简单的,简单的背后是HBase架构巧妙的设计的原因。这样我们就可以按照自己的需求来定义自己的过滤器。其中需要使用ptotobuf来进行编译描述文件。

扫码关注“破极大数据”,和破极一起学习大数据,努力年薪百万,走上人生巅峰!

5c10839e77aac96346acb6363f207e05.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值