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

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

