Yarn框架和工作流程研究
????將公司集群升級(jí)到Y(jié)arn已經(jīng)有一段時(shí)間,自己也對(duì)Yarn也研究了一段時(shí)間,現(xiàn)在開始記錄一下自己在研究Yarn過程中的一些筆記。這篇blog主要主要從大體上說說Yarn的基本架構(gòu)以及其各個(gè)組件的功能。另外,主要將Yarn和MRv1做詳細(xì)對(duì)比,包括Yarn相對(duì)于MRv1的各種改進(jìn)。最后,大概說說Yarn的工作流情況。
二、Yarn和MRv1對(duì)比
(1)擴(kuò)展性對(duì)比。
????在MRv1中,JobTracker是個(gè)重量級(jí)組件,集中了資源管理分配、作業(yè)控制兩大核心功能,隨著集群規(guī)模的增大,JobTracker處理各種RPC請(qǐng)求負(fù)載過重,這也是系統(tǒng)的最大瓶頸,嚴(yán)重制約了Hadoop集群的擴(kuò)展性。相比之下,Yarn將JobTracker功能進(jìn)行了拆分,拆分為全局組件ResourceManager、應(yīng)用組件ApplicationMaster和JobHistoryServer。其中,ResourceManager負(fù)載整個(gè)系統(tǒng)資源的管理和分配,ApplicationMaster負(fù)載單個(gè)應(yīng)用程序的相關(guān)管理(job的管理),JobHistoryServer負(fù)載日志的展示和收集工作。Yarn的這種功能拆分,將減輕了master節(jié)點(diǎn)的負(fù)載,其處理的RPC請(qǐng)求的壓力得到減少。其實(shí)換句話Yarn是將這種負(fù)載進(jìn)行了橫向轉(zhuǎn)移到子節(jié)點(diǎn),這個(gè)可以通過ApplicationMaster(簡稱APP Mstr)的機(jī)制體現(xiàn),APP Mstr是運(yùn)行在其中一個(gè)子節(jié)點(diǎn),運(yùn)行在其他各個(gè)子節(jié)點(diǎn)的Task只需要向App Mstr發(fā)送相關(guān)的RPC請(qǐng)求來匯報(bào)task運(yùn)行情況就ok,而不需要直接和master節(jié)點(diǎn)的相關(guān)進(jìn)行進(jìn)行RPC通訊。這個(gè)就將MRv1的Master/slave轉(zhuǎn)化為了Master/slave混雜slave/slave的這種結(jié)構(gòu)。
????另外,Hadoop1.x擴(kuò)展性差問題不僅僅體現(xiàn)在MRv1框架中,提體現(xiàn)在HDSF中。Yarn為了解決這個(gè)問題,提出了HDFS Federation,它可以允許集群中啟動(dòng)多個(gè)NameNode來分管不同目錄的元數(shù)據(jù)進(jìn)而實(shí)現(xiàn)了訪問隔離和橫向擴(kuò)展問題,同時(shí)HDFS Federation的提出也徹底解決了hadoop1.x的NameNode單點(diǎn)故障問題。
(2)資源利用率對(duì)比。
????MRv1的資源管理分配模型是基于槽位的,槽位是一個(gè)相當(dāng)粗粒度的系統(tǒng)資源單位,一個(gè)槽位是系統(tǒng)一定cpu、內(nèi)存、網(wǎng)絡(luò)、IO等資源的抽象。一個(gè)Slot只能啟動(dòng)一個(gè)Task,關(guān)鍵的是一個(gè)Task未必用完一個(gè)Slot所對(duì)應(yīng)的系統(tǒng)資源,但是它又占著不給別的Task使用,這就造成了浪費(fèi)。另外,在MRv1中Slot還被分為了Reduce Solt和Map Slot,Reudce solt只能啟動(dòng)Reduce Task,Map Slot只能啟動(dòng)Map Task,這兩種Slot不允許共享,因此常常會(huì)導(dǎo)致一種Slot資源相當(dāng)緊張而另外一種Slot資源卻是空閑的。例如,當(dāng)一個(gè)Job剛剛被提交的時(shí)候,只有當(dāng)Map Task完成數(shù)據(jù)為總數(shù)量的5%(默認(rèn))時(shí),Reduce Task才會(huì)啟動(dòng),那么此時(shí)的Reudce Slot就是被閑置浪費(fèi)了。相比之下,Yarn就克服了上面的問題,Yarn的資源抽象單位container是細(xì)粒度的,而且是動(dòng)態(tài)的(目前Yarn版本中只支持cpu和內(nèi)存的動(dòng)態(tài)分配),他可以為不同的Task需求進(jìn)行分配,而且container是部分種類的,在MRv框架中可以同時(shí)被Map Task和Reduce Task使用。
(3)安全穩(wěn)定性對(duì)比。
????Hadoop1.x對(duì)應(yīng)的HDFS版本中NameNode是存在單點(diǎn)故障的,但是Yarn通過HFDS Federation的提出完美地解決了這個(gè)棘手問題。
(4)基本架構(gòu)特性對(duì)比。
????MRv1是單純地為離線框架Map Reduce打造的,而這種離線計(jì)算機(jī)框架不能滿足現(xiàn)在需求了,一些更有針對(duì)性的框架被開發(fā)出來,如Spark、storm、DAG計(jì)算機(jī)框架Tez。這些新的框架無法運(yùn)行在MRv1上。相比之下,Yarn是一個(gè)獨(dú)立的資源管理系統(tǒng),其資源和計(jì)算機(jī)框架是被分離開來的,你可以在Yarn上同時(shí)運(yùn)行MR APP、Spark APP、MPI APP等等。
三、Yarn基本架構(gòu)以及各個(gè)組件負(fù)責(zé)功能
????Yarn在整體上看還是采用了和Hadoop1.x一樣的Master/Slave結(jié)構(gòu)(橫向擴(kuò)展混雜Slave/Slave結(jié)構(gòu)),在整個(gè)Yarn資源管理系統(tǒng)當(dāng)中,ResourceManager作為Master,各個(gè)節(jié)點(diǎn)的NodeManager作為Slave。各個(gè)節(jié)點(diǎn)上NodeManager的資源由ResourceManager統(tǒng)計(jì)進(jìn)行管理和調(diào)度。當(dāng)應(yīng)用程序提交后,會(huì)有一個(gè)單獨(dú)的Application來對(duì)該應(yīng)用程序進(jìn)行跟蹤和管理,同時(shí)該Application還會(huì)為該應(yīng)用程序想Resource申請(qǐng)資源,并要求NodeManager啟動(dòng)該應(yīng)用程序占用一定資源的任務(wù)。下圖主要以MR和MPI這兩種應(yīng)用來描述Yarn運(yùn)行的基本架構(gòu):
基本組件介紹:
1、ResourceManager
????ResourceManager是Yarn的核心組件,主要由任務(wù)調(diào)度器(YarnScheduler)和應(yīng)用程序管理器(Applications Manager)組成。其主要功能是負(fù)責(zé)系統(tǒng)資源的管理和分配。
-
任務(wù)調(diào)度器(YarnScheduler)
????任務(wù)調(diào)度器根據(jù)系統(tǒng)資源容量以及管理員對(duì)隊(duì)列的限制條件,按照一定的策略將資源分配給正在運(yùn)行的應(yīng)用程序。相比于Hadoop1.x而言,Yarn為任務(wù)調(diào)度器做了減負(fù),任務(wù)調(diào)度器不再負(fù)責(zé)跟蹤和監(jiān)控應(yīng)用的執(zhí)行狀態(tài),也不負(fù)責(zé)重新啟動(dòng)因?yàn)閼?yīng)用執(zhí)行失敗或者硬件故障而運(yùn)行失敗的任務(wù),這些任務(wù)都有該應(yīng)用程序?qū)?yīng)的ApplicationMaster來負(fù)責(zé)了,這使得YarnScheduler的功能更加純粹。另外,任務(wù)調(diào)度器和Hadoop1.x一樣也是一個(gè)熱插拔模塊,你可以自定義自己的任務(wù)調(diào)度器,同樣你也可以直接使用其他任務(wù)調(diào)度器,如,Fair Scheduler或者Capacity Scheduler。
-
應(yīng)用程序管理器(Applications Manager)
????應(yīng)用程序管理器,負(fù)責(zé)管理整個(gè)系統(tǒng)中所有應(yīng)用程序,包括應(yīng)用程序提交、向任務(wù)調(diào)度器申請(qǐng)資源啟動(dòng)ApplicationMaster、監(jiān)控ApplicationMaster運(yùn)行狀態(tài)并在失敗時(shí)重新啟動(dòng)它。
-
其他
????ResourceManager中還包含了其他組件,如ResourceTrackerService用來直接處理心跳,NMLivelinessMonitor用來監(jiān)控NodeManager,NodesListManager 提供NodeManager的黑白名單等等。
2、ApplicationMaster(AM)
????每當(dāng)用戶提交了一個(gè)應(yīng)用程序就會(huì)為這個(gè)應(yīng)用程序產(chǎn)生一個(gè)對(duì)應(yīng)的ApplicationMaster,并且這個(gè)這個(gè)單獨(dú)進(jìn)程是在其中一個(gè)子節(jié)點(diǎn)上運(yùn)行的。它的主要功能:為應(yīng)用向ResourceManager申請(qǐng)資源、在job對(duì)Task實(shí)行調(diào)度、與NodeManager通信以啟動(dòng)或者停止任務(wù)、監(jiān)控所有任務(wù)的運(yùn)行情況,并且在任務(wù)失敗的情下,重新為任務(wù)申請(qǐng)資源并且重啟任務(wù)、負(fù)責(zé)推測(cè)任務(wù)的執(zhí)行、當(dāng)ApplicationMaster向ResourceManager注冊(cè)后,ApplicationMaster可以提供客戶端查詢作業(yè)進(jìn)度信息等。
3、NodeManager(NM)
????NM是每個(gè)子節(jié)點(diǎn)上的資源和任務(wù)管理器,一方面,它會(huì)定向通過心跳信息向RM匯報(bào)本節(jié)點(diǎn)上的資源使用情況和各個(gè)Container的運(yùn)行情況;另一方面,它會(huì)接收并且處理來自AM的Container啟動(dòng)和停止的各種請(qǐng)求。它的能有點(diǎn)像Hadoop1.x中的TaskTracker。
4、Container
????Container是Yarn中對(duì)系統(tǒng)資源的抽象,同時(shí)它也是系統(tǒng)資源分配的基本單位,它封裝節(jié)點(diǎn)上多維度資源,其中包括CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)等。Yarn會(huì)為每個(gè)任務(wù)分配一個(gè)Container,并且該任務(wù)只能夠使用該Container中所描述的資源。值得關(guān)注的的是,Yarn中的Container和MRv1中的Slot是完全不同的,Container是一個(gè)動(dòng)態(tài)的資源劃分單位,它是根據(jù)實(shí)際提交的應(yīng)用程序所需求的資源自動(dòng)生成的,換句話說,Container其里邊所描述的CPU、內(nèi)存等資源是根據(jù)實(shí)際應(yīng)用程序需求而變的。而Slot是一個(gè)靜態(tài)的資源抽象單位,每一個(gè)同類型的Slot所描述的資源信息都是一樣的。
四、Yarn工作流
????當(dāng)用戶給Yarn提交了一個(gè)應(yīng)用程序后,Yarn的主要工作流程如下圖:
-
步驟1,用戶向Yarn提交應(yīng)用程序,其中包括用戶程序、相關(guān)文件、啟動(dòng)ApplicationMaster命令、ApplicationMaster程序等。
-
步驟2,ResourceManager為該應(yīng)用程序分配第一個(gè)Container,并且與Container所在的NodeManager通信,并且要求該NodeManager在這個(gè)Container中啟動(dòng)應(yīng)用程序?qū)?yīng)的ApplicationMaster。
-
步驟3,ApplicationMaster首先會(huì)向ResourceManager注冊(cè),這樣用戶才可以直接通過ResourceManager查看到應(yīng)用程序的運(yùn)行狀態(tài),然后它為準(zhǔn)備為該應(yīng)用程序的各個(gè)任務(wù)申請(qǐng)資源,并監(jiān)控它們的運(yùn)行狀態(tài)直到運(yùn)行結(jié)束,即重復(fù)后面4~7步驟。
-
步驟4,ApplicationMaster采用輪詢的方式通過RPC協(xié)議向ResourceManager申請(qǐng)和領(lǐng)取資源。
-
步驟5,一旦ApplicationMaster申請(qǐng)到資源后,便會(huì)與申請(qǐng)到的Container所對(duì)應(yīng)的NodeManager進(jìn)行通信,并且要求它在該Container中啟動(dòng)任務(wù)。
-
步驟6,任務(wù)啟動(dòng)。NodeManager為要啟動(dòng)的任務(wù)配置好運(yùn)行環(huán)境,包括環(huán)境變量、JAR包、二進(jìn)制程序等,并且將啟動(dòng)命令寫在一個(gè)腳本里,通過該腳本運(yùn)行任務(wù)。
-
步驟7,各個(gè)任務(wù)通過RPC協(xié)議向其對(duì)應(yīng)的ApplicationMaster匯報(bào)自己的運(yùn)行狀態(tài)和進(jìn)度,以讓ApplicationMaster隨時(shí)掌握各個(gè)任務(wù)的運(yùn)行狀態(tài),從而可以再任務(wù)運(yùn)行失敗時(shí)重啟任務(wù)。
-
步驟8,應(yīng)用程序運(yùn)行完畢后,其對(duì)應(yīng)的ApplicationMaster會(huì)向ResourceManager通信,要求注銷和關(guān)閉自己。
?
? 這個(gè)需要注意的是在整個(gè)工作流程當(dāng)中,ResourceManager和NodeManager都是通過心跳保持聯(lián)系的,NodeManager會(huì)通過心跳信息向ResourceManager匯報(bào)自己所在節(jié)點(diǎn)的資源使用情況。
五、總結(jié)
????本文主要介紹了Yarn和Hadoop1.x的一些區(qū)別,以比較粗粒度的方式介紹了Yarn的基本架構(gòu)以及其組成的各個(gè)組件功能。另外,簡單的研究了Yarn的工作流程。
轉(zhuǎn)載于:https://www.cnblogs.com/itboys/p/9184381.html
總結(jié)
以上是生活随笔為你收集整理的Yarn框架和工作流程研究的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vim编辑器笔记
- 下一篇: Ant build.xml程序简单说明