hbase过滤器filter及自定义filter

简介: hbase过滤器filter及自定义filter1.filter源码实现:hbase的filter定义在protobuf中(filter.proto文件)。

hbase过滤器filter及自定义filter

1.filter源码实现:

hbase的filter定义在protobuf中(filter.proto文件)。如:

message QualifierFilter {
    required CompareFilter compare_filter = 1;
}

message RandomRowFilter {
    required float chance = 1;
}

message RowFilter {
    required CompareFilter compare_filter = 1;
}

message SingleColumnValueExcludeFilter {
    required SingleColumnValueFilter single_column_value_filter = 1;
}

message SingleColumnValueFilter {
    optional bytes column_family = 1;
    optional bytes column_qualifier = 2;
    required CompareType compare_op = 3;
    required Comparator comparator = 4;
    optional bool filter_if_missing = 5;
    optional bool latest_version_only = 6;
}

等。。。各种内置filter定义。
具体filter实现在org.apache.hadoop.hbase.filter包中。
如:


image

2.自定义实现filter:

需要继承filterBase类,FilterBase类说明:

/**
 * Abstract base class to help you implement new Filters.  Common "ignore" or NOOP type
 * methods can go here, helping to reduce boiler plate in an ever-expanding filter
 * library.
 * <p>
 * If you could instantiate FilterBase, it would end up being a "null" filter -
 * that is one that never filters anything.
 */
public abstract class FilterBase extends Filter {
需要重写的方法:

    //为每个新行重置过滤器
    @Override
    public void reset() throws IOException {
    }
    
    //检查行键,offset为偏移量,不是0
    @Override
    public boolean filterRowKey(byte[] buffer, int offset, int length) throws IOException {
        return false;
    }
    
    //true,则用于结束扫描操作
    @Override
    public boolean filterAllRemaining() throws IOException {
        return false;
    }
    @Override
    public Cell transformCell(Cell v) throws IOException {
        // Old filters based off of this class will override KeyValue transform(KeyValue).
        // Thus to maintain compatibility we need to call the old version.
        return transform(KeyValueUtil.ensureKeyValue(v));
    }
    @Override
    public void filterRowCells(List<Cell> ignored) throws IOException {
    }
    @Override
    public boolean hasFilterRow() {
        return false;
    }
    @Override
    public boolean filterRow() throws IOException {
        return false;
    }
    public Cell getNextCellHint(Cell currentKV) throws IOException {
        // Old filters based off of this class will override KeyValue getNextKeyHint(KeyValue).
        // Thus to maintain compatibility we need to call the old version.
        return getNextKeyHint(KeyValueUtil.ensureKeyValue(currentKV));
    }
    public boolean isFamilyEssential(byte[] name) throws IOException {
        return true;
    }
    public static Filter createFilterFromArguments(ArrayList<byte[]> filterArguments) {
        throw new IllegalArgumentException("This method has not been implemented");
    }
    public String toString() {
        return this.getClass().getSimpleName();
    }
    public byte[] toByteArray() throws IOException {
        return new byte[0];
    }
    boolean areSerializedFieldsEqual(Filter other) {
        return true;
    }

}

filter内部方法执行顺序:


image

3.使用自定义filter:

打成jar包,要在hbase-env.sh中指明路径。
export  HBASE_CLASSPATH="/hbase/target/hbase-customfilter.jar",然后就可以在客户端中使用它了。

也可以在源码中直接添加filter,有必要的话。
相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
&nbsp; 相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情:&nbsp;https://cn.aliyun.com/product/hbase &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
4月前
|
分布式计算 Hadoop Shell
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
75 3
|
Java 分布式数据库 索引
HBASE 比较器和过滤器
HBASE 比较器和过滤器
200 0
|
分布式数据库 Hbase
【HBase】(十)过滤器2
【HBase】(十)过滤器2
230 0
【HBase】(十)过滤器2
|
分布式数据库 API 索引
【HBase】(十)过滤器1
【HBase】(十)过滤器1
259 0
【HBase】(十)过滤器1
|
Java 分布式数据库 Ruby
HBase Filter 过滤器之 Comparator 原理及源码学习
HBase所有的比较器实现类都继承于父类ByteArrayComparable,而ByteArrayComparable又实现了Comparable接口;不同功能的比较器差别在于对父类compareTo()方法的重写逻辑不同。 下面分别对HBase Filter默认实现的七大比较器一一进行介绍。 1. BinaryComparator 介绍:二进制比较器,用于按字典顺序比较指定字节数组。 先看一个小例子: public class BinaryComparatorDemo { public static void main(String[] args) {
512 0
|
Java Shell 分布式数据库
HBase Filter 过滤器之RowFilter详解
前言:本文详细介绍了HBase RowFilter过滤器Java&Shell API的使用,并贴出了相关示例代码以供参考。RowFilter 基于行键进行过滤,在工作中涉及到需要通过HBase Rowkey进行数据过滤时可以考虑使用它。比较器细节及原理请参照之前的更文:HBase Filter 过滤器之比较器 Comparator 原理及源码学习 一。Java Api 头部代码 public class RowFilterDemo { private static boolean isok = false; private static String tableName
624 0
|
Shell 分布式数据库 API
|
分布式数据库 Hbase 设计模式
|
分布式数据库 Hbase API