目錄 正文 YARN
1.1、YARN 概述 YARN(Yet Another Resource Negotiator)
YARN 是一個資源調(diào)度平臺,負責為運算程序提供服務(wù)器運算資源,相當于一個分布式的操 作系統(tǒng)平臺,而 MapReduce 等運算程序則相當于運行于操作系統(tǒng)之上的應(yīng)用程序
YARN 是 Hadoop2.x 版本中的一個新特性。它的出現(xiàn)其實是為了解決第一代 MapReduce 編程 框架的不足,提高集群環(huán)境下的資源利用率,這些資源包括內(nèi)存,磁盤,網(wǎng)絡(luò),IO等。Hadoop2.X 版本中重新設(shè)計的這個 YARN 集群,具有更好的擴展性,可用性,可靠性,向后兼容性,以 及能支持除 MapReduce 以外的更多分布式計算程序
1、YARN 并不清楚用戶提交的程序的運行機制
2、YARN 只提供運算資源的調(diào)度(用戶程序向 YARN 申請資源,YARN 就負責分配資源)
3、YARN 中的主管角色叫 ResourceManager
4、YARN 中具體提供運算資源的角色叫 NodeManager
5、這樣一來,YARN 其實就與運行的用戶程序完全解耦,就意味著 YARN 上可以運行各種類 型的分布式運算程序(MapReduce 只是其中的一種),比如 MapReduce、Storm 程序,Spark 程序,Tez ……
6、所以,Spark、Storm 等運算框架都可以整合在 YARN 上運行,只要他們各自的框架中有 符合 YARN 規(guī)范的資源請求機制即可
7、yarn 就成為一個通用的資源調(diào)度平臺,從此,企業(yè)中以前存在的各種運算集群都可以整 合在一個物理集群上,提高資源利用率,方便數(shù)據(jù)共享
1.2、原 MapReduce 框架的不足
1、JobTracker 是集群事務(wù)的集中處理點,存在單點故障
2、JobTracker 需要完成的任務(wù)太多,既要維護 job 的狀態(tài)又要維護 job 的 task 的狀態(tài),造成 過多的資源消耗
3、在 TaskTracker 端,用 Map/Reduce Task 作為資源的表示過于簡單,沒有考慮到 CPU、內(nèi) 存等資源情況,當把兩個需要消耗大內(nèi)存的 Task 調(diào)度到一起,很容易出現(xiàn) OOM
4、把資源強制劃分為 Map/Reduce Slot,當只有 MapTask 時,TeduceSlot 不能用;當只有 Reduce Task 時,MapSlot 不能用,容易造成資源利用不足。
總結(jié)起來就是:
1、擴展性差
2、可靠性低
3、資源利用率低
4、不支持多種計算框架
1.3、新版 YARN 架構(gòu)的優(yōu)點
YARN/MRv2 最基本的想法是將原 JobTracker 主要的資源管理和 Job 調(diào)度/監(jiān)視功能分開作為 兩個單獨的守護進程。有一個全局的 ResourceManager(RM)和每個 Application 有一個 ApplicationMaster(AM),Application 相當于 MapReduce Job 或者 DAG jobs。ResourceManager 和 NodeManager(NM)組成了基本的數(shù)據(jù)計算框架。ResourceManager 協(xié)調(diào)集群的資源利用, 任何 Client 或者運行著的 applicatitonMaster 想要運行 Job 或者 Task 都得向 RM 申請一定的資 源。ApplicatonMaster 是一個框架特殊的庫,對于 MapReduce 框架而言有它自己的 AM 實現(xiàn), 用戶也可以實現(xiàn)自己的 AM,在運行的時候,AM 會與 NM 一起來啟動和監(jiān)視 Tasks。
1.4、YARN 的重要概念
1.4.1、ResourceManager
ResourceManager 是基于應(yīng)用程序?qū)嘿Y源的需求進行調(diào)度的 YARN 集群主控節(jié)點,負責 協(xié)調(diào)和管理整個集群(所有 NodeManager)的資源,響應(yīng)用戶提交的不同類型應(yīng)用程序的 解析,調(diào)度,監(jiān)控等工作。ResourceManager 會為每一個 Application 啟動一個 MRAppMaster, 并且 MRAppMaster 分散在各個 NodeManager 節(jié)點
它主要由兩個組件構(gòu)成:調(diào)度器(Scheduler)和應(yīng)用程序管理器(ApplicationsManager, ASM)
YARN 集群的主節(jié)點 ResourceManager 的職責:
1、處理客戶端請求
2、啟動或監(jiān)控 MRAppMaster
3、監(jiān)控 NodeManager
4、資源的分配與調(diào)度
1.4.2、NodeManager
NodeManager 是 YARN 集群當中真正資源的提供者,是真正執(zhí)行應(yīng)用程序的容器的提供者, 監(jiān)控應(yīng)用程序的資源使用情況(CPU,內(nèi)存,硬盤,網(wǎng)絡(luò)),并通過心跳向集群資源調(diào)度器 ResourceManager 進行匯報以更新自己的健康狀態(tài)。同時其也會監(jiān)督 Container 的生命周期 管理,監(jiān)控每個 Container 的資源使用(內(nèi)存、CPU 等)情況,追蹤節(jié)點健康狀況,管理日 志和不同應(yīng)用程序用到的附屬服務(wù)(auxiliary service)。
YARN 集群的從節(jié)點 NodeManager 的職責:
1、管理單個節(jié)點上的資源
2、處理來自 ResourceManager 的命令
3、處理來自 MRAppMaster 的命令
1.4.3、MRAppMaster
MRAppMaster 對應(yīng)一個應(yīng)用程序,職責是:向資源調(diào)度器申請執(zhí)行任務(wù)的資源容器,運行 任務(wù),監(jiān)控整個任務(wù)的執(zhí)行,跟蹤整個任務(wù)的狀態(tài),處理任務(wù)失敗以異常情況
1.4.4、Container
Container 容器是一個抽象出來的邏輯資源單位。容器是由 ResourceManager Scheduler 服務(wù) 動態(tài)分配的資源構(gòu)成,它包括了該節(jié)點上的一定量 CPU,內(nèi)存,磁盤,網(wǎng)絡(luò)等信息,MapReduce 程序的所有 Task 都是在一個容器里執(zhí)行完成的,容器的大小是可以動態(tài)調(diào)整的
1.4.5、ASM
應(yīng)用程序管理器 ASM 負責管理整個系統(tǒng)中所有應(yīng)用程序,包括應(yīng)用程序提交、與調(diào)度器協(xié) 商資源以啟動 MRAppMaster、監(jiān)控 MRAppMaster 運行狀態(tài)并在失敗時重新啟動它等
1.4.6、Scheduler
調(diào)度器根據(jù)應(yīng)用程序的資源需求進行資源分配,不參與應(yīng)用程序具體的執(zhí)行和監(jiān)控等工作 資源分配的單位就是 Container,調(diào)度器是一個可插拔的組件,用戶可以根據(jù)自己的需求實 現(xiàn)自己的調(diào)度器。YARN 本身為我們提供了多種直接可用的調(diào)度器,比如 FIFO,F(xiàn)air Scheduler 和 Capacity Scheduler 等
1.5、YARN 架構(gòu)及各角色職責

1.6、YARN 作業(yè)執(zhí)行流程
YARN 作業(yè)執(zhí)行流程:
1、用戶向 YARN 中提交應(yīng)用程序,其中包括 MRAppMaster 程序,啟動 MRAppMaster 的命令, 用戶程序等。
2、ResourceManager 為該程序分配第一個 Container,并與對應(yīng)的 NodeManager 通訊,要求 它在這個 Container 中啟動應(yīng)用程序 MRAppMaster。
3、MRAppMaster 首先向 ResourceManager 注冊,這樣用戶可以直接通過 ResourceManager 查看應(yīng)用程序的運行狀態(tài),然后將為各個任務(wù)申請資源,并監(jiān)控它的運行狀態(tài),直到運行結(jié)束,重復(fù) 4 到 7 的步驟。
4、MRAppMaster 采用輪詢的方式通過 RPC 協(xié)議向 ResourceManager 申請和領(lǐng)取資源。
5、一旦 MRAppMaster 申請到資源后,便與對應(yīng)的 NodeManager 通訊,要求它啟動任務(wù)。
6、NodeManager 為任務(wù)設(shè)置好運行環(huán)境(包括環(huán)境變量、JAR 包、二進制程序等)后,將 任務(wù)啟動命令寫到一個腳本中,并通過運行該腳本啟動任務(wù)。
7、各個任務(wù)通過某個 RPC 協(xié)議向 MRAppMaster 匯報自己的狀態(tài)和進度,以讓 MRAppMaster 隨時掌握各個任務(wù)的運行狀態(tài),從而可以在任務(wù)敗的時候重新啟動任務(wù)。
8、應(yīng)用程序運行完成后,MRAppMaster 向 ResourceManager 注銷并關(guān)閉自己。

|