YARN 是一個資源調度平臺,負責爲運算程序提供服務器運算資源,至關於一個分佈式的操 做系統平臺,而 MapReduce 等運算程序則至關於運行於操做系統之上的應用程序編程
YARN 是 Hadoop2.x 版本中的一個新特性。它的出現實際上是爲了解決第一代 MapReduce 編程 框架的不足,提升集羣環境下的資源利用率,這些資源包括內存,磁盤,網絡,IO等。Hadoop2.X 版本中從新設計的這個 YARN 集羣,具備更好的擴展性,可用性,可靠性,向後兼容性,以 及能支持除 MapReduce 之外的更多分佈式計算程序服務器
一、YARN 並不清楚用戶提交的程序的運行機制網絡
二、YARN 只提供運算資源的調度(用戶程序向 YARN 申請資源,YARN 就負責分配資源)架構
三、YARN 中的主管角色叫 ResourceManagerapp
四、YARN 中具體提供運算資源的角色叫 NodeManager框架
五、這樣一來,YARN 其實就與運行的用戶程序徹底解耦,就意味着 YARN 上能夠運行各類類 型的分佈式運算程序(MapReduce 只是其中的一種),好比 MapReduce、Storm 程序,Spark 程序,Tez ……分佈式
六、因此,Spark、Storm 等運算框架均可以整合在 YARN 上運行,只要他們各自的框架中有 符合 YARN 規範的資源請求機制便可oop
七、yarn 就成爲一個通用的資源調度平臺,今後,企業中之前存在的各類運算集羣均可以整 合在一個物理集羣上,提升資源利用率,方便數據共享spa
一、JobTracker 是集羣事務的集中處理點,存在單點故障操作系統
二、JobTracker 須要完成的任務太多,既要維護 job 的狀態又要維護 job 的 task 的狀態,形成 過多的資源消耗
三、在 TaskTracker 端,用 Map/Reduce Task 做爲資源的表示過於簡單,沒有考慮到 CPU、內 存等資源狀況,當把兩個須要消耗大內存的 Task 調度到一塊兒,很容易出現 OOM
四、把資源強制劃分爲 Map/Reduce Slot,當只有 MapTask 時,TeduceSlot 不能用;當只有 Reduce Task 時,MapSlot 不能用,容易形成資源利用不足。
總結起來就是:
一、擴展性差
二、可靠性低
三、資源利用率低
四、不支持多種計算框架
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。
ResourceManager 是基於應用程序對集羣資源的需求進行調度的 YARN 集羣主控節點,負責 協調和管理整個集羣(全部 NodeManager)的資源,響應用戶提交的不一樣類型應用程序的 解析,調度,監控等工做。ResourceManager 會爲每個 Application 啓動一個 MRAppMaster, 而且 MRAppMaster 分散在各個 NodeManager 節點
它主要由兩個組件構成:調度器(Scheduler)和應用程序管理器(ApplicationsManager, ASM)
YARN 集羣的主節點 ResourceManager 的職責:
一、處理客戶端請求
二、啓動或監控 MRAppMaster
三、監控 NodeManager
四、資源的分配與調度
NodeManager 是 YARN 集羣當中真正資源的提供者,是真正執行應用程序的容器的提供者, 監控應用程序的資源使用狀況(CPU,內存,硬盤,網絡),並經過心跳向集羣資源調度器 ResourceManager 進行彙報以更新本身的健康狀態。同時其也會監督 Container 的生命週期 管理,監控每一個 Container 的資源使用(內存、CPU 等)狀況,追蹤節點健康情況,管理日 志和不一樣應用程序用到的附屬服務(auxiliary service)。
YARN 集羣的從節點 NodeManager 的職責:
一、管理單個節點上的資源
二、處理來自 ResourceManager 的命令
三、處理來自 MRAppMaster 的命令
MRAppMaster 對應一個應用程序,職責是:向資源調度器申請執行任務的資源容器,運行 任務,監控整個任務的執行,跟蹤整個任務的狀態,處理任務失敗以異常狀況
Container 容器是一個抽象出來的邏輯資源單位。容器是由 ResourceManager Scheduler 服務 動態分配的資源構成,它包括了該節點上的必定量 CPU,內存,磁盤,網絡等信息,MapReduce 程序的全部 Task 都是在一個容器裏執行完成的,容器的大小是能夠動態調整的
應用程序管理器 ASM 負責管理整個系統中全部應用程序,包括應用程序提交、與調度器協 商資源以啓動 MRAppMaster、監控 MRAppMaster 運行狀態並在失敗時從新啓動它等
調度器根據應用程序的資源需求進行資源分配,不參與應用程序具體的執行和監控等工做 資源分配的單位就是 Container,調度器是一個可插拔的組件,用戶能夠根據本身的需求實 現本身的調度器。YARN 自己爲咱們提供了多種直接可用的調度器,好比 FIFO,Fair Scheduler 和 Capacity Scheduler 等
YARN 做業執行流程:
一、用戶向 YARN 中提交應用程序,其中包括 MRAppMaster 程序,啓動 MRAppMaster 的命令, 用戶程序等。
二、ResourceManager 爲該程序分配第一個 Container,並與對應的 NodeManager 通信,要求 它在這個 Container 中啓動應用程序 MRAppMaster。
三、MRAppMaster 首先向 ResourceManager 註冊,這樣用戶能夠直接經過 ResourceManager 查看應用程序的運行狀態,而後將爲各個任務申請資源,並監控它的運行狀態,直到運行結束,重複 4 到 7 的步驟。
四、MRAppMaster 採用輪詢的方式經過 RPC 協議向 ResourceManager 申請和領取資源。
五、一旦 MRAppMaster 申請到資源後,便與對應的 NodeManager 通信,要求它啓動任務。
六、NodeManager 爲任務設置好運行環境(包括環境變量、JAR 包、二進制程序等)後,將 任務啓動命令寫到一個腳本中,並經過運行該腳本啓動任務。
七、各個任務經過某個 RPC 協議向 MRAppMaster 彙報本身的狀態和進度,以讓 MRAppMaster 隨時掌握各個任務的運行狀態,從而能夠在任務敗的時候從新啓動任務。
八、應用程序運行完成後,MRAppMaster 向 ResourceManager 註銷並關閉本身。