hive自定义UDF依赖第三方jar包

上传jar包到HDFS上

hdfs dfs -put xxxx.jar /tmp/hive/

创建永久函数:

create function my_fun as 'com.test.TestUDF' using jar 'hdfs:///tmp/hive/xxxx.jar';

创建临时函数(只对当前窗口的命令行可用):

create temporary function my_fun as 'com.test.TestUDF' using jar 'hdfs:///tmp/hive/xxxx.jar';

报错:

由于自定义的UDF使用的xxxx.jar引入了第三方jar包。在使用UDF函数时会报错。
hive> select my_fun("1234567899","NUMBER");
Added [/tmp/0559eb39-c289-40dc-975f-7edf57c4843f_resources/xxxx.jar] to class path
Added resources: [hdfs:///tmp/hive/xxxx.jar]
FAILED: SemanticException [Error 10014]: Line 1:7 Wrong arguments '"NUMBER"': 
  org.apache.hadoop.hive.ql.metadata.HiveException: 
  Unable to execute method public java.lang.String com.test.TestUDF.evaluate(java.lang.String,java.lang.String) 
  with arguments {1234567899,NUMBER}:com/test/pdc/security/sdk/tass/enums/CryptoFieldType

解决:

方法一:(临时方案,只在当前窗口命令行生效)

将第三方jar包上传到HDFS
hdfs dfs -put dependencie.jar /tmp/hive/
hive命令行添加jar包:
hive> add jar hdfs:///user/hive/dependencie.jar;

方法二:

将UDF中使用的第三方jar包,放到本地的 hive/lib目录下。
在当前服务器使用hive  ,可以正常使用自定义的UDF函数

方法三:

创建一个本地目录,把jar包都放进去。
mkdir /export/hive/dependencie_lib
修改hive-env.sh 增加配置
export HIVE_AUX_JARS_PATH=/export/hive/dependencie_lib

方法四:

创建一个本地目录,把jar包都放进去。
mkdir /export/hive/dependencie_lib
修改hive-site.xml 增加配置,多个jar包用,隔开。
<property>
 <name>hive.aux.jars.path</name>
 <value>file:///export/hive/dependencie_lib/dependencie1.jar,file:///export/hive/dependencie_lib/dependencie2.jar</value>
</property>
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值