1.Yarn架構(gòu)
類似HDFS茅主,YARN也是經(jīng)典的主從(master/slave)架構(gòu)舞痰,當(dāng)然其也可以開啟 HA 模式,來提高容錯(cuò)性诀姚。
- YARN服務(wù)由一個(gè)ResourceManager(RM)和多個(gè)NodeManager(NM)構(gòu)成
- ResourceManager為主節(jié)點(diǎn)(master)
- NodeManager為從節(jié)點(diǎn)(slave)
(1),ResourceMaager
1),簡介
- ResourceManager是YARN中主(master)的角色
- RM是一個(gè)全局的資源管理器响牛,集群只有一個(gè)active的對(duì)外提供服務(wù)
- 負(fù)責(zé)整個(gè)系統(tǒng)的資源管理和分配
- 包括處理客戶端請(qǐng)求
- 啟動(dòng)/監(jiān)控 ApplicationMaster
- 監(jiān)控 NodeManager、資源的分配與調(diào)度
- 它主要由兩個(gè)組件構(gòu)成:
- 調(diào)度器(Scheduler)
- 應(yīng)用程序管理器(Applications Manager,ASM)
2),組件詳解
-
調(diào)度器Scheduler
- 調(diào)度器根據(jù)容量呀打、隊(duì)列等限制條件(如每個(gè)隊(duì)列分配一定的資源矢赁,最多執(zhí)行一定數(shù)量的作業(yè)等),將系統(tǒng)中的資源分配給各個(gè)正在運(yùn)行的應(yīng)用程序贬丛。
- 需要注意的是撩银,該調(diào)度器是一個(gè)“純調(diào)度器”
- 它不從事任何與具體應(yīng)用程序相關(guān)的工作,比如不負(fù)責(zé)監(jiān)控或者跟蹤應(yīng)用的執(zhí)行狀態(tài)等豺憔,也不負(fù)責(zé)重新啟動(dòng)因應(yīng)用執(zhí)行失敗或者硬件故障而產(chǎn)生的失敗任務(wù)额获,這些均交由應(yīng)用程序相關(guān)的ApplicationMaster完成。
- 調(diào)度器僅根據(jù)各個(gè)應(yīng)用程序的資源需求進(jìn)行資源分配恭应,而資源分配單位用一個(gè)抽象概念“資源容器”(Resource Container抄邀,簡稱Container)表示,Container是一個(gè)動(dòng)態(tài)資源分配單位昼榛,它將內(nèi)存境肾、CPU、磁盤胆屿、網(wǎng)絡(luò)等資源封裝在一起奥喻,從而限定每個(gè)任務(wù)使用的資源量。
-
應(yīng)用程序管理器Applications Manager非迹,ASM
- 應(yīng)用程序管理器主要負(fù)責(zé)管理整個(gè)系統(tǒng)中所有應(yīng)用程序
- 接收job的提交請(qǐng)求
- 為應(yīng)用分配第一個(gè) Container 來運(yùn)行 ApplicationMaster
- 包括應(yīng)用程序提交
- 與調(diào)度器協(xié)商資源以啟動(dòng) ApplicationMaster
- 監(jiān)控 ApplicationMaster 運(yùn)行狀態(tài)并在失敗時(shí)重新啟動(dòng)它等
(2),NodeManager
1),簡介
- NodeManager 是YARN中的 從(slave) 角色
- NodeManager :
- 當(dāng)一個(gè)節(jié)點(diǎn)啟動(dòng)時(shí)环鲤,它會(huì)向 ResourceManager 進(jìn)行注冊(cè)并告知 ResourceManager 自己有多少資源可用。
- 每個(gè)計(jì)算節(jié)點(diǎn)洼怔,運(yùn)行一個(gè)NodeManager進(jìn)程摹察,通過心跳(每秒 yarn.resourcemanager.nodemanagers.heartbeat-interval-ms )上報(bào)節(jié)點(diǎn)的資源狀態(tài)(磁盤,內(nèi)存,cpu等使用信息)
2),功能
接收及處理來自 ResourceManager 的命令請(qǐng)求握玛,分配 Container 給應(yīng)用的某個(gè)任務(wù);
NodeManager 監(jiān)控本節(jié)點(diǎn)上的資源使用情況和各個(gè) Container 的運(yùn)行狀態(tài)(cpu和內(nèi)存等資源)
負(fù)責(zé)監(jiān)控并報(bào)告 Container 使用信息給 ResourceManager睬棚。
定時(shí)地向RM匯報(bào)以確保整個(gè)集群平穩(wěn)運(yùn)行抠忘,RM 通過收集每個(gè) NodeManager 的報(bào)告信息來追蹤整個(gè)集群健康狀態(tài)的,而 NodeManager 負(fù)責(zé)監(jiān)控自身的健康狀態(tài)结耀;
處理來自 ApplicationMaster 的請(qǐng)求留夜;
管理著所在節(jié)點(diǎn)每個(gè) Container 的生命周期;
-
管理每個(gè)節(jié)點(diǎn)上的日志图甜;
- 在運(yùn)行期碍粥,通過 NodeManager 和 ResourceManager 協(xié)同工作,這些信息會(huì)不斷被更新并保障整個(gè)集群發(fā)揮出最佳狀態(tài)黑毅。
- NodeManager 只負(fù)責(zé)管理自身的 Container嚼摩,它并不知道運(yùn)行在它上面應(yīng)用的信息。負(fù)責(zé)管理應(yīng)用信息的組件是 ApplicationMaster
(3),Container
1),簡介
- Container 是 YARN 中的資源抽象
- YARN以Container為單位分配資源
- 它封裝了某個(gè)節(jié)點(diǎn)上的多維度資源,如內(nèi)存枕面、CPU愿卒、磁盤、網(wǎng)絡(luò)等
- 當(dāng) AM 向 RM 申請(qǐng)資源時(shí)潮秘,RM 為 AM 返回的資源便是用 Container 表示的
- YARN 會(huì)為每個(gè)任務(wù)分配一個(gè) Container琼开,且該任務(wù)只能使用該 Container 中指定數(shù)量的資源。
- Container 和集群NodeManager節(jié)點(diǎn)的關(guān)系是:
- 一個(gè)NodeManager節(jié)點(diǎn)可運(yùn)行多個(gè) Container
- 但一個(gè) Container 不會(huì)跨節(jié)點(diǎn)枕荞。
- 任何一個(gè) job 或 application 必須運(yùn)行在一個(gè)或多個(gè) Container 中
- 在 Yarn 框架中柜候,ResourceManager 只負(fù)責(zé)告訴 ApplicationMaster 哪些 Containers 可以用
- ApplicationMaster 還需要去找 NodeManager 請(qǐng)求分配具體的 Container。
2),功能
- 對(duì)task環(huán)境的抽象买猖;
- 描述一系列信息改橘;
- 任務(wù)運(yùn)行資源的集合(cpu、內(nèi)存玉控、io等)飞主;
- 任務(wù)運(yùn)行環(huán)境
3),注意
- Container 是一個(gè)動(dòng)態(tài)資源劃分單位,是根據(jù)應(yīng)用程序的需求動(dòng)態(tài)生成的
- 目前為止高诺,YARN 僅支持 CPU 和內(nèi)存兩種資源碌识,且使用了輕量級(jí)資源隔離機(jī)制 Cgroups 進(jìn)行資源隔離。
(4),ApplicationMaster
1),簡介
ApplicationMaster 與 ResourceManager 之間的通信
- 是整個(gè) Yarn 應(yīng)用從提交到運(yùn)行的最核心部分虱而,是 Yarn 對(duì)整個(gè)集群進(jìn)行動(dòng)態(tài)資源管理的根本步驟
- application master周期性的向resourcemanager發(fā)送心跳筏餐,讓rm確認(rèn)appmaster的健康
- Yarn 的動(dòng)態(tài)性,就是來源于多個(gè)Application 的 ApplicationMaster 動(dòng)態(tài)地和 ResourceManager 進(jìn)行溝通牡拇,不斷地申請(qǐng)魁瞪、釋放、再申請(qǐng)惠呼、再釋放資源的過程导俘。
2),功能
- 獲得數(shù)據(jù)分片;
- 為應(yīng)用程序申請(qǐng)資源并進(jìn)一步分配給內(nèi)部任務(wù)(TASK)剔蹋;
- 任務(wù)監(jiān)控與容錯(cuò)旅薄;
- 負(fù)責(zé)協(xié)調(diào)來自ResourceManager的資源,并通過NodeManager監(jiān)視容器的執(zhí)行和資源使用情況泣崩。
(5),JobHistorServer
作業(yè)歷史服務(wù):
記錄在yarn中調(diào)度的作業(yè)歷史運(yùn)行情況情況少梁,可以通過歷史任務(wù)日志服務(wù)器來查看hadoop的歷史任務(wù),出現(xiàn)錯(cuò)誤都應(yīng)該第一時(shí)間來查看歷史日志矫付。
2.Yarn應(yīng)用運(yùn)行原理
(1),Yarn應(yīng)用的提交過程
1),整體執(zhí)行過程
- 步驟1:用戶將應(yīng)用程序提交到 ResourceManager 上凯沪;
- 步驟2:ResourceManager為應(yīng)用程序 ApplicationMaster 申請(qǐng)資源,并與某個(gè) NodeManager 通信啟動(dòng)第一個(gè) Container买优,以啟動(dòng)ApplicationMaster妨马;
- 步驟3:ApplicationMaster 與 ResourceManager 注冊(cè)進(jìn)行通信樟遣,為內(nèi)部要執(zhí)行的任務(wù)申請(qǐng)資源,一旦得到資源后身笤,將于 NodeManager 通信豹悬,以啟動(dòng)對(duì)應(yīng)的 Task;
- 步驟4:所有任務(wù)運(yùn)行完成后液荸,ApplicationMaster 向 ResourceManager 注銷瞻佛,整個(gè)應(yīng)用程序運(yùn)行結(jié)束。