HBase过滤器 - 如何在HBase服务器端动态上传过滤器

时间:2014-06-10 14:21:01

标签: hbase

我使用HBase 0.94.20。我没有找到如何在HBase服务器端提供和执行自定义HBase Filter。阅读https://issues.apache.org/jira/browse/HBASE-1936,我知道现在可以这样做,而无需在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)

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

谢谢

1 个答案:

答案 0 :(得分:0)

假设将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,以确保其他人没有更改默认的根目录。选中hbase.dynamic.jars.dir