天天看點

MapReduce的容錯機制

前言:

MapReduce計算架構提供了很好的容錯機制,本篇文章就是來介紹該架構是如何來容錯的,我們可以從錯誤出現的情況來探讨該架構是如何容錯的,常見的錯誤有作業錯誤、網絡錯誤甚至資料錯誤。

  1. 任務出錯
任務出錯是比較常見的,引起錯誤的原因通常有低品質的代碼、資料損壞、節點暫時性故障、一個任務出現下列三種情況的任意一種時被認為出錯。 (1)抛出一個沒有鋪貨的異常 (2)以一個非零值退出程式 (3)在一定的事件内沒有向Tasktracker報告進度。 當TaskTracker檢測到一個錯誤,TaskTracker将在下一次心跳裡向JobTracker報告該錯誤,JobTracker收到報告的錯誤後,将會判斷是否需要進行重試,如果是,則重新排程該任務。預設的嘗試次數為4次,可以通過mapred-site.xml的配置項mapreduce.map.maxattempts配置。該任務可能在叢集的任意一個節點重試,這取決于叢集資源的利用情況。如果同一個作業的多個任務在同一個TaskTracker節點反複失敗,那麼JobTracker會将該TaskTracker放到作業級别的黑名單,進而避免将該作業的其他任務配置設定到該TaskTracker上。如果多個作業的多個任務在同一個TaskTracker節點反複失敗,那麼JobTracker會将該TaskTracker放到一個全局的黑名單24小時,進而避免所有作業的任務呗配置設定到TaskTracker上。 當一個任務經過最大嘗試數的嘗試運作後仍然失敗,那麼整個作業将被标記為失敗。如果我們不希望這樣(因為可能作業的溢寫結果還是可用的),那麼可以設定允許在不處罰整個作業失敗的任務失敗的最大百分比。 2、TaskTracker出錯 當TaskTracker程序崩潰或者TaskTracker程序所在節點故障時,JobTracker将接收不到TaskTracker發來的心跳,那麼JobTracker将會認為該TaskTracker失效并且在該TaskTracker運作過的任務都會被認為失敗,這些将會被重新排程到别的TaskTracker執行,而對于使用者來說,在執行MapReduce任務時,隻會感覺到該作業在執行的一段時間裡變慢了。 3、JobTracker出錯 在Hadoop中,JobTracker出錯是非常嚴重的額情況,因為在Hadoop中JobTracker存在單節點故障的可能性,是以如果如果JobTracker一旦出錯,那麼正在運作的所有作業的内部狀态資訊将會丢失,即使JobTracker馬上恢複了,作業的所有任務都會被認為是失敗的,即所有作業都需要重新執行。 4、HDFS出錯 對于依賴底層存儲HDFS的作業,一旦HDFS出錯,那麼對于整個作業來說,還是會執行失敗,當DataNode出錯時,MapReduce會從其他DataNode上讀取所需資料,除非包含任務所需的資料塊的節點都出錯,否則都是可以恢複的。如果NameNode出錯,任務将在下一次通路NameNode時報錯,但是MapReduce計算架構還是會嘗試執行4次(預設的最大嘗試執行次數為4),在這期間,如果NameNode依然處于故障狀态,那麼作業會最終執行失敗。

繼續閱讀