在Apache Hadoop 2.0的第一個穩定版本2.2.0中,資源管理系統YARN存在單點故障,且還沒有解決。YARN ResourceManage HA的相關jira爲YARN-149,目前正在火熱開發中,但還沒有公佈未來的發佈版本。因爲YARN是一個通用管理系統,是上層計算框架(MapReduce、Tez、Spark、Storm等)的基礎服務,它的重要性不言而喻,提升它的可靠性和容錯性是當務之急。apache
在Cloudera公司最新發布的CDH5(基於apache hadoop 2.2.0下載地址爲:CDH5-beta-1下載)中,自帶了YARN HA實現,儘管該版本目前爲beta版,但考慮到該方案採用了Hadoop 2.0中自帶的HA框架實現(HDFS HA和MapReduce HA均採用該框架實現),所以,具備必定通用性,本文將介紹CDH5-beta中的YARN HA實現。架構
在「Hadoop 2.0單點故障解決方案」一文中,我已經詳細介紹了Hadoop 2.0自帶的HA框架,HDFS和YARN的單點故障均會基於該框架解決。值得一說的是,該框架是通用的,且已經作成了一個庫放在Common中,你能夠將它做爲三方庫使用。框架
YARN的單點故障指的是ResourceManager單點問題,ResourceManager負責整個系統的資源管理和調度,內部維護了各個應用程序的ApplictionMaster信息,NodeManager信息,資源使用信息等。考慮到這些信息絕大多數能夠動態重構,所以解決YARN單點故障要比HDFS單點容易不少。與HDFS相似,YARN的單點故障仍採用主備切換的方式完成,不一樣的是,備節點不會同步主節點的信息,而是在切換以後,才從共享存儲系統讀取所需信息。之因此這樣,是由於YARN ResourceManager內部保存的信息很是少,大部分能夠重構,且這些信息是動態變化的,很快會變舊。oop
目前CDH5-beta中,單點故障解決方案還是粗粒度的,它藉助Zookeeper完成主備節點信息共享。它僅在Zookeeper上保存Application ID和ApplicationAttempt ID,以便故障恢復後從新建立這些Application,其餘信息則動態重構或者丟棄,好比NodeManager信息(包括可用資源,健康狀態等信息),需由NodeManager從新經過RPC彙報,而資源使用信息(每一個節點資源使用狀況,每一個任務資源獲取狀況等)則所有重置,也就是說,故障恢復或者ResourceManager主備切換後,整個集羣跟重啓過同樣,只不過是以前正在運行的應用程序不須要從新提交,但已經分配的資源信息則所有丟失。這意味着,NodeManager從新跟新的ResourceManager鏈接後,ResourceManager發送的第一個指令是讓NodeManager重啓,而NodeManager會殺死全部正在運行的Container。線程
同HDFS和MapReduce同樣,YARN HA可存在兩種模式,分別是手動模式和自動模式,在手動模式下,全部ResourceManager啓動後將進入standby狀態,須要由管理員經過命令將一個切換爲active狀態,YARN集羣纔可對外提供服務;而自動模式則基於zookeeper實現,基本的實現思想是,全部ResourceManager啓動後,將建立Zookeeper下的同一個目錄,誰建立成功,則誰進入active狀態,其餘的自動轉入standby狀態。YARN的自動模式架構圖以下所示,各個組件的做用已在「Hadoop 2.0單點故障解決方案」一文中進行了詳細的介紹,整個架構與CDH4中MapReduce JobTracker的HA解決思路一致,具體可參考「CDH中的JobTracker HA方案介紹」,與該架構不一樣的是,ZKFailoverController(ZKFC)屬於RMHAProtocolService中的一個線程,而RMHAProtocolService自己則變成ResourceManager內部的一個服務,這意味着你無需啓動一個單獨的ZKFC(下圖爲了方便說明,將ZKFC獨立畫出來)。日誌
此外,須要補充說明的是,YARN ResourceManager只負責ApplicationMaster的狀態維護和容錯,ApplicationMaster內部管理和調度的任務,好比MapTask和ReduceTask,則須要由AppicationMaster本身容錯,這不屬於YARN這個系統管理的範疇。好比MapReduce的ApplicationMaster—MRAppMaster會在HDFS上記錄Task運行日誌,這樣,當它運行失敗從新被調度到另一個節點運行時,會從新從HDFS上讀取日誌,恢復已經運行完成的Task,而只需爲那些未運行完成的任務申請資源和二次調度(注意,以前正在運行的Task會被殺死,從新執行)。orm
目前,CDH5 beta的YARN HA實現仍然是粗粒度的,相比於Apache Hadoop 2.2.0版本,可認爲它新增了ResourceManager主備間的自動切換,僅比Apache Hadoop 2.2.0人工切換或者重啓先進一點,但重啓以後的整個流程是一致的。server
因爲YARN是一個通用資源管理系統,它上面可能運行短做業或長做業,好比各種長時間運行的服務(好比Storm,thirft server等),若是每次ResourceManager切換均會致使全部正在運行的任務和做業重算或重啓,是沒法接受的,尤爲是在YARN上部署一些在線服務時,更不可能接受。所以,YARN的HA解決方案離真正可用、符合實際應用場景,還有較長的一段距離。blog