這篇主要講信息流和容錯(cuò)的設(shè)計(jì)
組件設(shè)計(jì)細(xì)節(jié)
資源分配流程
slot-allocation-with-new-taskmanager.png
- 4,6丟失則消息4重發(fā)阱飘,AllocationID用來標(biāo)志資源請(qǐng)求保證重發(fā)的時(shí)候RM不會(huì)重復(fù)申請(qǐng)資源窘游。如果在重試之前子巾,之前分配的slot已經(jīng)被釋放了马澈,那么可能會(huì)重新啟動(dòng)一個(gè)container(之前為了申請(qǐng)slot啟動(dòng)了一個(gè)TM崩泡,分配了一個(gè)slot但是沒用迈螟,所以自動(dòng)釋放了叉抡,RM認(rèn)為沒有可用的slot了,又啟動(dòng)了一個(gè)TM答毫?卜壕??)
- 10丟失烙常,則可以依靠TM的自動(dòng)重新連接機(jī)制轴捎。ResourceID可以用來區(qū)分重復(fù)注冊(cè)
- 12丟失,則超時(shí)重發(fā)蚕脏。在后面注冊(cè)環(huán)節(jié)注冊(cè)時(shí)提供了(AllocationID侦副,ResourceID)會(huì)因?yàn)锳llocationID沖突導(dǎo)致注冊(cè)失敗(忽略注冊(cè)信息)
- 13丟失驼鞭,可以依靠心跳信息來保證消息
- 14丟失秦驯,依靠TM自動(dòng)重新連接,依靠(AllocationID挣棕,ResourceID)
失敗處理
TaskManager 掛了
- ResourceManager
- 檢測(cè)方式译隘,通過心跳超時(shí)
- 在yarn和mesos下亲桥,可以通過集群管理器額外獲得通知
- 從 live tm 列表中清除TM
- 如果有JM分配了這個(gè)TM的slot,則向這些JM發(fā)送TM掛了的信息
- 啟動(dòng)新的container替換
- JM
- 檢測(cè)方式固耘,心跳超時(shí)
- 可能會(huì)提前收到消息(來自RM)
- 從slot pool中移除 來自這個(gè)TM的slot
- 標(biāo)記在那個(gè)slot中運(yùn)行的task掛了题篷,啟動(dòng)task恢復(fù)邏輯
- 如果資源不夠了,job降級(jí)厅目?
- 失去的數(shù)據(jù)
- 運(yùn)行的operator狀態(tài)番枚,不過可以通過checkpoint恢復(fù)
- 恢復(fù)動(dòng)作
- 重啟的TM會(huì)查找RM并重新注冊(cè)slot信息
RM掛了
-
TaskManager
- 檢測(cè)方式:心跳超時(shí)
- HA:在RM失去leader身份時(shí)會(huì)得到通知
- 進(jìn)入重新注冊(cè)RM的邏輯,不過不需要取消任務(wù)
- 一旦注冊(cè)成功损敷,向RM發(fā)送當(dāng)前的slot都分配給了那些job葫笼。當(dāng)前可用的slot有多少
-
JobManager
- 檢測(cè)方式:心跳超時(shí)
- HA:在RM失去Leader身份時(shí)會(huì)得到通知
- JM等待RM恢復(fù)(通過leader-election service會(huì)得到通知),重新發(fā)送在pending request列表中的信息(只有資源申請(qǐng)收到了影響)
-
失去的數(shù)據(jù)
- 當(dāng)前運(yùn)行的container:從cluster manager中獲得
- 可用的slot:從TM注冊(cè)獲得
- slot的分配情況:從TM注冊(cè)獲得(slot分給了哪個(gè)job)
- 延遲的slot 分配申請(qǐng):JM會(huì)重新申請(qǐng)資源拗馒,發(fā)送資源請(qǐng)求
可能會(huì)發(fā)生RM啟動(dòng)了一個(gè)container路星,之后RM掛了,恢復(fù)之后又啟動(dòng)了一個(gè)container诱桂。
第二個(gè)container會(huì)因?yàn)闆]有使用被自動(dòng)釋放(在一段時(shí)間之內(nèi))
JM掛了
- TaskManager
- 檢測(cè)方式:心跳超時(shí)
- HA:
- TM觸發(fā) master掛了的動(dòng)作(當(dāng)前是釋放所有task)
- TM嘗試重新注冊(cè)JM(在一段時(shí)間之內(nèi))
- 如果JM沒活過來則已經(jīng)分配的slot會(huì)被報(bào)告給RM可以被分配給其他JM
- ResourceManager
- 檢測(cè)方式:心跳超時(shí)
- HA:
- 可能會(huì)通知TM說JM掛了奥额,之外沒啥動(dòng)作了
- 失去的數(shù)據(jù)
- JobGraph,庫(kù)访诱,可以從持久存儲(chǔ)中獲得(HDFS)
- 完成的checkpoint元數(shù)據(jù)信息,從HA中獲得
- 任務(wù)的執(zhí)行狀態(tài)韩肝,任務(wù)會(huì)從上個(gè)checkpoint開始
- 已經(jīng)注冊(cè)的TM触菜,TM會(huì)重新注冊(cè)相關(guān)信息
- 恢復(fù)動(dòng)作
- 獲得leader狀態(tài)
- 注冊(cè)RM,(為了獲得TM掛了的信息)
- 觸發(fā)job從上次完成的checkpoint恢復(fù)
JM和RM掛了
- TM正常執(zhí)行JM掛了的邏輯
- TM會(huì)嘗試提供給新的JMslot
- TM停留在RM注冊(cè)循環(huán)中
TM和RM掛了
- JM不能從RM獲取TM掛了的信息哀峻,但是可以通過心跳超時(shí)檢測(cè)到
- 資源申請(qǐng)全部超時(shí)(或者取消)涡相,在RM上線的時(shí)候會(huì)嘗試重新啟動(dòng)
- JM可能會(huì)job降級(jí)