我正在尝试编写一个使用UDF的Pig脚本。当我运行它时,我会遇到"Guice创建错误",如"java.lang.NoSuchMethodError"。很明显,我的hadoop环境使用的Guice版本与我使用的不同。我尝试了几种将我的Jar放在前面的方法,例如:
- 注册my.jar
- 将其添加到"PIG_CLASSSPATH"、"HADOOP_CLASSPATH"、"CLASSPATH"的前面
- 已尝试:导出HADOOP_USER_CLASSPATH_FIRST=true
- -Dmapreduce.job.user.classpath.first=true
这些都不起作用!Hadoop版本号:Hadoop2.6.0-cdh5.4.5
这是我的简单脚本:
REGISTER my.jar;
A = LOAD '/tmp/mydir/' AS (line:chararray);
B = FOREACH A generate com.mypackage.udf.MyUdf(line);
dump B;
在REGISTER udf.jar 时提供绝对路径
或
使用额外的jar命令提供了jar。
pig-Dpig.addition.jars=/absolute/path/of/jar/my.jar[your_other_paramter]
您还可以在脚本顶部定义UDF的名称,这样您就不必每次都提供完整的UDF名称。
REGISTER /absolute/path/of/my.jar;
define MyUDF com.mypackage.udf.MyUdf(line)
A = LOAD '/tmp/mydir/' AS (line:chararray);
B = FOREACH A MyUDF(line);
dump B;