在PIG中为UDF添加依赖jar

3
我有一个UDF,用于对记录进行自定义处理。在eval函数中,我使用第三方jar进行处理。我看到了job jar文件,但它不包括这个依赖项。有没有办法将依赖的jar包包含在job jar中? (为了测试,我在本地模式下运行集群)。
或者我可以使用分布式缓存使依赖的jar包可用于UDF吗?
我尝试在Pig中注册依赖的jar包。对于第一个注册的jar包(所有UDF都打包在其中),我没有遇到问题。但是对于第二个jar包,在UDF尝试访问其中的类时,我遇到了问题。
REGISTER '/home/user/pig/udfrepository/projectUDF.jar'
REGISTER '/home/user/thridpartyjars/xyz.jar';

我在控制台上得到的日志如下:

2013-08-11 10:35:02,485 [Thread-14] WARN  org.apache.hadoop.mapred.LocalJobRunner - job_local_0001
java.lang.NoSuchMethodError: org.xyz.abc.convertToOtherFormat(Lorg/DateTimeZone;)Lorg/DateTime;
        at com.myproject.MyUDF.exec(MyUDF.java:70)

非常感谢您的帮助。

提前致谢。


1
REGISTER 'file:///home/user/pig/udfrepository/projectUDF.jar' 是怎么样的? - Martias
在使用Hive UDF时,我遇到了一些类似的问题,但在使用PIG时没有。也许你参考了这本,对吧? - Martias
当然,它是:joda-time-2.2.jar。 - java_enthu
我同意zsxwing的看法 - 这可能是版本冲突。Hadoop使用的任何库都将在比您在pig脚本中注册的任何内容更高的类加载器中加载。最有可能的是,您需要针对旧版本的joda编译您的UDF。 - seedhead
好的,问题已经解决了。 - java_enthu
显示剩余3条评论
1个回答

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接