Apache Pig:Guice 创建错误。 java.lang.NoSuchMethodError

Posted

技术标签:

【中文标题】Apache Pig:Guice 创建错误。 java.lang.NoSuchMethodError【英文标题】:Apache Pig: Guice creation errors. java.lang.NoSuchMethodError 【发布时间】:2016-04-07 18:14:12 【问题描述】:

我正在尝试编写一个使用我的 UDF 的 Pig 脚本。当我运行它时,我遇到了“Guice 创建错误”,例如“java.lang.NoSuchMethodError”。显然,我的 hadoop 环境使用的 Guice 版本与我使用的不同。我尝试了几种将我的罐子放在前面的方法,例如:

    注册我的.jar 将其添加到前面“PIG_CLASSPATH”、“HADOOP_CLASSPATH”、“CLASSPATH”。 已尝试:导出 HADOOP_USER_CLASSPATH_FIRST=true -Dmapreduce.job.user.classpath.first=true

这些都不起作用! Hadoop 版本号:Hadoop 2.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;

【问题讨论】:

【参考方案1】:

在注册 udf.jar 时提供绝对路径

使用附加的 jar 命令提供了 jar。

-Dpig.additional.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;

【讨论】:

没有用。 Pig 中的 -libjars 相当于什么?

以上是关于Apache Pig:Guice 创建错误。 java.lang.NoSuchMethodError的主要内容,如果未能解决你的问题,请参考以下文章

Pig 错误:无法找到或加载主类 org.apache.pig.Main

错误包 org.apache.pig.FilterFunc 不存在

Apache Pig - 错误 2118:对于输入字符串:“4f8:0:a111::add:9898”

Pig 0.13 错误 2998:未处理的内部错误。 org/apache/hadoop/mapreduce/task/JobContextImpl

猪拉丁语:错误 org.apache.pig.tools.grunt.Grunt - 错误 1045

Windows 上的 Apache Pig 设置错误