在之前的Hadoop版本中绒疗,是不存在ResourceManager, NodeManager的概念的,此時(shí)骂澄,只有JobTracker以及TaskTracker的概念吓蘑。
但是,此時(shí)坟冲,在功能上磨镶,耦合度很高。YARN作為一個(gè)資源調(diào)度平臺(tái)健提,卻不是一個(gè)通用的平臺(tái)琳猫,而是緊緊和MapReduce結(jié)合在一起。
后來私痹,Hadoop的開發(fā)團(tuán)隊(duì)終于意識(shí)到脐嫂,應(yīng)當(dāng)把YARN和MapReduce的實(shí)現(xiàn)獨(dú)立出來统刮,讓YARN能夠作為一個(gè)通用的資源調(diào)度平臺(tái)。
而當(dāng)Hadoop的開發(fā)團(tuán)隊(duì)把YARN抽離出來之后账千,之后YARN就是一片欣欣向榮的景象了侥蒙。后來出現(xiàn)的好多分布式調(diào)度系統(tǒng),都支持在YARN上進(jìn)行調(diào)度蕊爵。比如辉哥,Spark就同時(shí)支持YARN,Mesos等攒射。
所以醋旦,在這篇文章中,我們將會(huì)介紹会放,再將YARN單獨(dú)抽離出來之后饲齐,形成的三個(gè)組件-ResourceManager, NodeManager以及ApplicationMaster,它們各自的職責(zé)咧最。
ResourceManager
YARN中捂人,最重要的一個(gè)組件就是ResourceManager。實(shí)際上矢沿,嚴(yán)格來說滥搭,YARN只包含兩個(gè)組件,ResourceManager以及NodeManager捣鲸。而ApplicationMaster只是一個(gè)YARN的客戶端瑟匆。所以,在YARN中栽惶,實(shí)際上是不信任ApplicationMaster的愁溜。因?yàn)锳pplicationMaster可以由用戶自己實(shí)現(xiàn),可能存在危險(xiǎn)外厂。
ResourceManager包含了很多組件冕象,我們將它們分成幾大類,和Client進(jìn)行交互的組件汁蝶,和ApplicationMaster交互的組件渐扮,和NodeManager交互的組件,其他核心組件穿仪,以及和安全相關(guān)的組件席爽。
和Client進(jìn)行交互的組件
ClientRMService: 這個(gè)組件,是用于接收Client的請(qǐng)求的一個(gè)組件啊片。舉例來說,我們編寫的Job玖像,在提交到ResourceManager上運(yùn)行的時(shí)候紫谷,實(shí)際上就是和ClientService進(jìn)行交互的齐饮。
AdminService: 這個(gè)組件,用于接收來自Administrator的請(qǐng)求笤昨。為什么不把它和前面的ClientRMService放在一起呢祖驱?因?yàn)閷?duì)于ClientRMService來說竞滓,可能會(huì)存在太多請(qǐng)求而導(dǎo)致請(qǐng)求遲遲得不到處理朵纷。但是沙合,對(duì)于Administrator的請(qǐng)求來說横辆,是不能出現(xiàn)這種情況的喂急。于是哀澈,就把它們兩個(gè)分開來掠抬。
ApplicationACLsManager: 這個(gè)組件骄崩,是用于驗(yàn)證Client提交的Application的拔稳。它會(huì)驗(yàn)證用戶是否有權(quán)限執(zhí)行操作等葛峻。
RMWebApp: 這個(gè)組件用于提供一個(gè)Web界面,其中包含了Application信息巴比,集群中可用資源等信息术奖。各位應(yīng)該對(duì)這個(gè)界面都不陌生。
和ApplicationMaster交互的組件
-
ApplicationMasterService: 這個(gè)組件轻绞,會(huì)接收ApplicationMaster發(fā)送來的信息采记。主要有以下幾個(gè):
- ApplicationMaster的注冊(cè)信息
- 驗(yàn)證ApplicationMaster發(fā)送來的請(qǐng)求
- 從ApplicationMaster接收分配和釋放資源的請(qǐng)求,并轉(zhuǎn)發(fā)給YarnScheduler
AMLivelinessMonitor: 這個(gè)組件會(huì)接收ApplicationMaster的心跳信息政勃,來確認(rèn)ApplicationMaster是否還存活唧龄。如果在設(shè)置的檢測(cè)間隔內(nèi)沒有受到來自ApplicationMaster的心跳信息,那么就會(huì)認(rèn)為這個(gè)ApplicationMaster已經(jīng)掛掉了稼病。然后选侨,會(huì)重啟一個(gè)ApplicationAttempt并重新調(diào)度它。
和NodeManager交互的組件
- ResourceTrackerService: NodeManager會(huì)不斷地向ResourceManager發(fā)送心跳信息然走,這個(gè)組件就是接收這些信息的援制。它會(huì)做這么幾件事:
- 注冊(cè)新的Node
- 從注冊(cè)過的Node上,接收心跳信息
- 確保只有有效的Node能夠和ResourceManager進(jìn)行交互
在注冊(cè)了一個(gè)新的Node之后, ResourceManager就會(huì)給NodeManager發(fā)送一個(gè)和安全性相關(guān)的master key芍瑞。然后晨仑,NodeManager用這個(gè)master key來驗(yàn)證ApplicationMaster發(fā)送給他的分配Container的請(qǐng)求。
這個(gè)master key也不是會(huì)一直不變的拆檬,為了防止惡意的ApplicationMaster破解master key并向NodeManager提交惡意的Container洪己,所以這個(gè)master key會(huì)每隔一段時(shí)間變一次,并發(fā)送給NodeManager.
ResourceTrackerService會(huì)將有效的heartbeat轉(zhuǎn)發(fā)給YARNScheduler,然后YARNScheduler會(huì)根據(jù)集群中可用的資源竟贯,進(jìn)行容器的分配答捕。
NMLivelinessMonitor: 這個(gè)組件,會(huì)根據(jù)NodeManager最后發(fā)送的heartbeat的時(shí)間屑那,以及設(shè)置好的檢測(cè)間隔拱镐,進(jìn)行Node的有效性檢查艘款。一旦認(rèn)為某個(gè)Node已經(jīng)過期了,那么就會(huì)將在這個(gè)Node上運(yùn)行的Container標(biāo)記為dead狀態(tài)沃琅,并在其他的正常的節(jié)點(diǎn)上進(jìn)行調(diào)度哗咆。一旦一個(gè)Node已經(jīng)過期,那么就不會(huì)再為這個(gè)Node分配任何容器益眉。直到它恢復(fù)正常晌柬。
NodeListManager: 這個(gè)組件維護(hù)著一個(gè)Node白名單以及Node黑名單。啟動(dòng)時(shí)郭脂,它們分別被從'yarn.resourcemanager.nodes.include-path'以及'yarn.resourcemanager.nodes.exclude-path'中讀取年碘。當(dāng)一個(gè)白名單中的Node被Administrator手動(dòng)撤銷,那么它就會(huì)進(jìn)入到Node黑名單中朱庆。
其他核心組件
除了上面我們已經(jīng)介紹的一些組件盛泡,還有一些比較核心的組件。
- ApplicationsManager: 這個(gè)組件維護(hù)著一個(gè)可以Application的列表娱颊。當(dāng)一個(gè)Client提交一個(gè)Application的時(shí)候傲诵,ResourceManager首先會(huì)驗(yàn)證,這個(gè)Application需要的資源是否不合適箱硕,然后驗(yàn)證這個(gè)Application是否已經(jīng)被加載過了拴竹。最終,ResourceManager會(huì)將它提交到Scheduler.
這個(gè)組件也負(fù)責(zé)在一個(gè)Application完成后以及被完全清理之前剧罩,管理它們栓拜。當(dāng)一個(gè)Application完成后,它會(huì)生成一個(gè)ApplicationSummary惠昔,并將它記錄到daemon的日志文件中幕与。
ResourceManager中有一個(gè)屬性-'yarn.resourcemanager.max-completed-applications',這個(gè)屬性控制ResourceManager最多能夠維護(hù)多少個(gè)已經(jīng)完成但沒有被清理的Application镇防。這就相當(dāng)于一個(gè)FIFO隊(duì)列啦鸣,一旦超過了這個(gè)閾值,最早的Application就會(huì)被從這個(gè)隊(duì)列中清除来氧。
- ApplicationMasterLauncher: 即使在YARN中诫给,Container的加載,都是由ApplicaitonMaster告訴NodeManager啦扬,來加載的中狂。但是,對(duì)于ApplicationMaster這個(gè)容器扑毡,比較特殊胃榕,它是由ResourceManager直接告訴NodeManager去加載的。而ApplicationMasterLauncher就是負(fù)責(zé)這個(gè)工作的瞄摊。
在ApplicationMasterLauncher的內(nèi)部勤晚,有一個(gè)線程池枉层,用于啟動(dòng)ApplicationMaster泉褐。它不僅會(huì)為新提交的Application啟動(dòng)ApplicationMaster赐写,也會(huì)為那些失敗的ApplicationAttempt重啟一個(gè)ApplicationMaster。在一個(gè)Application完成后膜赃,它也負(fù)責(zé)告訴NodeManager來清理ApplicationMaster.
YarnScheduler: 這個(gè)組件負(fù)責(zé)將Application分配到對(duì)應(yīng)的隊(duì)列上挺邀。它會(huì)基于CPU,內(nèi)存跳座,磁盤等進(jìn)行調(diào)度端铛。
ContainerAllocationExpirer: 這個(gè)組件用于確保為ApplicationMaster分配的Container,都會(huì)被加載。
由于ApplicationMaster是不被信任的疲眷,它可能會(huì)申請(qǐng)任意多的Container禾蚕,而并不分配,只是惡意的導(dǎo)致ResourceManager無法為新的Application分配Container.
所以狂丝,這個(gè)組件如果在一段時(shí)間之內(nèi)换淆,不能從NodeManager上,接收到ResourceManager已經(jīng)分配的Container的heartbeat几颜,就會(huì)認(rèn)為這個(gè)Container已經(jīng)掛掉了倍试,并告訴ResourceManager讓這個(gè)Container過期。
另外蛋哭,一個(gè)容器的過期時(shí)間县习,也會(huì)被編碼到和Container相對(duì)應(yīng)的ContainerToken中,并一同發(fā)送給NodeManager谆趾。這樣可以防止NodeManager來加載已經(jīng)過期的容器躁愿。
但是,我們也可以看到沪蓬,除非NodeManager和ResourceManager的時(shí)鐘同步彤钟,否則這會(huì)導(dǎo)致一些我們不希望看到的錯(cuò)誤。
和安全相關(guān)的組件
- RMContainerTokenSecretManager: 這個(gè)組件怜跑,負(fù)責(zé)為Container生成ContainerToken样勃,并維護(hù)這些信息。
ContainerToken中維護(hù)著和這個(gè)Container相關(guān)的一些信息性芬,并且被加密過峡眶。由于ApplicationMaster是不被信任的,所以我們需要ContainerToken植锉,讓NodeManager來驗(yàn)證這個(gè)Container是否確實(shí)是ResourceManager分配的辫樱,以及是否確實(shí)就是在這個(gè)NodeManager上運(yùn)行的,等其他信息俊庇。
ContainerToken中狮暑,包含下面的信息:
Container ID
NodeManager address
Application submitter
Resource
Expiry timestamp
Master key identifier: ResourceManager生成的一個(gè)安全密鑰
ResourceManager identifier: 由于在ResourceManager分配給ApplicationMaster容器之后鸡挠,以及這個(gè)容器被從NodeManager啟動(dòng)之前,ResourceManager可能掛掉并啟動(dòng)了一個(gè)新的搬男。為了避免這種情況拣展,就需要ResourceManager將它的ID也編碼到ContainerToken中。如果一個(gè)NodeManager重啟缔逛,它會(huì)停掉之前運(yùn)行的所有的Container备埃,NodeManager也會(huì)拒絕運(yùn)行由以前的ResourceManager分配的Container.
AMRMTokenSecretManager: 這個(gè)組件為每個(gè)ApplicationMaster都生成一個(gè)Token。ResourceManager會(huì)通過這個(gè)Token驗(yàn)證每個(gè)來自ApplicationMaster的請(qǐng)求褐奴。
ApplicationMaster可以通過本地化過的文件按脚,'ApplicationConstants.CONTAINER_TOKEN_FILE_ENV_NAME',來獲得這個(gè)Token文件敦冬。
NMTokenSecretManager: ApplicationMaster通過NMToken來和NodeManager進(jìn)行通訊辅搬。
RMDelegationTokenSecretManager: 這個(gè)組件負(fù)責(zé)為Client生成一個(gè)token.
DelegationTokenManager: 這個(gè)組件負(fù)責(zé)在Kerberos驗(yàn)證中,為已提交的Application生成一個(gè)新的Token.
ResourceManager總結(jié)
從上面的組件我們可以看到脖旱,ResourceManager的主要功能堪遂,就是分配ApplicationMaster,為ApplicationMaster分配容器夯缺,以及監(jiān)控NodeManager的狀態(tài)和集群中的可用資源蚤氏。
NodeManager
NodeManager的任務(wù)包括:
- 和ResourceManager保持同步
- 跟蹤Node的狀態(tài)
- 監(jiān)控Container的生命周期,監(jiān)控Container使用的資源
- 管理Distributed Cache
- 管理Container生成的日志
- 執(zhí)行一些可能被不同的YARN application使用到的輔助的Service
在NodeManager注冊(cè)到ResourceManager之后踊兜,它就會(huì)不間斷的向ResourceManager發(fā)送heartbeat竿滨,如果ResourceManager有需要它執(zhí)行的指令,就作為響應(yīng)發(fā)送給它捏境。
在ResourceManager收到NodeManager的heartbeat并處理完之后于游,對(duì)應(yīng)這個(gè)NodeManager的Container,就會(huì)在下一次ApplicationMaster給ResourceManager發(fā)送heartbeat時(shí)垫言,作為ResourceManager的響應(yīng)贰剥,發(fā)送給ApplicationMaster.
在NodeManager加載一個(gè)Container之前,它需要本地化需要的Resource筷频,包括數(shù)據(jù)文件蚌成,可執(zhí)行文件,shell script等凛捏。這些Resource可能有能夠在不同用戶之間共享的Resource担忧,有能夠在相同用戶不同Application之間共享的Resource,以及只能夠被這一個(gè)Container使用的Resource.
NodeManager也可以在ResourceManager的指示下坯癣,殺掉Container瓶盛。當(dāng)處于下面的幾種場(chǎng)景中時(shí),NodeManager就可能Kill掉一個(gè)Container:
- ResourceManager告訴它,Application已經(jīng)完成了
- Scheduler決定搶占這個(gè)Container惩猫,并將它分配給另一個(gè)Application或者用戶
- NodeManager檢測(cè)到芝硬,這個(gè)Container使用的資源已經(jīng)超過了ContainerToken中指定的那些資源的限制
當(dāng)一個(gè)Container完成時(shí),NodeManager會(huì)清除它在本地存儲(chǔ)的數(shù)據(jù)轧房。當(dāng)一個(gè)Application完成時(shí)拌阴,NodeManager會(huì)刪除全部跟它相關(guān)的Container的數(shù)據(jù)。
NodeManager組件
- NodeStatusUpdater: 在一個(gè)NodeManager被注冊(cè)到ResourceManager時(shí)锯厢,這個(gè)NodeManager會(huì)告訴ResourceManager一些信息皮官,比如NodeManager上Web Server以及RPC Server監(jiān)聽的端口。而ResourceManager會(huì)告訴NodeManager一些和安全相關(guān)的信息实辑,比如,master key藻丢,NodeManager用它來驗(yàn)證ApplicationMaster提交給它的Container.
在NodeManager注冊(cè)完以后剪撬,在后面的通訊中,NodeStatusUpdater會(huì)告訴ResourceManager悠反,NodeManager上的Container的狀態(tài)残黑,NodeManager上剛啟動(dòng)的Container,以及完成的Container.
ResourceManager也可以通過和這個(gè)組件的溝通斋否,讓NodeManager Kill掉一個(gè)Container梨水。
當(dāng)一個(gè)Application結(jié)束后,ResourceManager會(huì)告訴NodeManager來清理掉和Application相關(guān)的一切信息茵臭。并且會(huì)將每個(gè)Application的日志聚合到一個(gè)文件系統(tǒng)中疫诽。
- ContainerManager: 這個(gè)組件又包含了幾個(gè)其他的部分:RPC Server, Web Server, ResourceLocalizationService, ContainersLauncher, AuxServices, ContainersMonitor, LogHandler.
其中RPC Server接收來自ApplicationMaster的請(qǐng)求,來運(yùn)行或者停止一個(gè)Container旦委。
ResourceLocalizationService會(huì)將Resource進(jìn)行本地化奇徒,根據(jù)不同的Resource visibility - PUBLIC, APPLICATION, PRIVATE,會(huì)執(zhí)行不同的本地化操作缨硝。
ContainersLauncher內(nèi)部維護(hù)了一個(gè)線程池摩钙,來準(zhǔn)備并且啟動(dòng)Container。當(dāng)RPC Server接收到一個(gè)Clean up的請(qǐng)求查辩,或者NodeStatusUpdater接收到一個(gè)Clean up的請(qǐng)求胖笛,它也會(huì)對(duì)Container進(jìn)行 Clean up的操作。每個(gè)啟動(dòng)或者Clean up的操作宜岛,都是在一個(gè)線程中執(zhí)行的长踊,并且直到對(duì)應(yīng)的操作完成才會(huì)返回。所以谬返,不同Container之間是相互不影響的之斯。
AuxiliaryServices是一些可插拔的Services。有的時(shí)候,NodeManager上的現(xiàn)有的Services不能完全滿足我們的需求佑刷,比如莉擒,我們上面提到過,在一個(gè)Container完成之后瘫絮,NodeManager會(huì)清理掉它占用的本地資源涨冀。在MapReduce中,這明顯不合理麦萤,Mapper的輸出還要傳送給Reducer呢鹿鳖。
所以,YARN通過這樣一種方式壮莹,讓我們可以自己配制一些Service翅帜,來增強(qiáng)它的功能。
AuxiliaryServices命满,會(huì)在Application第一次啟動(dòng)Container涝滴,每個(gè)Container的啟動(dòng)和結(jié)束,以及Application完成時(shí)收到通知胶台,并執(zhí)行其中預(yù)定義的操作歼疮。
在一個(gè)Container啟動(dòng)時(shí),AuxiliaryServices相關(guān)的信息诈唬,會(huì)返回給ApplicationMaster韩脏。這樣,ApplicationMaster就能夠接收AuxliaryServices中我們希望它知道的信息铸磅。比如赡矢,在MapReduce中,會(huì)通過這種方式獲得ShuffleHandler的端口信息愚屁。
ContainersMonitor會(huì)監(jiān)控Container占用的資源是否超過了給它配制的最大值济竹,如果是,則將它Kill掉霎槐。
Log Handler負(fù)責(zé)決定是在這個(gè)NodeManager保存Container的日志送浊,還是將它壓縮打包之后,上傳到某個(gè)文件系統(tǒng)上丘跌。
ContainerExecutor: 負(fù)責(zé)從操作系統(tǒng)層面啟動(dòng)Container袭景。
NodeHealthCheckerService: 這個(gè)組件會(huì)通知經(jīng)常執(zhí)行預(yù)先配制的檢查腳本,來檢查Node是否有問題闭树。此外耸棒,它還可以通過創(chuàng)建臨時(shí)文件的方式,檢查Node的磁盤是否有問題报辱。每一次這個(gè)信息修改与殃,都會(huì)被發(fā)送給NodeStatusUpdater。最后被發(fā)送給ResourceManager.
ContainerTokenSecretManager: 用于驗(yàn)證ApplicationMaster讓NodeManager啟動(dòng)的Container,都經(jīng)過ResourceManager驗(yàn)證過。
Web Server: 提供一個(gè)Web界面幅疼,里面包含了Application列表米奸,Node狀態(tài),Container日志等信息爽篷。
ApplicationMaster
一旦ApplicationMaster成功啟動(dòng)后悴晰,那么它就要做這些事情:
- 和ResourceManager保持連接,定期向ResourceManager發(fā)送heartbeat
- 計(jì)算一個(gè)Application需要的Resource
- 通過ResourceRequest的形式逐工,跟ResourceManager溝通铡溪,讓ResourceManager給它分配Container
- 和NodeManager溝通來加載Container
- 跟蹤C(jī)ontainer的狀態(tài)
- 處理Container故障或者Node故障的問題
當(dāng)ApplicationMaster注冊(cè)到ResourceManager時(shí),它可以向ResourceManager發(fā)送IPC address或者Web URL. 而ResourceManager作為響應(yīng)泪喊,會(huì)返回給它一些它需要的信息棕硫,比如,ResourceManager能夠接受的最小以及最大的Resource的限制, Application的ACL等窘俺。
在ApplicationMaster成功注冊(cè)到ResourceManager之后饲帅,它就需要不間斷地向ResourceManager發(fā)送心跳信息,保證ResourceManager知道它還存活瘤泪。
如果ApplicationMaster積累了足夠多的ResourceRequest,或者已經(jīng)到了再次發(fā)送heartbeat的時(shí)候了育八,那么它就會(huì)通過heartbeat信息对途,將這些ResourceRequest發(fā)送給ResourceManager.
ResourceRequest是ApplicationMaster發(fā)送給ResourceManager的用于請(qǐng)求Resource的一個(gè)數(shù)據(jù)結(jié)構(gòu)。它包含了:
- Priority of the request
- Resource location髓棋。當(dāng)前接受一臺(tái)主機(jī)的名稱或者一個(gè)機(jī)架的名稱实檀。有一個(gè)比較特殊的值,"*"代表任何主機(jī)或者機(jī)架都可以按声。
- 請(qǐng)求的各種資源膳犹。比如內(nèi)存,CPU签则。
- Container的數(shù)量须床,以及對(duì)應(yīng)的Priority和Resource location.
- relaxLocality flag。這個(gè)flag用于告訴ResourceManager如果不能在指定的Resource location上面分配渐裂,是否選擇一個(gè)與它相鄰的豺旬。
當(dāng)ApplicationMaster從ResourceManager中取到Container之后,它就開始在NodeManager上真正啟動(dòng)這個(gè)Container柒凉。
ApplicationMaster會(huì)構(gòu)造一個(gè)ContainerLaunchContext對(duì)象族阅,這個(gè)對(duì)象中,包含了運(yùn)行一個(gè)Container所需要的全部信息膝捞,比如坦刀,ResourceManager分配給這個(gè)容器的Resource,一些token,Container要執(zhí)行的命令鲤遥,環(huán)境變量等沐寺。它既可以一個(gè)一個(gè)地啟動(dòng)這些Container,也可以一次把它們?nèi)繂?dòng)起來渴频。
在NodeManager接收到AppliationMaster的請(qǐng)求之后芽丹,它會(huì)發(fā)送一個(gè)列表作為響應(yīng),里面包含了已經(jīng)成功啟動(dòng)的Container卜朗,以及失敗的Container拔第,以及NodeManager上全部AuxiliaryService相關(guān)的元數(shù)據(jù)。
ApplicationMaster也可以告訴NodeManager來停止Contaienr场钉,通過發(fā)送一個(gè)StopContainersRequest蚊俺,這個(gè)請(qǐng)求包含了要停止的Container的ID。NodeManager會(huì)回復(fù)一個(gè)StopContainersResponse逛万,告訴ApplicationMaster哪些Container已經(jīng)成功停止泳猬。
此外,處理Container失敗的情況宇植,是Application的責(zé)任. YARN只是將集群中的資源暴露給Application得封。
所以,ApplicationMaster需要觀察Container的狀態(tài)指郁,exit code忙上,以及一些診斷信息。例如闲坎,當(dāng)MapReduce ApplicationMaster知道一個(gè)Container失敗之后疫粥,它會(huì)不斷重試這個(gè)Map或者Reducer,通過跟ResourceManager溝通分配Container腰懂。直到達(dá)到了指定的最大重試閾值梗逮。
此外,ApplicationMaster也需要在它自己發(fā)生錯(cuò)誤并恢復(fù)后绣溜,恢復(fù)之前的Applicaiton的信息慷彤。當(dāng)一個(gè)ApplicationMaster發(fā)生錯(cuò)誤之后,ResourceManager只會(huì)啟動(dòng)一個(gè)新的ApplicationAttempt涮毫,并為其分配一個(gè)ApplicationMaster瞬欧。這個(gè)新的ApplicationMaster應(yīng)該能夠自動(dòng)檢索舊的ApplicationMaster中的Application的信息。當(dāng)然罢防,如果從頭再運(yùn)行一個(gè)也是可以的艘虎。但是畢竟性能可能低一些。
在MapReduce中咒吐,ApplicationMaster會(huì)恢復(fù)已經(jīng)完成的Task野建,而那些在ApplicationMaster恢復(fù)過程中仍在運(yùn)行的Task属划,則會(huì)被Kill掉。
當(dāng)一個(gè)ApplicationMaster已經(jīng)完成了它的全部工作之后候生,它應(yīng)該向ResourceManager發(fā)送一個(gè)FinishApplicationRequest的請(qǐng)求同眯,來取消注冊(cè)。在這個(gè)請(qǐng)求中唯鸭,ApplicationMaster可以告訴ResourceManager一個(gè)IPC以及Web URL须蜗,讓Client能夠檢索這個(gè)Application的歷史信息。
總結(jié)
在這篇文章中目溉,我們?cè)敿?xì)闡述了ResourceManager明肮,NodeManager以及ApplicationMaster的作用。