我必须将猪连接到一个hadoop,它从Hadoop 0.20.0稍微改变一下。我选择猪0.7.0,然后设置PIG_CLASSPATH
export PIG_CLASSPATH=$HADOOP_HOME/conf
当我跑猪时,报告错误如下:
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”。现在,我可以运行猪,但是当我使用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)
================================================================================
有没有人遇到过这个错误,或者我的编译方式不对? 感谢。
答案 0 :(得分:0)
有一个关于此问题in the Pig FAQ的部分,它可以让您知道出了什么问题。以下是本页的摘要:
当您连接除标准Apache hadoop 20.2版本之外的hadoop集群时,通常会发生这种情况。 Pig捆绑标准hadoop 20.2罐释放。如果要连接到其他版本的hadoop集群,则需要使用兼容的jar替换捆绑的hadoop 20.2 jar。你可以尝试:
其他一些技巧也是可能的。您可以使用“bin / pig -secretDebugCmd”来检查Pig的命令行。确保使用正确版本的hadoop。
正如本常见问题解答部分所指出的,如果没有任何效果,我建议在0.9.1之后升级到最近版本的Pig,Pig 0.7有点旧。
答案 1 :(得分:0)
Pig(核心)jar有一个捆绑的 Hadoop依赖项,它可能与您要使用的版本不同。如果您有一个旧的Pig版本(<0.9),您可以选择构建一个没有 Hadoop的jar :
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版本包含prebuilt withouthadoop版本(请参阅this票证),因此您可以跳过构建过程。此外,当你运行猪时,它将从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是否获得了正确的Hadoop版本..等等。
答案 2 :(得分:0)
您还记得从start-all.sh
运行/usr/local/bin
吗?我遇到了同样的问题,我基本上回顾了配置Hadoop本身的步骤。我现在可以使用猪了。