【问题标题】:Apache Phoenix UDF not working on server sideApache Phoenix UDF 在服务器端不起作用
【发布时间】:2018-09-12 03:52:59
【问题描述】:

1 我已经使用自定义 UDF 函数创建了 jar,并将 jar 复制到 dynamic.jar.dir 所以当我使用我的 UDF 函数作为 SELECT 的一部分时,我得到了结果没有问题。

2 但是当函数是WHERE 子句的一部分时,我收到错误,即找不到自定义函数的类。

select PK FROM "my.custom.view" where MY_FUN(ARRAY["COLF"."COL1"], 'SOMEPARAM')  limit 1;

Caused by: org.apache.hadoop.hbase.DoNotRetryIOException: BooleanExpressionFilter failed during reading: java.lang.ClassNotFoundException: com.myCompany.phoenix.MyCustomFunction
    at org.apache.phoenix.util.ServerUtil.createIOException(ServerUtil.java:96)
    at org.apache.phoenix.util.ServerUtil.throwIOException(ServerUtil.java:62)
    at org.apache.phoenix.filter.BooleanExpressionFilter.readFields(BooleanExpressionFilter.java:109)
    at org.apache.phoenix.filter.SingleKeyValueComparisonFilter.readFields(SingleKeyValueComparisonFilter.java:133)
    at org.apache.hadoop.hbase.util.Writables.getWritable(Writables.java:131)
    at org.apache.hadoop.hbase.util.Writables.getWritable(Writables.java:101)
    at org.apache.phoenix.filter.SingleCQKeyValueComparisonFilter.parseFrom(SingleCQKeyValueComparisonFilter.java:50)
    ... 16 more

base-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://localhost:57000/user/hbase</value>
    </property>
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>localhost</value>
    </property>
    <property>
        <name>hbase.zookeeper.property.clientPort</name>
        <value>21081</value>
    </property>

    <property>
        <name>hbase.client.keyvalue.maxsize</name>
        <value>0</value>
    </property>

    <!-- SEP is basically replication, so enable it -->
    <property>
        <name>hbase.replication</name>
        <value>true</value>
    </property>

    <property>
        <name>hbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily</name>
        <value>128</value>
    </property>

    <property>
        <name>hbase.fs.tmp.dir</name>
        <value>/tmp/hbase</value>
    </property>

<property>
    <name>phoenix.functions.allowUserDefinedFunctions</name>
    <value>true</value>
  </property>
  <property>
    <name>hbase.dynamic.jars.dir</name>
    <value>${hbase.rootdir}/lib/</value>
  </property>

<property>
  <name>fs.hdfs.impl</name>
  <value>org.apache.hadoop.hdfs.DistributedFileSystem</value>
</property>

</configuration>

手动添加jar:

hdfs dfs -copyFromLocal -f /my.jar hdfs:///user/hbase/lib/my.jar

函数创建使用:

CREATE FUNCTION MY_FUN(BINARY[], VARCHAR) RETURNS BOOLEAN as 'com.myCompany.phoenix.MyCustomFunction' using jar 'hdfs://localhost:57000/user/hbase/lib/my.jar';

【问题讨论】:

    标签: apache hbase user-defined-functions phoenix


    【解决方案1】:

    当我从 4.7 升级到 Phoenix 5.0 时,我遇到了类似的情况。我收到一个异常,指出由于权限问题,我现在需要将我的 UDF .jar 放入 /apps/hbase/data/lib。在旧环境中,我能够使用 /apps/hbase/lib 目录摆脱困境。也许这也发生在你身上,但它并没有提醒你注意新的路径变化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-22
      • 1970-01-01
      • 2023-01-11
      • 2015-03-20
      • 2016-12-05
      • 2015-12-19
      • 2012-11-05
      相关资源
      最近更新 更多