mapreduce 任務執行過程**現的故障可以分為兩大類:硬體故障和任務執行失敗引發的故障。
1) 硬體故障
在 hadoop cluster 中,只有乙個 jobtracker,因此,jobtracker 本身是存在單點故障的。如何解決 jobtracker 的單點問題呢?我們可以採用主備部署方式,啟動 jobtracker主節點的同時,啟動乙個或多個 jobtracker 備用節點。當 jobtracker 主節點出現問題時,通過某種選舉演算法,從備用的 jobtracker 節點中重新選出乙個主節點。機器故障除了 jobtracker 錯誤就是 tasktracker 錯誤。tasktracker 故障相對較為常見,mapreduce 通常是通過重新執行任務來解決該故障。
比如:乙個 tasktracker 已經完成被分配的三個 reduce 任務中的兩個,因為 reduce 任務一旦完成就會將資料寫到 hdfs 上,所以只有第三個未完成的 reduce 需要重新執行。但是對於 map 任務來說,即使 tasktracker 完成了部分 map,reduce 仍可能無法獲取此節點上所有 map 的所有輸出。所以無論 map 任務完成與否,故障 tasktracker 上的 map 任務都必須重新執行。
2) 任務執行失敗引發的故障
在實際任務中,mapreduce 作業還會遇到使用者**缺陷或程序崩潰引起的任務失敗等情況。使用者**缺陷會導致它在執行過程中丟擲異常。此時,任務 jvm 程序會自動退出,並向 tasktracker 父程序傳送錯誤訊息,同時錯誤訊息也會寫入 log 檔案,最後 tasktracker將此次任務嘗試標記失敗。對於程序崩潰引起的任務失敗,tasktracker 的監聽程式會發現程序退出,此時tasktracker 也會將此次任務嘗試標記為失敗。對於死迴圈程式或執行時間太長的程式,由於 tasktracker 沒有接收到進度更新,它也會將此次任務嘗試標記為失敗,並殺死程式對應的程序。
在以上情況中,tasktracker 將任務嘗試標記為失敗之後會將 tasktracker 自身的任務計數器減 1,以便想 jobtracker 申請新的任務。tasktracker 也會通過心跳機制告訴jobtracker 本地的乙個任務嘗試失敗。jobtracker 接到任務失敗的通知後,通過重置任務狀態,將其加入到排程佇列來重新分配該任務執行(jobtracker 會嘗試避免將失敗的任務再次分配給執行失敗的 tasktracker)。如果此任務嘗試了 4 次(次數可以進行設定)仍沒有完成,就不會再被重試,此時整個作業也就失敗了。
錯誤處理機制
一直想對公司的錯誤處理機制進行思考和改進,今天查到如下乙個的答覆,很全面,特轉到這裡 錯誤處理機制一般都是自己定義的,在乙個團隊內部自行設定統一的錯誤處理模式。你可以考慮下面三種 1 錯誤發生即處理 也就是錯誤出現在 就在那裡及時處理,而不進行 或者其他操作。2 集中錯誤處理 錯誤發生後統一 到某乙...
錯誤處理機制
2020 11 05 16 55 14 三個屬性 name 錯誤名字 message 錯誤資訊提示 stack 錯誤堆疊 使用 名字 屬性 a.message 下面 syntaxerror物件 語法錯誤 referenceerror物件 引用了不存在變數 rangeerror物件 值超出有效範圍 t...
Spring Boot錯誤處理機制
摘要 1 springboot預設的錯誤處理機制 預設效果 1 瀏覽器,返回乙個預設的錯誤頁面 瀏覽器傳送請求的請求頭 2 如果是其他客戶端,預設響應乙個json資料 原理 可以參照errormvcautoconfiguration 錯誤處理的自動配置 給容器中.預設效果 1 瀏覽器,返回乙個預設的...