2010-05-14 336 views
7

我嘗試使用System.out.println()打印輸出值,但它們不會出現在控制檯上。如何使用Hadoop打印出map/reduce應用程序中的值以進行調試?調試hadoop應用程序

感謝, 迪帕克。

+1

這裏指的https://stackoverflow.com/questions/23235343/debugging -hadoop-in-eclipse – Mash 2015-07-28 10:29:27

回答

5

頁@SquareCog點是一個很好的信息源上調試MapReduce工作,一旦你運行它在雲上。

在你達到這一點,雖然你應該考慮爲你的映射器和減壓器編寫單元測試,這樣你就可以驗證的基本邏輯工作。如果您對單元測試感興趣,可以測試您的地圖並減少邏輯,請檢查mrunit,它的工作方式與JUnit類似。

+1

嗯,我指的那個頁面是關於MRUnut的談話:)但是肯定的。 – SquareCog 2010-05-17 21:19:41

+0

@SquareCog - 我的壞,我只是假設我知道你鏈接到哪個頁面。它是一個很好的信息來源:+) – 2010-05-18 03:41:01

3

我想補充一點,您可以使用CountersHadoop JavaDoc進行調試。例如。如果你想檢查,你的程序中的特定行通過的頻率。

0

System.out.println不直接指向終端,而是寫入日誌文件。日誌文件默認位於Hadoop目錄中。所以你可以輸入終端 cat /hadoop-homedirectory/logs/userlogs/jobID/attemptID/stdout 你也可以通過網頁界面進入。輸入ip:50070/logs/userlogs。

0

如果使用MRUnit & ApprovalTests是很容易打印出圖的過程中減少工作。 有一個關於它在這裏的視頻:

HadoopApprovals.verifyMapReduce(new WordCountMapper(), 
          new WordCountReducer(), 0, "cat cat dog"); 

時會產生輸出http://t.co/leExFVrf

例如代碼:

[cat cat dog] 
-> maps via WordCountMapper to -> 
(cat, 1) 
(cat, 1) 
(dog, 1) 

-> reduces via WordCountReducer to -> 
(cat, 2) 
(dog, 1)