Pig UDF 中的 Java 依赖项

Posted

技术标签:

【中文标题】Pig UDF 中的 Java 依赖项【英文标题】:Java dependencies in Pig UDF 【发布时间】:2015-06-27 18:54:36 【问题描述】:

我写了一个使用Joda Time 的UDF。我将它作为依赖项包含在 pom.xml 中。当我运行我的猪脚本时,我得到了错误

ERROR 2998: Unhandled internal error. org.joda.time.LocalDate.parse(Ljava/lang/String;)Lorg/joda/time/LocalDate;

我对 java、maven 和 hadoop 还是很陌生。如何将 joda 捆绑到我在集群上运行的 jar 中(如 c/c++ 中的静态链接)?

这是 NOT how to include external jar file using PIG 的副本,因为我不能使用 -D 选项并且在 pig 脚本中注册 Joda Time 无效。

【问题讨论】:

how to include external jar file using PIG 的可能副本 没有我的 UDF 包含并运行。 您的代码抛出了 java.lang.NoClassDefFoundError 异常。找到丢失的 jar(joda-time),然后将其作为运行时依赖项包含在您的 pig 脚本中。 @elcodedocle 参数 -D 在我的 macine (0.13) 上不被接受。 一个明显的 ***itis 案例。 Down and closevoting,同时以傲慢的方式忽略问题的内容,指代另一个包含一些相似词的显然重复的任务。感谢 Fred 真正阅读了这个问题。 【参考方案1】:

问题是 Pig 带有 Joda 1.6,其中 LocalDate 没有 parse() 方法。最简单和最安全的解决方法是在 maven 中使用 1.6 并使用 1.6 Joda Time 重写您的代码。

【讨论】:

你指的是哪个猪的版本?稍后我会试试的 非常感谢。我花了大约 20 个小时来完成这项工作。互联网上的所有提示都是错误的。 NO 需要传递额外的jar,NO 需要注册一个jar。只需使用正确的 api。您可以详细说明 UDF 如何使用 Pig 的 joda-time,这对我来说仍然是个谜。 (来自 c/c++)

以上是关于Pig UDF 中的 Java 依赖项的主要内容,如果未能解决你的问题,请参考以下文章

运行 Apache Pig 脚本时如何查找 jar 依赖项?

PIG 中 UDF 中的 java.lang.NullPointerException

如何在 build.gradle 中指定“pig-0.13.0-h2.jar”依赖?

JAVA 错误 1070 中的 PIG UDF

Oozie pig action 更改工作 jar 的番石榴依赖项

无法从 Pig 解析 Java UDF 中的方法