簡介
Yarn是Hadoop生態(tài)圈中的一個通用資源管理系統(tǒng)和調(diào)度平臺,產(chǎn)生于Hadoop2。可為上層應(yīng)用提供統(tǒng)一的資源管理和調(diào)度伯病,它的引入為集群在利用率、資源統(tǒng)一管理和數(shù)據(jù)共享等方面帶來了巨大好處否过。
產(chǎn)生的背景
Yarn是在Hadoop MRv1基礎(chǔ)上演化而來的狱从,它克服了MRv1中的各種局限性,提升了集群資源利用率叠纹,降低了運維成本,支持多種計算框架(如MR2,Spark,Flink等)敞葛,并能夠使這些計算框架共享數(shù)據(jù)誉察。
YARN基本架構(gòu)
Yarn總體上仍然是Master/Slave結(jié)構(gòu),在整個資源管理框架中惹谐,ResourceManager為Master持偏,NodeManager為Slave,ResourceManager負(fù)責(zé)對各個NodeManager上的資源進(jìn)行統(tǒng)一管理和調(diào)度氨肌。當(dāng)用戶提交一個應(yīng)用程序時鸿秆,需要提供一個用以跟蹤和管理這個程序的ApplicationMaster,它負(fù)責(zé)向ResourceManager申請資源怎囚,并要求NodeManger啟動可以占用一定資源的任務(wù)卿叽。由于不同的ApplicationMaster被分布到不同的節(jié)點上,因此它們之間不會相互影響恳守。
1. ResourceManager(RM)
RM是一個全局的資源管理器,負(fù)責(zé)整個系統(tǒng)的資源管理和分配考婴。它主要由兩個組件構(gòu)成:調(diào)度器(Scheduler)和應(yīng)用程序管理器(Applications Manager,ASM)
-
調(diào)度器(Scheduler)
調(diào)度器根據(jù)容量催烘、隊列等限制條件(如每個隊列分配一定的資源沥阱,最多執(zhí)行一定數(shù)量的作業(yè)等),將系統(tǒng)中的資源分配給各個正在運行的應(yīng)用程序伊群。需要注意的是考杉,該調(diào)度器是一個“純調(diào)度器”,它處理任何與具體應(yīng)用程序相關(guān)的工作舰始,比如不負(fù)責(zé)監(jiān)控或者跟蹤應(yīng)用的執(zhí)行狀態(tài)等崇棠,也不負(fù)責(zé)重新啟動因應(yīng)用執(zhí)行失敗或者硬件故障而產(chǎn)生的失敗任務(wù)陪毡,這些均交由應(yīng)用程序相關(guān)的ApplicationMaster完成煌寇。調(diào)度器僅根據(jù)各個應(yīng)用程序的資源需求進(jìn)行資源分配,而資源分配單位用一個抽象概念Container表示萧吠,Container是一個動態(tài)資源分配單位,它將內(nèi)存抽莱、CPU范抓、磁盤、網(wǎng)絡(luò)等資源封裝在一起食铐,從而限定每個任務(wù)使用的資源量匕垫。此外,該調(diào)度器是一個可插拔的組件虐呻,用戶可根據(jù)自己的需要設(shè)計新的調(diào)度器象泵,YARN提供了多種直接可用的調(diào)度器,比如Fair Scheduler和Capacity Scheduler等斟叼。
-
應(yīng)用程序管理器(Applications Manager偶惠,ASM)
應(yīng)用程序管理器負(fù)責(zé)管理整個系統(tǒng)中所有應(yīng)用程序,包括應(yīng)用程序提交朗涩、與調(diào)度器協(xié)商資源以啟動ApplicationMaster忽孽、監(jiān)控ApplicationMaster運行狀態(tài)并在失敗時重新啟動它等。
2. ApplicationMaster(AM)
用戶提交的每個應(yīng)用程序均包含一個AM谢床,主要功能包括:
- 與RM調(diào)度器協(xié)商以獲取資源(以Container表示)
- 將得到的資源(container)分配給具體的任務(wù)
- 與NM通信,去啟動/停止任務(wù)
- 監(jiān)控所有任務(wù)運行狀態(tài)兄一,并在任務(wù)失敗時重新為任務(wù)申請資源以重啟任務(wù)
3. NodeManager(NM)
NM是每個節(jié)點上的資源和任務(wù)管理器。
- NM定時地向RM匯報本節(jié)點的資源使用情況和Container運行狀態(tài)
- NM接受并處理來自AM的Container啟動/停止等各種請求
4. Container
Container是YARN中的資源抽象识腿,它封裝了某個節(jié)點上的多維資源出革,如CPU、內(nèi)存渡讼、磁盤骂束、網(wǎng)絡(luò)等。當(dāng)AM向RM申請資源時成箫,RM向AM返回的資源便是用Container表示的栖雾。YARN會為每個任務(wù)分配一個Container,且該任務(wù)只能使用該Container中描述的資源伟众。Container是一個動態(tài)資源劃分單位析藕,是根據(jù)應(yīng)用程序的需求自動生成的。目前凳厢,YARN僅支持CPU和內(nèi)存兩種資源账胧。
Yarn工作流程
運行在Yarn上的應(yīng)用程序主要分為兩類:短應(yīng)用程序和長應(yīng)用程序。其中先紫,短應(yīng)用程序是指一定時間內(nèi)可運行完成并正常退出的應(yīng)用程序治泥,如:MapReduce作業(yè)、Spark DAG作業(yè)等遮精。長應(yīng)用程序是指不出意外居夹,永不終止運行的應(yīng)用程序败潦,通常是一些服務(wù),比如Spark Streaming准脂,HBase等劫扒。
當(dāng)用戶向Yarn中提交一個應(yīng)用程序后,Yarn將分兩個階段運行該應(yīng)用程序:第一階段是啟動ApplicationMaster狸膏。第二階段是由ApplicationMaster創(chuàng)建應(yīng)用程序沟饥,為它申請資源,并監(jiān)控它的整個運行過程湾戳,直到運行完成贤旷。如下圖:
用戶通過Client向Yarn中提交應(yīng)用程序,其中包括ApplicationMaster程序砾脑、啟動ApplicationMaster的命令幼驶、用戶程序等。
ResourceManager為該應(yīng)用程序分配第一個Container韧衣,并與對應(yīng)的NodeManager通信县遣,要求它在這個Container中啟動應(yīng)用程序的ApplicationMaster。
ApplicationMaster首先向ResourceManager注冊汹族,這樣用戶就可以直接通過ApplicationMaster查看應(yīng)用程序的運行狀態(tài),然后它將為各個任務(wù)申請資源其兴,并監(jiān)控它的運行狀態(tài)顶瞒,直到運行結(jié)束,即重復(fù)步驟4~7元旬。
ApplicationMaster采用輪詢的方式通過RPC協(xié)議向ResourceManager申請和領(lǐng)取資源榴徐。
一旦ApplicationMaster申請到資源后,便與對應(yīng)的NodeManager通信匀归,要求它啟動任務(wù)坑资。
NodeManager為任務(wù)設(shè)置好運行環(huán)境(包括環(huán)境變量、JAR包穆端、二進(jìn)制程序等)后袱贮,將任務(wù)啟動命令寫到一個腳本中,并通過運行該腳本啟動任務(wù)体啰。
各個任務(wù)通過某個RPC協(xié)議向ApplicationMaster匯報自己的狀態(tài)和進(jìn)度攒巍,ApplicationMaster可隨時掌握各個任務(wù)的運行狀態(tài),從而可以在任務(wù)失敗時重新啟動任務(wù)荒勇。
應(yīng)用程序運行完成后柒莉,ApplicationMaster向ResourceManager注銷并關(guān)自己。