一诺祸、什么是YARN
Hadoop YARN是一種新的Hadoop資源管理器旁振,雖然是Hadoop的組件揣钦,但是它被設(shè)計(jì)成一個(gè)通用的資源管理系統(tǒng)和調(diào)度平臺雳灾,可為上層應(yīng)用提供統(tǒng)一的資源管理和調(diào)度。YARN的引入為集群在利用率冯凹、資源統(tǒng)一管理和數(shù)據(jù)共享等方面帶來了巨大的好處谎亩。
二、為什么需要YARN
在Hadoop1.x時(shí)代宇姚,資源管理和任務(wù)的調(diào)度工作是MapReduce承擔(dān)的匈庭,到了Hadoop2.x,這兩個(gè)功能才被從MapReduce中拆出來單獨(dú)形成了YARN組件:
資源管理浑劳,負(fù)責(zé)為任務(wù)提供集群的硬件資源阱持,比如內(nèi)存、CPU之類的魔熏;
調(diào)度平臺衷咽,當(dāng)有多個(gè)任務(wù)需要執(zhí)行資源的時(shí)候,YARN負(fù)責(zé)規(guī)劃和調(diào)度蒜绽;
YARN有點(diǎn)類似我們的操作系統(tǒng)镶骗,它不僅僅支持MapReduce計(jì)算框架,理論上能支持任何計(jì)算框架躲雅,YARN并不關(guān)心程序怎么執(zhí)行卖词,只關(guān)心任務(wù)程序需要什么資源,需要多少資源吏夯,用完之后歸還資源此蜈,正因?yàn)榇耍髞淼挠?jì)算框架比如Spark噪生、Storm裆赵、Tez等計(jì)算框架都可以在HDFS和YARN的基礎(chǔ)上構(gòu)建起來。
三跺嗽、YARN是怎么工作的
YARN集群中總共可以分為如下五種角色:
Client战授,提交任務(wù)的客戶端;
ResourceManager桨嫁,YARN集群的主角色植兰,負(fù)責(zé)接收客戶端的作業(yè)提交,管理和分配各個(gè)機(jī)器節(jié)點(diǎn)上的資源璃吧,通俗的說楣导,它負(fù)責(zé)監(jiān)控和管理集群的資源;
NodeManager畜挨,YARN集群的從角色筒繁,每個(gè)機(jī)器節(jié)點(diǎn)上都有一個(gè)噩凹,負(fù)責(zé)管理本機(jī)器節(jié)點(diǎn)上的資源,會根據(jù)ResourceManager的命令來在本機(jī)器上啟動和監(jiān)視容器資源的使用情況并報(bào)告給ResourceManager毡咏;
ApplicationMaster(AM)驮宴,客戶端提交的每一個(gè)任務(wù)作業(yè)會對應(yīng)一個(gè)AM,用來為作業(yè)的各個(gè)階段申請資源呕缭,并監(jiān)控作業(yè)所有Container的運(yùn)行情況堵泽,并匯報(bào)給ResourceManager,它是當(dāng)前計(jì)算任務(wù)的管家恢总;
Container容器落恼,任務(wù)被隔離在容器中運(yùn)行,相互之間不影響离熏,如上的ApplicationMaster、MapReduce中的MapTask和ReduceTask都是以容器的方式運(yùn)行在集群中戴涝;
一個(gè)任務(wù)從提交到執(zhí)行完畢的大致流程如下:
- 客戶端向ResourceManager提交任務(wù)滋戳;
- ResourceManager為該任務(wù)分配第一個(gè)容器,并告知對應(yīng)的NodeManager啥刻,要求它在這個(gè)容器內(nèi)啟動該任務(wù)的ApplicationMaster奸鸯;
- ApplicationMaster啟動后,向ResourceManager注冊并保持通信可帽,如此用戶可以通過ResourceManager實(shí)時(shí)查看任務(wù)的處理進(jìn)度和狀態(tài)娄涩;
- ApplicationMaster為本次任務(wù)需要執(zhí)行的所有Task向ResourceManager申請資源;
- ApplicationMaster申請到資源后與分配到的NodeManager通信映跟,要求啟動這些任務(wù)蓄拣;
- NodeManager啟動任務(wù)容器;
- 各個(gè)任務(wù)容器定時(shí)向ApplicationMaster匯報(bào)自己的狀態(tài)和進(jìn)度努隙,讓ApplicationMaster掌握整個(gè)任務(wù)作業(yè)的執(zhí)行進(jìn)度和狀態(tài)球恤;
- ApplicationMaster監(jiān)測到任務(wù)作業(yè)執(zhí)行完畢后,向ResourceManager注銷并關(guān)閉自己荸镊;
當(dāng)有多個(gè)任務(wù)都提交時(shí)咽斧,集群的資源總是有限的,所以此時(shí)YARN該如何調(diào)度這些任務(wù)執(zhí)行從而合理地利用集群資源呢躬存?這個(gè)工作就主要由ResourceManager中的Scheduler組件負(fù)責(zé)张惹。通常提供如下三種調(diào)度策略:
- FIFO,先進(jìn)先出調(diào)度器岭洲,資源先到先得宛逗,任務(wù)優(yōu)先級高低不能影響執(zhí)行的先后順序,適用于負(fù)載較低的小規(guī)模集群盾剩;
- Capacity拧额,容量調(diào)度器碑诉,是默認(rèn)的調(diào)度器,每個(gè)組織可以獨(dú)享擁有自己的資源隊(duì)列侥锦,組織提交的任務(wù)都會被調(diào)度到自己的資源隊(duì)列中執(zhí)行进栽,從而確保組織自己有資源上下限來運(yùn)行任務(wù),不會被別的組織占有恭垦,但是組織自己隊(duì)列中的任務(wù)是FIFO模式的快毛;
- Fair,公平調(diào)度器番挺;在Capacity的基礎(chǔ)上唠帝,允許任務(wù)在多個(gè)隊(duì)列間工作,允許資源的共享和搶占玄柏,從而使得每個(gè)組織隊(duì)列的任務(wù)都能得到執(zhí)行的情況下襟衰,合理利用空閑資源供給別的隊(duì)列的任務(wù)使用;