這篇主要是組件的職責(zé)和功能
- 每個(gè)JobManager負(fù)責(zé)一個(gè)Job,在提交JobGraph時(shí)創(chuàng)建,在job完成后銷毀
- JobManager同樣可以通過savepoint創(chuàng)建
ResourceManager
根據(jù)不同的集群調(diào)度框架提供不同實(shí)現(xiàn)(YARN持灰,Mesos)
主要任務(wù)
- 處理資源請求(申請新的TaskManager):在請求到來的時(shí)候可以啟動(dòng)新的container或者直接分配給job
- 異常檢測:如果JobManager或者TaskManager掛了,需要做相應(yīng)處理,通知相關(guān)組件
- 緩存TaskManager,以便重用宇整。在TaskManager(container)一段時(shí)間未使用時(shí)自動(dòng)釋放
根據(jù)不同實(shí)現(xiàn)方式可以選擇讓ResourceManager感知到 task slot。(增加一個(gè)map變量即可實(shí)現(xiàn))
ResourceManager 是在多個(gè)Job運(yùn)行期間一直存活的
RecourceManager如果掛了不能影響當(dāng)前執(zhí)行的job芋膘,運(yùn)行的job可以繼續(xù)使用已經(jīng)分配的資源執(zhí)行鳞青,但是在RM掛了期間不能申請新的資源。
-
RM的不應(yīng)該依靠保存運(yùn)行時(shí)狀態(tài)來實(shí)現(xiàn)容錯(cuò)
RM可以通過詢問JM为朋,TM來重新獲取信息盼玄。(RM自身重新獲取container,JM,TM的重新注冊)
特殊情況下可能仍然需要保存一些與cluster-manager相關(guān)的狀態(tài)。
JM向RM注冊自己潜腻,這樣便可以獲得TM的信息。如果JM被分配的資源所在的TM掛了器仗,會(huì)收到相關(guān)信息融涣。
如果slot足夠的話2,3步驟省略
TaskManager
同時(shí)和RM,JM進(jìn)行信息交互精钮。同時(shí)需要心跳信息來檢測異常
與RM的交互
- TM啟動(dòng)的時(shí)候會(huì)在RM注冊自己威鹿。RM斷開連接時(shí)會(huì)重連,并重新注冊自己轨香,上報(bào)自身的slot資源信息
- 每次心跳時(shí)忽你,TM也會(huì)發(fā)送自己的slot資源的可用狀態(tài)。而且TM和JM直接鏈接并發(fā)送資源信息臂容,這樣RM就會(huì)及時(shí)的感知到資源的變化科雳。
- TM這邊看到的資源使用狀態(tài)是最正確的信息(自己的哪個(gè)slot被分配給了哪個(gè)JM)根蟹。通過這個(gè)信息RM可以得到資源的使用狀態(tài)
- RM會(huì)告訴TM,TM的哪個(gè)slot被分配給了哪個(gè)JM糟秘。之后TM會(huì)把slot分配給JM简逮。如果分配失敗會(huì)告訴RM對(duì)應(yīng)的slot實(shí)際是不可用的(注:RM那邊的信息可能是錯(cuò)誤的,所以才會(huì)發(fā)送這個(gè)信息給TM尿赚,TM這邊的信息才是資源使用的真是情況散庶,參考上一條)
- RM會(huì)向TM發(fā)送shutdown信息
與JM的交互
- TM會(huì)根據(jù)JM的要求來分配slot給JM,在JM的Job完成之前這個(gè)slot都是屬于JM的凌净,完成后JM會(huì)釋放slot
- TM會(huì)保存自己的slot分配信息(分配給了哪個(gè)JM)悲龟,JM失連則會(huì)觸發(fā)TM自身的master掛了的恢復(fù)邏輯
- JM可以部署任務(wù)到JM被分配的slot中
- JM失連,TM會(huì)嘗試分配給slot給JM(如果JM有HA冰寻,則新的JM還是負(fù)責(zé)這個(gè)Job)须教。如果一段時(shí)間之內(nèi)都注冊失敗,則所有分配給這個(gè)JM的slot都變?yōu)榭煞峙錉顟B(tài)性雄。當(dāng)之前Job的JM恢復(fù)后没卸,他需要重新從RM申請slot
JM的slot pool
JM有一個(gè)資源池記錄TM提供的slot資源
JM的調(diào)度器從slot pool中獲取slot來調(diào)度任務(wù),這樣即使RM掛了JM也可以不失去分配的資源
InstanceManager
是當(dāng)前slot pool的一個(gè)實(shí)現(xiàn)
SlotPool在無法滿足[資源申請]的時(shí)候會(huì)嘗試從RM中獲取資源秒旋,如果RM掛了或者RM不能提供資源或者請求超時(shí)约计,則[資源申請]失敗
SlotPool可以返還資源給RM,如果應(yīng)用已經(jīng)使用了最大資源后slotpool還有剩余
Dispatcher
Dispatcher 接受client的job提交迁筛,并在cluster manager上創(chuàng)建啟動(dòng)job
[圖片上傳失敗...(image-fc02df-1552733550212)]這個(gè)設(shè)計(jì)是因?yàn)?/p>
- 有的cluster manager需要一個(gè)集中式(觸發(fā) job 啟動(dòng))和(監(jiān)控job)的模塊
- 可以作為一個(gè)常駐實(shí)例來等待任務(wù)提交
容錯(cuò)
核心容錯(cuò)機(jī)制是任務(wù)重啟煤蚌,并從checkpoint中恢復(fù)狀態(tài)
YARN
with dispatcher
容錯(cuò)方面:
RM和JM運(yùn)行在AM進(jìn)程中,異常檢測和進(jìn)程重啟由YARN執(zhí)行
JobGraph和庫细卧,會(huì)保存在AM的工作目錄中尉桩,YARN會(huì)將他們保存在私有的HDFS目錄中