M/R推測性的執行(Speculative execution)

  Hadoop系統有一個問題,它把任務分派到很多個節點,其中很有可能有一些慢的節點會限制剩下程序的執行速度。舉個例子,如果有個節點內有一個比較慢的磁盤控制器,那它讀取輸入數據的速度可能只有所有其它節點的速度的10%。所以當99個map任務都已經完成了,系統仍在等待最後那個比較耗時的map任務完成。
  通過強迫任務獨立運行於其它的任務,使得單個任務之間不會知道它們的輸入數據來自哪裏。任務相信Hadoop平臺會派送合適的輸入到它們那裏。因此,對於相同的輸入數據,我們可以並行多次處理以利用不同機器的負載能力。因爲作業中大多數的任務都已經完成了,Hadoop平臺會在幾個空閒的節點上調度執行剩餘任務的拷貝,這個過程叫做推測性的執行。當任務完成時,它會向JobTracker通告。任何一個首先完成的拷貝任務將成爲權威拷貝,如果其他拷貝任務還在推測性的執行中,Hadoop會告訴TaskTracker去終止這些任務並丟棄它們的輸出,接着Reducer會從首先完成的Mapper那裏獲取輸入數據。

  推測性的執行默認是啓用的,你可以通過設置JobConf中以下參數爲false來禁用mapper和reducer的推測性的執行。

mapred.map.tasks.speculative.execution
mapred.reduce.tasks.speculative.execution

來源:http://www.cnblogs.com/spork/archive/2010/01/11/1644350.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章