我想知道: 如果同一個作業提交兩次,hadoop mapreduce是否會重新處理整個數據集? 例如:單詞計數示例計算輸入文件夾中每個文件中每個單詞的出現次數。 如果我要將文件添加到該文件夾,並重新運行字數mapreduce作業,初始文件是否會被重新讀取,重新配置和重新還原?Hadoop mapreduce是否重新處理整個數據集
如果是這樣,有沒有辦法配置hadoop來處理新文件並將其添加到以前的mapreduce運行的「摘要」中。
任何想法/幫助將不勝感激。
我想知道: 如果同一個作業提交兩次,hadoop mapreduce是否會重新處理整個數據集? 例如:單詞計數示例計算輸入文件夾中每個文件中每個單詞的出現次數。 如果我要將文件添加到該文件夾,並重新運行字數mapreduce作業,初始文件是否會被重新讀取,重新配置和重新還原?Hadoop mapreduce是否重新處理整個數據集
如果是這樣,有沒有辦法配置hadoop來處理新文件並將其添加到以前的mapreduce運行的「摘要」中。
任何想法/幫助將不勝感激。
如果我要爲該文件夾添加一個文件,並重新運行字數mapreduce作業,初始文件是否會被重新讀取,重新配置和重新還原?
Hadoop將在再次運行時重新處理整個數據。作業成功完成後,映射器的輸出和臨時數據將被刪除。
如果是這樣,是否有配置hadoop來處理新文件並將其添加到以前的mapreduce運行的「摘要」的方法。
的Hadoop作爲,是如方案不支持,但你可以寫一個檢查未處理或新的文件和一個對自定義OUTPUTFORMAT將數據從先前的運行添加到總結的自定義InputFormat。否則,一旦作業已經運行,要處理的新文件可以放在不同的輸入文件夾中,讓作業僅處理新文件夾中的文件。
檢查此article創建自定義輸入/輸出格式。
我不確定具體的要求,但您也可以考慮處理數據流的框架,如HStreaming,S4,Twitter Storm等。
我同意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
等。
Hadoop本身並不支持其他人提到的部分數據運行。您可以獲得所需的功能如果您使用HBase作爲map-reduce的源並通過適當的過濾器進行掃描(例如,時間戳大於上次運行)
謝謝大家的幫助!所以我想答案在於設計系統是正確的。再次感謝大家的幫助。 – uri 2011-12-28 06:41:42