2013-08-16 55 views
1

何時從本地文件系統中刪除映射程序任務的輸出?他們堅持到整個工作完成或者他們早於刪除時間嗎?映射器任務的結果何時從磁盤中刪除?

+0

你的意思是,當他們從每個數據節點的臨時HDFS文件夾中刪除? –

+0

不,映射程序任務的結果保存爲本地文件系統上的目錄「hadoop.tmp.dir」,而不是hdfs – slayton

+0

Youch,對不起。當然,它們並不存儲在HDFS中。我的錯。 –

回答

4

除了地圖和reduce任務,創建另外兩個任務:一個任務設置任務 和作業清理任務。這些由任務管理器運行,用於在任何地圖任務運行之前運行代碼以設置 作業,並在所有減少任務完成後進行清理。 爲作業配置的OutputCommitter確定要運行的代碼,默認情況下爲 ,這是一個FileOutputCommitter。對於作業設置任務,它將創建作業的最終 輸出目錄和任務輸出的臨時工作空間,對作業清理任務創建 ,它將刪除任務輸出的臨時工作空間。

看一看OutputCommitter.

2

如果您的hadoop.tmp.dir設置爲默認設置(例如,/ tmp /),則它很可能會受到tmpwatch以及操作系統中的任何默認設置的限制。我建議在/etc/cron.d/,/etc/cron.daily,etc/cron.weekly/等處查找,以準確查看您的操作系統默認值是什麼。

關於tmpwatch需要注意的一件事是,默認情況下,它將關鍵訪問時間,而不是修改時間(即,由於X將被視爲「陳舊」,並且未被「觸及」去除)。然而,Hadoop使用noatimenodiratime標誌掛載文件系統是一種常見做法,這意味着訪問時間不會更新,從而歪曲您的tmpwatch行爲。

否則,默認情況下,Hadoop將清除超過24小時(任務完成後)的任務嘗試日誌。雖然幾歲,this writeup有一些關於默認行爲的很好的信息。請特別注意參考mapreduce.job.userlog.retain.hours的部分。

編輯:應對OP的評論,它清除了我的問題的誤解:

至於map任務中輸出,其溢出到磁盤上,通過任意組合使用,複製到任何減速機, Hadoop的權威指南有這樣一段話:

的TaskTracker不盡快刪除磁盤映射輸出作爲第一 減速已經檢索它們,減速可能會失敗。相反,他們 等到他們被告知要在作業完成後由作業跟蹤者刪除它們,即 。

Source

我也+1 @mgs回答以下,因爲他們有聯繫的是控制這一點,所描述的工作清理任務的源代碼。

因此,,地圖輸出數據在作業完成後立即刪除,成功或不成功,並且不會立即刪除。

+0

謝謝,但我問的是由各個映射器寫入的輸出被保留,然後複製到reducer,而不是單個任務的日誌文件。在完成任務之前,映射器的輸出最終會被Hadoop刪除,但是,如果發生這種清理是我的問題的焦點。 – slayton

+0

哦,我明白了。我的錯。我編輯了我的答案以反映這一點。 – jtravaglini

1

「一旦第一個reducer檢索到它們,任務管理器就不會從磁盤上刪除映射輸出,因爲reducer可能會失敗,而是等到它們被jobtracker刪除,完成」

的Hadoop權威指南(第6.4節)