1. JobTracker
暫無容錯機制,掛掉之後,需要人工介入,重啓。
用戶可以通過配置一些參數,以便JobTracker重啓後,讓所有作業恢復運行。用戶配置若干參數後,JobTracker重啓前,會在history log中記錄各個作業的運行狀態,這樣在JobTracker關閉後,系統中所有數據目錄(包括各種臨時目錄)均會被保留,待JobTracker重啓之後,JobTracker自動重新提交這些作業,並只對未運行完成的task進行重新調度,這樣可避免已經計算完的task重新計算。具體配置方法可參考:http://www.cnblogs.com/MGGOON/archive/2012/02/23/2365055.html
有人提出,TaskTracker重啓後,它上面的作業也可以自動恢復,具體參考:
https://issues.apache.org/jira/browse/MAPREDUCE-2171
2. TaskTracker
(1)彙報心跳
mapred.tasktracker.expiry.interval,默認值是10min
當TaskTracker超過mapred.tasktracker.expiry.interval時間間隔沒有向JobTracker彙報心跳,則JobTracker視之爲死亡,並將之從調度池中剔除。
(2)Exclude nodes
用戶可以在mapred.hosts.exclude或者mapred.hosts中指定一個文件,該文件一行是一個tasktracker host,表示這些節點不允許接入集羣,也就是不會被分配task。該文件在Hadoop-0.21.0版本中可以動態加載。
(3)黑名單(blacklist)
health-check script腳本判斷該節點是健康,不健康,直接加入黑名單。
具體參考: http://hadoop.apache.org/common/docs/current/cluster_setup.html 中的“Configuring the Node Health Check Script”一節。
(4)灰名單(graylist)
採用了啓發式算法發現的有問題的節點,加入灰名單。
mapred.jobtracker.blacklist.fault-timeout-window:默認是3小時,時間窗口,計算該時間內失敗的task個數
如果滿足以下條件,則將tasktracker加入灰名單:
mapred.max.tracker.blacklists:默認是4,bad tasktracker閾值,當一個tasktracker在時間窗口內失敗個數超過該閾值,則認爲該tasktracker是bad tasktracker
mapred.cluster.average.blacklist.threshold,默認是0.5,如果一個bad tasktracker失敗的task個數超過了所有tasktracker平均值的mapred.cluster.average.blacklist.threshold倍,則加入灰名單,不僅會自動加入黑名單。
重新啓動該TaskTracker,就能夠將它從黑名單和灰名單中刪除。
3. Job
mapred.max.tracker.failures:一個作業在某個tasktracker上失敗的task個數超過該值,則該tasktracker被加到該job的blacklist中,從此不再往該tasktracker分配該job的task.
4. Task
mapred.map.max.attempts:每個map task最大嘗試次數
mapred.reduce.max.attempts:每個reduce task最大嘗試次數
5. Record
mapred.skip.map.max.skip.records:跳過壞記錄條數(數據格式不對,空紀錄等)。當遇到壞記錄時,Hadoop嘗試跳過的最多記錄條數。
6. 磁盤
用戶可以配在mapred.local.dir參數配置多個磁盤目錄,將map task中間結果分不到不同磁盤上,增強容錯性。Map task臨時結果將被輪詢寫到這些目錄中,以避免某個磁盤目錄數據過多。(輪詢的方式仍然可能導致某個磁盤目錄數據過多,最好的策略是每次選擇數據最少的磁盤目錄寫入,採用小頂堆)。
用戶日誌userlogs可被分佈不到不同磁盤目錄中,減少單個磁盤日誌寫入壓力。
具體參考:https://issues.apache.org/jira/browse/MAPREDUCE-2657
轉載自董的博客
本文鏈接地址: http://dongxicheng.org/mapreduce/hadoop-mapreduce-failure-tolerance/