【问题标题】:run pig 0.7.0 error : ERROR 2998: Unhandled internal error运行 pig 0.7.0 错误:错误 2998:未处理的内部错误
【发布时间】: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,但是当我使用 dump 或 store 时,另一个错误:

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)
================================================================================

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

【问题讨论】:

    标签: hadoop compilation apache-pig


    【解决方案1】:

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

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

    1. 做“蚂蚁”
    2. 从您的 hadoop 安装中复制 hadoop jar 以覆盖 ivy/lib/Pig/hadoop-core-0.20.2.jar 和 ivy/lib/Pig/hadoop-test-0.20.2.jar
    3. 再做一次“蚂蚁”
    4. 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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-28
      • 2022-08-17
      • 2013-06-16
      相关资源
      最近更新 更多