簡體   English   中英

Hadoop推測任務執行

[英]Hadoop speculative task execution

在谷歌的MapReduce論文中,他們有一個備份任務,我認為這與Hadoop中的推測任務是一回事。 投機任務是如何實施的? 當我開始一個推測性的任務時,任務是從最初的那個開始,慢慢開始,還是從舊任務到達的地方開始(如果是的話,是否必須復制所有中間狀態和數據?)

Hadoop系統的一個問題是,通過將任務划分到多個節點,一些慢節點可能對程序的其余部分進行速率限制。

由於各種原因(包括硬件降級或軟件錯誤配置),任務可能會很慢,但由於任務仍然成功完成,原因可能很難檢測,盡管在比預期更長的時間之后。 Hadoop不會嘗試診斷和修復運行緩慢的任務; 相反,它會嘗試檢測任務運行速度低於預期的時間,並啟動另一個等效的任務作為備份。 這被稱為推測執行任務。

例如,如果一個節點具有慢速磁盤控制器,那么它可能僅以所有其他節點的速度的10%讀取其輸入。 因此,當99個地圖任務已經完成時,系統仍在等待最終的地圖任務檢入,這比所有其他節點花費的時間要長得多。

通過強制任務彼此隔離運行,各個任務不知道其輸入來自何處。 任務信任Hadoop平台,只提供適當的輸入。 因此,可以並行多次處理相同的輸入,以利用機器能力的差異。 由於作業中的大多數任務即將結束,Hadoop平台將在幾個節點上安排剩余任務的冗余副本,這些節點沒有其他工作要執行。 此過程稱為推測執行。 任務完成后,他們會向JobTracker宣布這一事實。 任務的任何副本首先完成即成為最終副本。 如果其他副本以推測方式執行,Hadoop會告訴TaskTrackers放棄任務並丟棄其輸出。 然后,Reducers首先從成功完成的Mapper接收輸入。

默認情況下啟用推測執行。 您可以通過將mapred.map.tasks.speculative.executionmapred.reduce.tasks.speculative.execution JobConf選項分別設置為false來使用舊API禁用映射器和mapred.map.tasks.speculative.execution器的推測執行,而使用較新的API時可以考慮更改mapreduce.map.speculativemapreduce.reduce.speculative

所以為了回答你的問題,它確實重新開始,與其他任務完成/完成的程度無關。

參考: http//developer.yahoo.com/hadoop/tutorial/module4.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM