2013-07-02 28 views
0

是否調用了失敗的map任務的cleanup()方法?如果是這樣,它如何確保'原子性'?是爲失敗的地圖任務調用的cleanup()方法?

在我的情況下,我準備了一些mapup中的統計信息,這些統計信息是在cleanup()方法中寫入數據庫的。在這種情況下,如果映射器在執行輸入拆分的過程中失敗,那麼清理方法會將已處理的數據寫入數據庫?這將導致不正確的統計信息,因爲備用映射器嘗試也會再次寫入相同的數據。

回答

2

根據您的映射器何時失敗,可能會調用或不調用清理。例如,如果您的映射器在映射方法中失敗,則不會調用清理。但是,如果您的映射器在清理方法中失敗,則清理已被調用。

如果映射器失敗,hadoop通常會在另一臺機器上重新啓動映射器任務。因此,您需要確保幾次運行映射器或縮減器始終輸出相同的結果,否則將很難進行調試。

對於您的情況,您可以設置一些計數器來收集統計數據並在您的作業成功後讀取計數器。如果某個映射器失敗,部分計數器將被刪除。你的工作成功後的計數器將保證是正確的。

相關問題