Yarn在Hadoop中的位置
Yarn的優(yōu)點(diǎn)
- YARN把JobTracker分為ResouceManager和ApplicationMaster,ResouceManager專管整個(gè)集群的資源管理和調(diào)度独旷,而ApplicationMaster則負(fù)責(zé)應(yīng)用程序的任務(wù)調(diào)度和容錯(cuò)等
- YARN不再是一個(gè)單純的計(jì)算框架藏古,而是一個(gè)框架管理器豆胸,用戶可以將各種各樣的計(jì)算框架移植到Y(jié)ARN之上,由YARN進(jìn)行統(tǒng)一管理和資源分配
- 對(duì)于資源的表示以內(nèi)存和CPU為單位,比之前slot 更合理(slot是 Hadoop的資源單位,Hadoop利用slots來(lái)管理分配節(jié)點(diǎn)的資源桨螺。每個(gè)Job申請(qǐng)資源以slots為單位)hadoop中slot簡(jiǎn)介(map slot 和 reduce slot)
Yarn架構(gòu)
YARN主要由ResouceManager、NodeManager酿秸、ApplicationMaster和Container等4個(gè)組件構(gòu)成
ResourceManager :
處理客戶端請(qǐng)求
啟動(dòng)和監(jiān)控ApplicationMaster
監(jiān)控NodeManager
資源的分配與調(diào)度
NodeManager:
管理單個(gè)節(jié)點(diǎn)上的資源
處理來(lái)自ResourceManager的命令
處理來(lái)自ApplicationMaster的命令
ApplicationMaster:
為應(yīng)用程序申請(qǐng)資源并分配給內(nèi)部的任務(wù)
任務(wù)的監(jiān)控與容錯(cuò)
Container:
對(duì)任務(wù)運(yùn)行環(huán)境進(jìn)行抽象灭翔,封裝CPU、內(nèi)存等資源
MapRuduce在Yarn中的工作機(jī)制
1)客戶端向resourcemanager發(fā)送job請(qǐng)求允扇,客戶端產(chǎn)生Runjar進(jìn)程與resourcemanager通過(guò)rpc通信
2)resourcemanager向客戶端 回Job相關(guān)資源的提交路徑以以及jobID
3)客戶端將Job相關(guān)的資源提交到相應(yīng)的共享文件系統(tǒng)的路徑下(eg.HDFS)
4)客戶端向resourcemanager提交job
5)resourcemanager通過(guò)調(diào)度器在nodemanager創(chuàng)建一個(gè)容器缠局,并在容器中啟用 MRAppMaster進(jìn)程(該進(jìn)程由resourcemanager啟動(dòng))。
6)該MRAppMaster進(jìn)程對(duì)作業(yè)進(jìn)行初始化考润,創(chuàng)建多個(gè)對(duì)象對(duì)作業(yè)進(jìn)行跟蹤狭园。
7)MRAppMaster從共享文件系統(tǒng)中獲得計(jì)算到的輸入分片(只獲取分片信息,不需要jar等相關(guān)資源)糊治,為每一個(gè)分片創(chuàng)建一個(gè)map以及指定數(shù)量的reduce對(duì)象唱矛。之后 MRAppMaster決定如何運(yùn)行構(gòu)成mapreduce作業(yè)的各個(gè)任務(wù),如果作業(yè)很小井辜,則與 MRAppMaster在同一個(gè)JVM上運(yùn)行
8)若作業(yè)很大绎谦,則MRAppMaster會(huì)為所有map任務(wù)和reduce任務(wù)向resourcemanager發(fā)起申請(qǐng)容器資源請(qǐng)求。請(qǐng)求中包含了map任務(wù)的數(shù)據(jù)本地化信息以及輸入分片等信息粥脚。
9)Resourcemanager為任務(wù)分配了容器之后窃肠,MRAppMaster就通過(guò)與NodeManager通信啟動(dòng)容器,由MRAppMaster負(fù)責(zé)分配在那些nodemanager上運(yùn)行map(即 YarnChild進(jìn)程)和reduce任務(wù)刷允。
10)運(yùn)行map和reduce任務(wù)的nodemanager從系統(tǒng)中獲取job相關(guān)資源冤留,包括 jar文件,配置文件等树灶。
11)運(yùn)行map和reduce任條纤怒。
12)關(guān)于狀態(tài)的檢測(cè)與更新不經(jīng)過(guò)resourcemanager:任務(wù)周期性的向MRAppMaster匯報(bào)狀態(tài)及進(jìn)度,客戶端每秒鐘通過(guò)查詢一次MRAppMaster獲取狀態(tài)更新信息天通。
注意:http://dongxicheng.org/mapreduce-nextgen/yarnmrv2-resource-manager-resource-manager/
1.由于resourcemanager負(fù)責(zé)資源的分配泊窘,當(dāng)NodeManager啟動(dòng)時(shí),會(huì)向 ResourceManager注冊(cè)像寒,而注冊(cè)信息中會(huì)包含該節(jié)點(diǎn)可分配的CPU和內(nèi)存總量
2.YARN的資源分配過(guò)程是異步的烘豹,也就是說(shuō),資源調(diào)度器將資源分配給一個(gè)application后诺祸,不會(huì)立刻push給對(duì)應(yīng)的ApplicaitonMaster吴叶,而是暫時(shí)放到一個(gè)緩沖區(qū)中,等待 ApplicationMaster通過(guò)周期性的RPC函數(shù)主動(dòng)來(lái)取序臂。
容錯(cuò)
RM:HA方案避免單點(diǎn)故障
AM:AM向RM周期性發(fā)送心跳,出故障后RM會(huì)啟動(dòng)新的AM,受最大失敗次數(shù)限制
NM:周期性RM發(fā)送心跳奥秆,如果一定時(shí)間內(nèi)沒(méi)有發(fā)送逊彭,RM 就認(rèn)為該NM 掛掉了,或者NM上運(yùn)行的Task失敗次數(shù)太多构订,就會(huì)把上面所有任務(wù)調(diào)度到其它NM上
Task:Task也可能運(yùn)行掛掉侮叮,比如內(nèi)存超出了或者磁盤掛掉了,NM會(huì)匯報(bào)AM悼瘾,AM會(huì)把該Task調(diào)度到其它節(jié)點(diǎn)上囊榜,但受到重試次數(shù)的限制
資源調(diào)度和資源隔離機(jī)制
資源調(diào)度由ResourceManager完成,而資源隔離由各個(gè)NodeManager實(shí)現(xiàn)亥宿。
資源管理由ResourceManager和NodeManager共同完成卸勺,其中,ResourceManager中的調(diào)度器負(fù)責(zé)資源的分配烫扼,而NodeManager則負(fù)責(zé)資源的供給和隔離曙求,ResourceManager將NodeManager上資源分配給任務(wù)后,NodeManager需按照要求為任務(wù)提供相應(yīng)的資源映企,甚至保證這些資源應(yīng)具有獨(dú)占性悟狱,為任務(wù)運(yùn)行提供基礎(chǔ)的保證,這就是所謂的資源隔離堰氓。
Yarn中同時(shí)支持內(nèi)存和CPU兩種資源的調(diào)度(默認(rèn)是支持內(nèi)存的)
內(nèi)存資源調(diào)度:
采用進(jìn)程監(jiān)控的方案挤渐,為每一個(gè)NodeManager啟動(dòng)一個(gè)監(jiān)控線程監(jiān)控每個(gè)container內(nèi)存使用情況,一旦發(fā)現(xiàn)超過(guò)約定的資源量双絮,則會(huì)將其殺死浴麻。
默認(rèn)情況下,NodeManager不會(huì)對(duì)CPU資源進(jìn)行任務(wù)隔離掷邦,你可以通過(guò)啟用CGroup來(lái)支持CPU隔離白胀。
CPU資源按照百分比進(jìn)行使用和隔離。