资源调度框架YARN
YARN產生背景
MapReduce1.x存在的問題
在1.x版本中,架構也是master/slave的,對應的角色是分別是JobTracker和TaskTracker,一個作業可以拆分成MapTask和ReduceTask,一個JobTracker跟蹤多個TaskTracker。
JobTracker負責資源的管理和狀態的管理,TaskTracker定期向JobTracker匯報本節點的健康狀態、本節點的資源使用情況,以及本節點task的任務執行情況。TaskTracker接收來自JobTracker的命令,例如啟動一個作業,殺死一個作業。
這種架構存在的問題
資源利用率&運維成本
所有的計算框架運行在一個集群中,共享一個集群的資源,做到按需分配。
YARN概述
- Yet Another Resource Negotiator
- 通用的資源管理系統
- 為上層應用(MapReduce、spark等計算框架)提供統一的資源管理和調度
YARN將JobTracker分為兩個主要的部分,分別是資源管理和作業調度(作業監控),變成兩個獨立的進程。因此就有了一個ResourceManager(RM)和每一個應用程序對應有一個ApplicationMaster(AM),例如提交了一個MapReduce作業,就會有一個MapReduce的ApplicationMaster(AM),如果提交了一個Spark作業,就會有一個Spark的ApplicationMaster(AM)。一個作業要么是一個單獨的作業(例如MapReduce),要么是一個DAG(相互有依賴的作業,A作業運完成后,運行B作業)作業。
ResourceManager與NodeManager共同組成了計算框架。ResourceManager是一個的決定者,負責資源的管理。
YARN架構
- Client:向RM提交任務、殺死任務等
- ResourceManager(RM):集群中同一時刻對外提供服務的只有一個,負責資源相關。處理來自客戶端的請求:包括提交、殺死。啟動(監控)ApplicationMaster,監控NM
- NodeManager(NM):(可以有多個)。計算節點,向RM發送心跳信息、任務的執行情況、接收來自RM的請求來啟動任務。處理來自ApplicationMaster的命令
- ApplicationMaster(AM):每個應用程序對一個AM,AM向RM申請資源,用于在NM上啟動對應的Task。可以進行數據切分,為每個task向RM申請資源(Container)。任務的監控。
- master/slave:RM/NM
- container:任務的運行抽象。memory、CPU…。task運行在container里面的,可以運行AM、也可以運行map/reduce task
一個作業task提交給RM,現在NM上申請一個AM,然后AM向RM申請資源,申請到資源后,到對應的NM上自動Container,然后在Container上啟動Map Task和Reduce Task。AM監控Container
YARN執行流程
- 第1步:客戶端先提交應用程序到Resource Manager
- 第2步:Resource Manager為作業分配第一個NodeManager
- 第3步:Resource Manager要求在NodeManager中啟動了一個Container來運行作業的Application Master
- 第4步:Application Master啟動之后,首先要注冊到Resource Manager上,因為Resource Manager要負責全局的資源管理,而Application Master是對應于每一個應用程序的,所以需要首先注冊到Resource Manager,這樣就可以直接通過Client查詢到作業的執行情況(Application Master注冊在Resource Manager,而Client可以跟Resource Manager進行通信)
- 第5步:到具體的NodeManager中啟動Container跑Task
Application Master是直到具體的Task的執行情況的。
這個執行流程不僅僅是針對MapReduce,對于Spark也是一樣的。Spark僅僅是對于Application Master不同而已
總結
以上是生活随笔為你收集整理的资源调度框架YARN的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MapReduce读取本地文件,而不是H
- 下一篇: YARN环境部署