2011-12-27 30 views
2

我想知道: 如果同一個作業提交兩次,hadoop mapreduce是否會重新處理整個數據集? 例如:單詞計數示例計算輸入文件夾中每個文件中每個單詞的出現次數。 如果我要將文件添加到該文件夾​​,並重新運行字數mapreduce作業,初始文件是否會被重新讀取,重新配置和重新還原?Hadoop mapreduce是否重新處理整個數據集

如果是這樣,有沒有辦法配置hadoop來處理新文件並將其添加到以前的mapreduce運行的「摘要」中。

任何想法/幫助將不勝感激。

+0

謝謝大家的幫助!所以我想答案在於設計系統是正確的。再次感謝大家的幫助。 – uri 2011-12-28 06:41:42

回答

3

如果我要爲該文件夾添加一個文件,並重新運行字數mapreduce作業,初始文件是否會被重新讀取,重新配置和重新還原?

Hadoop將在再次運行時重新處理整個數據。作業成功完成後,映射器的輸出和臨時數據將被刪除。

如果是這樣,是否有配置hadoop來處理新文件並將其添加到以前的mapreduce運行的「摘要」的方法。

的Hadoop作爲,是如方案不支持,但你可以寫一個檢查未處理或新的文件和一個對自定義OUTPUTFORMAT將數據從先前的運行添加到總結的自定義InputFormat。否則,一旦作業已經運行,要處理的新文件可以放在不同的輸入文件夾中,讓作業僅處理新文件夾中的文件。

檢查此article創建自定義輸入/輸出格式。

我不確定具體的要求,但您也可以考慮處理數據流的框架,如HStreaming,S4,Twitter Storm等。

0

我同意Praveen所說的一切。我將提供一個特定的方法,我親自在集羣上處理這個問題。


當我將文件壓入HDFS時,我根據系統時鐘將它們放入文件夾中。

$ hadoop fs -put thisfile1249.txt /tmp/ 
$ hadoop fs -mv /tmp/thisfile1249.txt `date "+/data/%Y/%m/%d/%H/%M/"` 

讓我們來看看有什麼路徑將會是什麼樣:

$ echo `date "+/data/%Y/%m/%d/%H/%M/"` 
/data/2011/12/27/09/49/ 

這意味着,當文件被進來的時候,他們會去到該文件夾​​按分鐘。由於時間單調遞增,當您運行一個文件夾時,您知道您不必再返回並再次運行該文件夾。如果您想每小時運行一次作業,則可以將輸入路徑指向/data/2011/12/27/08。每天將會是/data/2011/12/26等。

0

Hadoop本身並不支持其他人提到的部分數據運行。您可以獲得所需的功能如果您使用HBase作爲map-reduce的源並通過適當的過濾器進行掃描(例如,時間戳大於上次運行)