2013-03-01 56 views
24

在Google的MapReduce文件中,他們有一個備份任務,我認爲這與Hadoop中的推測任務是一回事。投機任務如何實施?當我開始一項推測性任務時,任務是從開始的時候開始的,是從較早的任務開始,還是從較早的任務開始(如果是,是否必須複製所有中間狀態和數據?)Hadoop推測性任務執行

+0

添加到這個問題,什麼將是上榜理由,如果你要在系統範圍的級別完全禁用投機任務執行?當投機執行被禁用時,取得了什麼好處。 – 2013-06-30 20:12:26

回答

58

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

任務可能是出於各種原因,包括硬件降解,或軟件錯誤配置慢,但原因可能很難檢測,因爲任務依然成功完成,雖然比預期更長的時間之後。 Hadoop不會嘗試診斷和修復運行緩慢的任務;相反,它會嘗試檢測任務的運行速度是否比預期慢,並啓動另一個等效的任務作爲備份。這被稱爲任務的推測性執行。

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

通過強制任務從彼此孤立運行,各個任務不知道他們的投入從何而來。任務信任Hadoop平臺只提供適當的輸入。因此,同一輸入可以並行處理多次,以利用機器能力的差異。隨着作業中的大部分任務即將結束,Hadoop平臺將爲剩餘的任務安排多個節點的冗餘副本,這些副本不需要其他工作來執行。這個過程被稱爲投機執行。任務完成後,他們會向JobTracker公佈這一事實。無論任務的任何副本首先完成成爲最終副本。如果其他副本是推測性執行的,則Hadoop會通知TaskTracker放棄這些任務並放棄其輸出。然後,減速器首先從任何Mapper成功完成的輸入中接收輸入。

默認情況下啓用推測性執行。您可以通過mapred.map.tasks.speculative.executionmapred.reduce.tasks.speculative.execution JobConf選項設置爲false,分別使用舊的API,而較新的API,你可以考慮改變mapreduce.map.speculativemapreduce.reduce.speculative禁用映射器和減壓器推測執行。

因此,要回答你的問題它並重新開始,並沒有任何與多少其他任務做/完成。

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

+3

相信'mapreduce.map.speculative'和'mapreduce.reduce.speculative'是較新的等同'mapred.map.tasks.speculative.execution'和'mapred.reduce.tasks.speculative.execution',分別。 – 2013-03-01 19:36:32