HBase筛选器-如何在HBase服务器端动态上载筛选器

HBase筛选器-如何在HBase服务器端动态上载筛选器,hbase,Hbase,我使用HBase 0.94.20。我找不到如何使自定义HBase筛选器在HBase服务器端可用并执行。通过阅读,我了解到现在不必手动复制包含HBase服务器端过滤器的jar就可以完成这项工作。但是经过几个小时的谷歌搜索和测试,我没有找到如何将这个自定义过滤器从我的java代码发送到HBase服务器端 我在HBase日志中不断出现错误: java.lang.RuntimeException: Can't find class com.company.MyHBaseFilter at org.apa

我使用HBase 0.94.20。我找不到如何使自定义HBase筛选器在HBase服务器端可用并执行。通过阅读,我了解到现在不必手动复制包含HBase服务器端过滤器的jar就可以完成这项工作。但是经过几个小时的谷歌搜索和测试,我没有找到如何将这个自定义过滤器从我的java代码发送到HBase服务器端

我在HBase日志中不断出现错误:

java.lang.RuntimeException: Can't find class com.company.MyHBaseFilter
at org.apache.hadoop.hbase.util.Classes.createWritableForName(Classes.java:121)
at org.apache.hadoop.hbase.client.Scan.readFields(Scan.java:642)
at org.apache.hadoop.hbase.io.HbaseObjectWritable.readObject(HbaseObjectWritable.java:693)
简单来说,这里是基本代码。我应该添加什么才能使MyHBaseFilter中的逻辑在服务器端执行?(注意:MyHBaseFilter扩展了FilterBase)


谢谢

假设hbase配置为分布式模式,并在HDFS上运行:

  • 检查您的hbase conf:$hbase_HOME/conf/hbase-site.xml并找出您的hbase数据的根目录(hbase.rootdir的值)
  • 并使用hadoop cmd将自定义过滤器jar放在${hbase.rootdir}/lib下,这是hbase.use.dynamic.jars的默认位置
如果您使用的是其他人提供的hbase,则可能需要首先在hbase-site.xml中搜索hbase.use.dynamic.jars,以确保其他人未更改默认根目录。检查

Filter filter = new MyHBaseFilter(some_args);
scan.setFilter(filter);
ResultScanner rs = table.getScanner(scan);