2013-01-05 74 views

回答

1

當您使用基於FileOutputFormat輸出格式(文字,序文件ETX),他們利用一種常見FileOutputCommitter負責提交或中止減速器輸出時,它成功/失敗等

在幕後,當您的reducer寫入輸出時,它會寫入您指定的HDFS輸出目錄的_temporary子目錄。

當reducer完成時,作業跟蹤器將表示reducer嘗試的一個特定實例(記住推測執行,reducer任務嘗試可能運行1次或多次)作爲最終輸出並指示輸出提交者提交減速器輸出的版本(其他嘗試將被中止)。

當輸出提交者提交嘗試輸出時,它僅僅將part-r-xxxxx文件從嘗試臨時目錄移動到指定的輸出目錄。

因此,考慮到這一點,當您在輸出目錄中看到part-r- *文件時,將完全寫入並且可以安全地拖尾。因此,從這個意義上說,您可以在處理Reducer輸出時獲得跳躍(例如,您在1000個Reducer插槽集羣上運行10K Reducer) - 但是無法安排另一個Map/Reduce作業來處理此輸出,但只有Reducer輸出完成後將用於下一個地圖縮小作業(作業提交時,它只會考慮當前可用的文件作爲輸入,它不會連續掃描作業提交後出現的新文件)。

您還應該考慮到您的工作可能實際上在最後幾個reducer中失敗 - 在這種情況下,您是否仍然希望急切地處理那些在失敗之前完成的reducer輸出,或者您只想處理if整個工作完成(這對大多數工作來說更有意義)。