cloudera hbase 1.2.0集群上的Hbase自定义过滤器

时间:2017-05-16 09:47:34

标签: filter hbase cloudera

我正在尝试将自定义过滤器部署到我的hbase群集。根据cloudera docs [1],默认情况下应启用过滤器jar的动态加载。

我的hbase.rootdir是/hbase

要部署我的自定义过滤器jar,我在hdfs中创建了目录/hbase/lib并将我的jar放入其中。然后我尝试使用spark-hbase作业中的自定义过滤器:

object MyFilterTest {
  def main(args: Array[String]): Unit = {
    [...]
     val filter = new MyFilter()

     val scan = new Scan()
     scan.setFilter(filter)

     try {
       val rdd = hbaseContext.hbaseRDD(TableName.valueOf("some_table"), scan)
       val rowKeys = rdd.map(tuple => Bytes.toString(tuple._1.get))
       rowKeys.saveAsTextFile(outputPath)
     } finally {
       sparkContext.stop()
     }
   }
 }

但它失败了,因为ClassNotFoundException声明无法找到MyFilter。 要研究我将日志级别设置为DEBUG并在日志中查找org.apache.hbase.util.DynamicClassLoader条目,但根本找不到任何条目。由于这个事实,我试图明确地设置相关设置。在hbase-site.xml安全阀中,我把这个配置:

<property>
  <name>hbase.dynamic.jars.dir</name>
  <value>hdfs://myhdfs.host:8020/hbase/lib</value>
  <final>true</final>
</property>
<property>
  <name>hbase.local.dir</name>
  <value>/tmp/hbase-root/local</value>
  <final>true</final>
</property>
<property>
  <name>hbase.use.dynamic.jars</name>
  <value>true</value>
  <final>true</final>
</property>

但是,它仍然没有用,并且没有日志表明hbase甚至试图从hdfs加载jar。

我忘了配置吗?

[1] https://www.cloudera.com/documentation/enterprise/5-8-x/topics/admin_hbase_filtering.html

0 个答案:

没有答案