运行 pig 0.7.0 错误:错误 2998:未处理的内部错误

Posted

技术标签:

【中文标题】运行 pig 0.7.0 错误:错误 2998:未处理的内部错误【英文标题】:run pig 0.7.0 error : ERROR 2998: Unhandled internal error 【发布时间】:2013-05-29 02:43:33 【问题描述】:

我必须将 pig 连接到一个与 Hadoop 0.20.0 相比略有变化的 hadoop。我选择 pig 0.7.0,并通过

设置 PIG_CLASSPATH
export PIG_CLASSPATH=$HADOOP_HOME/conf

运行pig的时候报错如下:

ERROR org.apache.pig.Main - ERROR 2999: Unexpected internal error. Failed to create DataStorage

所以,我复制 $HADOOP_HOME 中的 hadoop-core.jar 以覆盖 $PIG_HOME/lib 中的 hadoop20.jar,然后是“ant”。现在,我可以运行 pig,但是当我使用 dumpstore 时,另一个错误:

Pig Stack Trace
---------------
ERROR 2998: Unhandled internal error. org.apache.hadoop.mapreduce.lib.output.FileOutputFormat.setOutputPath(Lorg/apache/hadoop/mapreduce/Job;Lorg/apache/    hadoop/fs/Path;)V

java.lang.NoSuchMethodError: org.apache.hadoop.mapreduce.lib.output.FileOutputFormat.setOutputPath(Lorg/apache/hadoop/mapreduce/Job;Lorg/apache/hadoop/fs/   Path;)V
    at org.apache.pig.builtin.BinStorage.setStoreLocation(BinStorage.java:369)
    ...
    at org.apache.pig.tools.grunt.Grunt.run(Grunt.java:75)
    at org.apache.pig.Main.main(Main.java:357)
================================================================================

有没有人遇到过这个错误,还是我的编译方式不对? 谢谢。

【问题讨论】:

【参考方案1】:

有一个关于此问题的部分in the Pig FAQ 应该可以让您很好地了解问题所在。以下是本页的大纲:

这通常发生在您连接非标准 Apache hadoop 20.2 版本的 hadoop 集群时。 Pig 在发行版中捆绑了标准的 hadoop 20.2 jars。如果要连接到其他版本的 hadoop 集群,则需要将捆绑的 hadoop 20.2 jar 替换为兼容的 jar。你可以试试:

    做“蚂蚁” 从您的 hadoop 安装中复制 hadoop jar 以覆盖 ivy/lib/Pig/hadoop-core-0.20.2.jar 和 ivy/lib/Pig/hadoop-test-0.20.2.jar 再做一次“蚂蚁” cp pig.jar 覆盖 pig-*-core.jar

其他一些技巧也是可能的。您可以使用“bin/pig -secretDebugCmd”来检查 Pig 的命令行。确保您使用的是正确版本的 hadoop。

正如本常见问题解答部分所述,如果没有任何效果,我建议您在 0.9.1 之后升级到最新版本的 Pig,Pig 0.7 有点旧。

【讨论】:

好的,我用的是pig 0.9.2,按照你的建议重新编译了,但是又报错:ERROR pig.Main: ERROR 2998: Unhandled internal error. org.apache.hadoop.util.GenericOptionsParser.getConfiguration()Lorg/apache/hadoop/conf/Configuration;【参考方案2】:

Pig(核心)jar 有一个捆绑 Hadoop 依赖项,它可能与您要使用的版本不同。如果您有旧版 Pig ( 没有 Hadoop:

cd $PIG_HOME
ant jar-withouthadoop
cp $PIG_HOME/build/pig-x.x.x-dev-withouthadoop.jar $PIG_HOME

Then start Pig:
cd $PIG_HOME/bin
export PIG_CLASSPATH=$HADOOP_HOME/hadoop-core-x.x.x.jar:$HADOOP_HOME/lib/*:$HADOOP_HOME/conf:$PIG_HOME/pig-x.x.x-dev-withouthadoop.jar; ./pig

较新的 Pig 版本包含预构建的无 Hadoop 版本(请参阅this 票证),因此您可以跳过构建过程。此外,当您运行 pig 时,它将从 PIG_HOME 而不是捆绑版本中获取 withouthadoop jar,因此您无需添加 withouthadoop.jar 到 PIG_CLASSPATH 或者(前提是您从 $PIG_HOME/bin 运行 Pig)

..回到你的问题: Hadoop 0.20 及其修改的变体(0.20-append?)甚至可以与最新的 Pig 发行版(0.11.1)一起工作: 您只需要执行以下操作:

unpack Pig 0.11.1
cd $PIG_HOME/bin
export PIG_CLASSPATH=$HADOOP_HOME/hadoop-core-x.x.jar:$HADOOP_HOME/lib/*:$HADOOP_HOME/conf; ./pig

如果你仍然得到“Failed to create DataStorage”,那么就像 Charles Menguy 建议的那样,用 -secretDebugCmd 开始 Pig 是值得的,这样你 可以查看 Pig 是否获得了正确的 Hadoop 版本..等等。

【讨论】:

我必须使用与 Hadoop 0.20.0 相比略有变化的 hadoop。所以,我的问题是我应该选择哪个版本的 pig 以及如何编译它来连接这个 hadoop。你有什么想法吗? @DavidChuBuaa 请看我重写的答案 谢谢。你的方法我试过了,还不行。可能我用的hadoop和hadoop标准版本相比有很大的变化,接下来我会尝试重写pig来匹配hadoop。 @DavidChuBuaa 在不知道您使用的确切 Hadoop 版本的情况下,我无法帮助您进一步了解。如果您碰巧使用任何“标准”版本(> 0.20.0),那么我描述的步骤应该可以工作。【参考方案3】:

你记得从/usr/local/bin 运行start-all.sh 吗?我遇到了同样的问题,我基本上回顾了配置 Hadoop 本身的步骤。我现在可以使用 Pig。

【讨论】:

以上是关于运行 pig 0.7.0 错误:错误 2998:未处理的内部错误的主要内容,如果未能解决你的问题,请参考以下文章

Pig 安装错误:错误 pig.Main:错误 2998:未处理的内部错误

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

Pig ERROR 2998:未处理的内部错误(错误名称 MY_CLASS_NAME)

猪 0.13.0 中的错误 2998

Pig错误:ERROR 2998: Unhandled internal error. Found interface jline.Terminal, but class was expected(示

Pig 0.7.0 错误 2118:无法在 Hadoop 1.2.1 上创建输入拆分