未找到配置单元 UDF class
Hive UDF class not found
我在 Hive 中需要一个自动递增的整数列,偶然发现了 UDFRowSequence。
我在 IntelliJ 中创建了一个 Maven 项目,添加了 .java
文件,并让 IDE 导入依赖项。然后我 运行 mvn package
,将生成的 .jar
复制到集群节点,并在 Hive 中添加 .jar
资源:
hive> add file udf-row-sequence-1.0-SNAPSHOT.jar;
Added resources: [udf-row-sequence-1.0-SNAPSHOT.jar]
很遗憾,我无法创建临时函数:
hive> create temporary function row_sequence as 'com.alexwoolford.hive.udf.UDFRowSequence';
FAILED: Class com.alexwoolford.hive.udf.UDFRowSequence not found
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.FunctionTask
然而,如果我查看 .jar
文件的内容,我可以看到 class 存在:
jar tf udf-row-sequence-1.0-SNAPSHOT.jar
[...]
com/alexwoolford/hive/udf/UDFRowSequence.class
[...]
你能看出我做错了什么吗?
问题是由于使用 add file
而不是 add jar
引起的,即
add jar udf-row-sequence-1.0-SNAPSHOT.jar;
即使您这样做 "ADD JAR",有时甚至添加 JARS 的顺序也很重要,我在添加 ESRI Hive UDF jar 时遇到了这个问题。
add jar esri-geometry-api-1.2.jar;
add jar spatial-sdk-hive-1.0.3-SNAPSHOT.jar;
有效
add jar spatial-sdk-hive-1.0.3-SNAPSHOT.jar;
add jar esri-geometry-api-1.2.jar;
不起作用
我在 Hive 中需要一个自动递增的整数列,偶然发现了 UDFRowSequence。
我在 IntelliJ 中创建了一个 Maven 项目,添加了 .java
文件,并让 IDE 导入依赖项。然后我 运行 mvn package
,将生成的 .jar
复制到集群节点,并在 Hive 中添加 .jar
资源:
hive> add file udf-row-sequence-1.0-SNAPSHOT.jar;
Added resources: [udf-row-sequence-1.0-SNAPSHOT.jar]
很遗憾,我无法创建临时函数:
hive> create temporary function row_sequence as 'com.alexwoolford.hive.udf.UDFRowSequence';
FAILED: Class com.alexwoolford.hive.udf.UDFRowSequence not found
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.FunctionTask
然而,如果我查看 .jar
文件的内容,我可以看到 class 存在:
jar tf udf-row-sequence-1.0-SNAPSHOT.jar
[...]
com/alexwoolford/hive/udf/UDFRowSequence.class
[...]
你能看出我做错了什么吗?
问题是由于使用 add file
而不是 add jar
引起的,即
add jar udf-row-sequence-1.0-SNAPSHOT.jar;
即使您这样做 "ADD JAR",有时甚至添加 JARS 的顺序也很重要,我在添加 ESRI Hive UDF jar 时遇到了这个问题。
add jar esri-geometry-api-1.2.jar;
add jar spatial-sdk-hive-1.0.3-SNAPSHOT.jar;
有效
add jar spatial-sdk-hive-1.0.3-SNAPSHOT.jar;
add jar esri-geometry-api-1.2.jar;
不起作用