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.pathname>
 <value>file:///export/hive/dependencie_lib/dependencie1.jar,file:///export/hive/dependencie_lib/dependencie2.jarvalue>
property>

你可能感兴趣的:(hive,hive,jar,hadoop)