未找到配置单元 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;

不起作用