2013-05-29 33 views
2

我必須將豬連接到Hadoop 0.20.0稍有變化的hadoop。我通過運行豬0.7.0錯誤:錯誤2998:未處理的內部錯誤

export PIG_CLASSPATH=$HADOOP_HOME/conf 

選擇豬0.7.0,並設置PIG_CLASSPATH當我運行豬,錯誤報告是這樣的:

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」。現在,我可以跑豬,但是當我使用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) 
================================================================================ 

有誰遇到了這個錯誤,或者是我的編譯方式不正確? 謝謝。

回答

0

有一個關於這個問題的部分in the Pig FAQ哪些應該給你一個好主意有什麼問題。以下是摘自此頁面的摘要:

這通常發生在連接除標準Apache hadoop 20.2版本以外的hadoop羣集時。豬捆綁標準哈託普20.2罐子釋放。如果你想連接到其他版本的hadoop集羣,你需要用兼容的jar來替換捆綁的hadoop 20.2 jar。你可以試試:

  1. 做 「蟻族」
  2. 副本Hadoop的罐子從您的Hadoop安裝覆蓋常春藤/ lib目錄/豬/ Hadoop的核心0.20.2.jar和常春藤/ lib目錄/豬/ hadoop-測試0.20.2.jar
  3. 做 「蟻族」 再次
  4. CP pig.jar覆蓋豬 - * - core.jar添加

一些其他的招數也是可能的。您可以使用「bin/pig -secretDebugCmd」來檢查Pig的命令行。確保你使用的是正確版本的hadoop。

正如本FAQ部分所指出的那樣,如果什麼都行不通,我會建議在0.9.1之後升級到Pig的最新版本,Pig 0.7有點老了。

+0

好的,我使用豬0.9.2,並重新編譯爲您的建議,但另一個錯誤報告:'錯誤pig.Main:錯誤2998:未處理的內部錯誤。 org.apache.hadoop.util.GenericOptionsParser.getConfiguration()Lorg/apache/hadoop/conf/Configuration;' – DavidChuBuaa

0

豬(核心)罐子有捆綁 Hadoop依賴關係,它可能不同於您要使用的版本。如果你有一箇舊豬版本(< 0.9)中,你可以選擇,建立一個罐子沒有的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 


較新的豬版本包含預建withouthadoop版本(見this票),因此您可以跳過構建過程。此外,當你運行豬它將搭載由PIG_HOME而不是捆綁的版本withouthadoop罐子,所以你不需要withouthadoop.jar 添加到PIG_CLASSPATH是(提供,您從$PIG_HOME/bin運行豬)

..回到你的問題:
即使使用最新的Pig發行版(0.11。),Hadoop 0.20及其修改後的版本(0.20-append?)也可以工作。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」這是值得下手豬與-secretDebugCmd查爾斯Menguy建議,讓你 可以看到豬是否得到正確的Hadoop版本..等等。

+0

我必須使用hadoop,它從Hadoop 0.20.0改變了一點。所以,我的問題是我應該選擇哪種版本的豬,以及如何編譯它來連接這個hadoop。你有什麼想法? – DavidChuBuaa

+0

@DavidChuBuaa請看我的重寫的答案 –

+0

謝謝。我曾嘗試過你的方法,但它還沒有工作。也許我使用的hadoop從hadoop標準版本改變了很多,接下來我會嘗試重寫pig來匹配hadoop。 – DavidChuBuaa

0

您是否記得從/usr/local/bin運行start-all.sh?我遇到了同樣的問題,我基本上回顧了配置Hadoop本身的步驟。我現在可以使用豬。

相關問題