【问题标题】:HBase filter - How to dynamically upload filter on HBase server sideHBase 过滤器 - 如何在 HBase 服务器端动态上传过滤器
【发布时间】:2014-06-10 14:21:00
【问题描述】:

我使用 HBase 0.94.20。我没有找到如何使自定义 HBase 过滤器可用并在 HBase 服务器端执行。阅读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);

谢谢

【问题讨论】:

    标签: hbase


    【解决方案1】:

    假设 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

    【讨论】:

      猜你喜欢
      • 2012-03-07
      • 2011-07-17
      • 1970-01-01
      • 2017-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多