2013-06-04 38 views
0

我是Linux和Apache Pig的新手。我正在學習本教程學習豬: http://salsahpc.indiana.edu/ScienceCloud/pig_word_count_tutorial.htm豬初學者的例子[意外錯誤]

這是一個基本的字數統計的例子。數據文件'input.txt'和程序文件'wordcount.pig'在Wordcount軟件包中,鏈接到站點上。

我已經在本地機器上下載了Pig 0.11.1,以及HadoopJava 6

當我下載Wordcount軟件包時,它將我帶到「tar.gz」文件。我對這種類型不熟悉,不確定如何提取它。它包含文件'input.txt','wordcount.pig'和一個自述文件。我將「input.txt」保存到我的桌面。我不確定在哪裏保存wordcount.pig,並決定在shell中逐行輸入命令。

我在本地模式下運行豬如下:pig -x local

,然後我就複製粘貼在繁重的wordcount.pig腳本的每一行>提示是這樣的:

A = load '/home/me/Desktop/input.txt'; 

B = foreach A generate flatten(TOKENIZE((chararray)$0)) as word; 

C = group B by word; 

D = foreach C generate COUNT(B), group; 

轉儲d ;

這會產生以下錯誤: ...

Retrying connect to server: localhost/127.0.0.1:8021. Already tried 9 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS) 

ERROR org.apache.pig.tools.grunt.Grunt - ERROR 2043: Unexpected error during execution. 

我的問題:

1. 我應該保存 'input.txt中' 和原 'wordcount.pig' 腳本目錄中的一些特殊文件夾pig-0.11.1?也就是說,在pig-0.11.1中創建一個名爲word的文件夾,並在其中放入'wordcount.pig'和'input.txt',然後從grunt>提示符中鍵入「wordcount.pig」? 一般來說,如果我有數據說'dat.txt'和一個腳本說'program.pig',我應該在哪裏保存它們以從grunt shell運行'program.pig'?我認爲他們都應該去豬-0.11.1,所以我可以做$ pig -x local wordcount.pig,但我不確定。

2. 爲什麼我不能像我試圖一樣運行腳本? 我已經在load語句中指定了文件'input.txt'的位置。 那麼,爲什麼它不只是逐行運行命令並將D的內容轉儲到我的屏幕?

3. 當我嘗試使用$豬的MapReduce模式下運行豬,它給出了這樣的錯誤:

重試策略是RetryUpToMaximumCountWithFixedSleep(maxRetries = 10,休眠時間= 1秒) 2013年6月3日23 :57:06,956 [main] ERROR org.apache.pig.Main - 錯誤2999:意外的內部錯誤。無法創建DataStorage

回答

3

此錯誤表明Pig無法連接到Hadoop以運行作業。你說你已經下載Hadoop - 你有沒有安裝它?如果你已經安裝了它,你是否按照它的文檔啓動了它 - 是否運行bin/start-all.sh腳本?使用-x local告訴Pig使用本地文件系統而不是HDFS,但它仍然需要運行Hadoop實例才能執行。在嘗試運行Pig之前,請按照Hadoop文檔來設置本地「集羣」,並確保您的設備已啓動並正在運行。

+0

感謝您的回答。你說得對,Hadoop namenode似乎有些問題。但是我仍然有一個關於如何從grunt shell運行腳本wordcount.pig的一般問題。我應該在目錄 - pig-0.11.1中擁有數據input.txt和wordcount.pig嗎?如果我想運行豬腳本(在本地模式下),我應該在哪裏保存輸入數據文件和腳本本身?再次感謝您的回答! – user2450223

+0

無論你想要什麼,你都可以做到。如果'LOAD'語句中的路徑是相對的,那麼當你啓動Grunt時,它會查看你所在的目錄。在你的例子中,路徑是絕對的,所以沒關係。如果您複製並粘貼腳本,當然它保存的位置並不重要;你也可以用'RUN/path/to/script;'來運行它。如果你使用絕對路徑,你永遠不會有問題。 –

+0

謝謝。爲了讓它完全直觀:我可以在grunt shell提示符下說RUN /home/me/Desktop/wordcount.pig?我還可以在grunt shell提示符下鍵入:grunt> cd〜/ Desktop,然後grunt> wordcount.pig,假設input.txt和wordcount.pig都在Desktop中?再次感謝您的答案! – user2450223

0

2043當hadoop和pig無法相互通信時發生錯誤。

不要做一個右鍵點擊 - >提取這裏,當處理tar.gz文件。

U shud在提取終端時總是在終端上執行tar -xzvf * .tar.gz。

我注意到豬在右鍵點擊豬時沒有正確安裝。 .tar.gz文件並在此處選擇摘錄。做焦油-xzvf豬是很好的。 .tar.gz來自終端。

確保你在執行pig -x local類型的命令之前運行Hadoop。

如果妳想要從咕嚕>提示符下,使用運行* .pig文件: 咕嚕> EXEC * .pig

如果妳希望外界咕嚕>提示符下,使用運行豬文件: $豬-x本地* .pig