Yarn學習(一)YARN的資源排程
正文
YARN
1、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就成為一個通用的資源排程平臺,從此,企業中以前存在的各種運算叢集都可以整合在一個屋裡叢集上,提高資源利用率,方便資料共享。
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、不支援多種計算框架
3、新版Yarn架構的優點
Yarn/MRv2最基本的想法是將原JobTracker主要的資源管理器和Job排程/監視功能分開作為兩個單獨的守護程序。有一個全域性的 ResourceManger(RM)和每個 Application 有一個 ApplicationMaster(AM),Application 相當於MapReduce Job 或者 DAG jobs。ResourceManager 和 NodeManager (NM)組成了基本的資料計算框架。
ResourceManager 協調叢集的資源利用,任何Client 或者執行著得ApplicationMaster 想要執行Job 或者Task都的向 RM 申請一定的資源。ApplicationMaster 是一個框架特殊的庫,對於MapReduce 框架而言有它自己的 AM 實現, 使用者也可以實現自己的AM,在執行的時候,AM會與 NM 一起來啟動和監視 Tasks。
4、Yarn的重要概念
4.1、ResourceManager
ResourceManager是基於應用程式對叢集資源的需求進行排程的Yarn叢集主控節點,負責協調和管理整個叢集(所有 NodeManager)的資源,響應使用者提交的不同型別應用的 解析,排程,監控等工作。
ResourceManager 會為每一個Application 啟動一個MRAppMaster,並且MRAppMaster 分散在各個NodeManager節點
它主要由兩個元件構成:排程器(Scheduler)和應用程式管理器(ApplicationsManager,ASM)
Yarn叢集的主節點 ResourceManager的職責:
1、處理客戶端請求
2、啟動或監控 MRAppMaster
3、監控 NodeManager
4、資源的分配與排程
4.2、NodeManager
NodeManager 是 Yarn 叢集當中真正資源的提供者,是真正執行應用程式的容器的提供者,監控應用程式的資源使用情況(CPU,記憶體,硬碟,網路),並通過心跳向叢集資源排程器 ResourceManager 進行彙報以更新自己的健康狀態,管理日誌和不同應用程式用到的附屬服務(auxiliary service)。
Yarn叢集的從節點 NodeManager 的職責:
1、管理單個節點上的資源
2、處理來自 ResourceManager 的命令
3、處理來自 MRAppMaster 的命令
4.3、MRAppMaster
MRAppMaster對應一個應用程式,職責是:向資源排程器申請執行任務的資源容器,執行任務,監控整個任務的執行,跟蹤整個任務的狀態,處理任務失敗及異常情況。
4.4、Container
Container 容器是一個抽象出來的邏輯資源單位。容器是由 ResourceManager Scheduler 服務動態分配資源構成,它包括了該節點上的一定量CPU,記憶體,磁碟,網路等資訊,MapReduce 程式的所有 Task 都是在一個容器裡執行完成的,容器的大小是可以動態調整的。
4.5、ASM
應用程式管理器 ASM 負責管理整個系統中所有應用程式,包括應用程式提交,與排程器協商資源以啟動MRAppMaster、監控MRAppmaster 執行狀態並在失敗時重新啟動它,等等
4.6、Scheduler
排程器根據應用程式的資源需求進行資源分配,不參與應用程式具體的執行和監控等工作,資源分配的單位就是Container,排程器是一個可插拔的元件,使用者可以根據自己的需求實現自己的排程器。Yarn本身為我們提供了多種直接可用的排程器,FIFO,Fair,Scheduler 和 Capacity Scheduler 等。
5、Yarn架構及各角色職責
6、Yarn作業執行流程
Yarn作業執行流程
1、使用者向 Yarn 中提交應用程式,其實包括 MRAppMaster 程式,啟動 MRAppMaster 的命令,使用者程式等。
2、ResourceManager 為該程式分配第一個 Container ,並與對應的 NodeManager 通訊,要求它在這個Container 中啟動應用程式 MRAppMaster。
3、MRAppMaster 首先向 ResourceManager 註冊,這樣使用者可以直接通過 RescourceManager 檢視應用程式的執行狀態,然後將為各個人物申請資源,並監控它的執行狀態,直到執行結束,重複 4 到 7 的步驟。
4、MRAppMaster 採用輪詢的方式通過 RPC 協議向 ResourceManager 申請和領取資源。
5、一旦 MRAppMaster 申請到資源後,便與對應的NodeManager 通訊,要求它啟動任務。
6、NodeManager 為人物設定好執行環境(包括環境變數,Jar包,二進位制程式等)後,將任務啟動命令寫到一個指令碼中,並通過執行改指令碼啟動任務。
7、各個人物通過某個 RPC 協議向 MRAppMaster 彙報自己的狀態和進度,以讓 MRAppMaster 隨時掌握各個任務的執行狀態,從而可以在任務失敗的時候重新啟動任務。
8、應用程式執行完成後,MRAppMaster 向 ResourceManager 登出並關閉自己。