您好,登錄后才能下訂單哦!
如何理解Yarn的工作機制,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
我們知道 YARN 是 Hadoop 資源管理器,無論是 MapReduce 應用還是 Spark 應用,應該都會用到 Yarn。
今天我們就來聊聊 Yarn 的組成以及工作流程:
先介紹幾個角色
ResourceManager
一個集群只有一個 RM,它是 YARN 的總指揮,負責協調集群上的計算資源,它有以下兩個組件:
ApplicationsManager:這個不是 ApplicationMaster,注意區分。它會接受 Job 的提交請求,調度 Container 用于啟動 ApplicationMaster,以及負責 ApplicationMaster 的失敗重啟。
Scheduler:調度器純粹為應用程序分配資源,它不會監控應用的狀態,這里的調度就是基于 Container 這個抽象的資源容器,包含內存、CPU、磁盤、網絡等。
NodeManager
一個集群中有多個 NodeManager,它負責啟動 Container,監控 Container 的資源使用情況(cpu、內存、磁盤、網絡),并將這些信息匯報給 RM。一個 NodeManager 上可以有多個 Container。
Container
Container 是一組硬件資源的抽象,包含 CPU、內存、磁盤、網絡等,所有的 Job 都是在 Container 中運行;
ApplicationMaster
與 RM 協商資源,并與 NodeManager 一起監控任務,ApplicationMaster 和 Job 一樣,都是運行在 Container 中。
下面我們詳細了解下一個任務是怎么提交到 Yarn 中運行的。
第 1 步:Client 向 RM 發起任務請求:「RM,我要執行一個任務」
第 2 步:RM 給 Client 返回 Application ID 等信息:「好的,給你分配一個 Application ID」
第 3 步:Client 根據返回的信息,檢查作業的輸入輸出目錄是否正確、計算作業輸入分片是否正常,將運行作業需要的資源(作業 Jar 文件、配置文件、輸入分片)復制到以 Application ID 命名的 HDFS 目錄中。
第 4 步:Client 向 RM 正式提交作業:「我都準備好了,執行任務吧」
第 5 步:RM 將請求信息傳遞給自己的小弟 Scheduler:「Scheduler 老弟,你來分配個 Container」
第 6 步:Scheduler 分配 Container,用于啟動 ApplicationMaster:「好的,這個 Container 就是 0 號選手」
第 7 步:ApplicationsManager 與指定的 NodeManager 通信,要求在 Container 中啟動 ApplicationMaster。
第 8 步:ApplicationMaster 初始化任務并向 RM 申請所需要的資源:「RM 大哥,給我資源運行任務」
第 9 步:RM 返回 ApplicationMaster 申請的資源:「給你 1、2 兩個 NodeManager」
第 10 步:ApplicationMaster 與對應的 NodeManager 通信,申請 Container 啟動任務「NodeManager 大哥,給我啟動 Container 運行這個任務」
第 11 步:Container 中的應用程序會先將需要的計算資源從 HDFS 下載到本地,再啟動任務:「都給我跑起來」
第 12 步:運行過程中,任務會將狀態和進度報告給 ApplicationMaster,Client 會輪詢 ApplicationMaster 獲取狀態。
第 13 步:運行完成后,Container 會注銷掉,也就是把資源歸還給系統,ApplicationMaster 向 RM 注銷自己。
關于如何理解Yarn的工作機制問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。