一、Yarn 產生的背景 Hadoop2 之前是由 HDFS 和 MR 組成的,HDFS 負責存儲,MR 負責計算。 一)MRv1 的問題 耦合度高:MR 中的 jobTracker 同時負責資源管理和作業控制兩個功能,互相制約。 可靠性差:管理節點是單機的,有單點故障的問題。 資源利用率低:基於 ...
一、Yarn 產生的背景
Hadoop2 之前是由 HDFS 和 MR 組成的,HDFS 負責存儲,MR 負責計算。
一)MRv1 的問題
- 耦合度高:MR 中的 jobTracker 同時負責資源管理和作業控制兩個功能,互相制約。
- 可靠性差:管理節點是單機的,有單點故障的問題。
- 資源利用率低:基於 slot 的資源分配模型。機器會將資源劃分成若幹相同大小的 slot,並劃定哪些是 map slot、哪些是 reduce slot。
- 無法支持多種計算框架:限定了只能用於 MapReduce 程式。
二)Yarn 的誕生
由於之前 Hadoop 資源調度的種種問題,新的資源調度框架產生了 —— YARN(Yet Another Resource Negotiator)。
它是一個通用資源管理系統,可為上層應用提供統一的資源管理和調度,它的引入為集群在利用率、資源統一管理和數據共用等方面帶來了巨大好處。
二、Yarn 的基本架構
一)Yarn 三大組件
- ResourceManager
- Nodemanager
- ApplicationMaster
Yarn依然是Master/Slave的結構:
- 在資源架構層面:RM 是 master、NM 是 slave
- 在應用運行期間:AM 是 master、container 是 slave
1、ResourceManager
ResourceManager 主要由兩個組件構成:
調度器( Scheduler)和應用程式管理器(Applications Manager,ASM)。
- 調度器(Scheduler):
- 根據容量、隊列等限制條件(如每個隊列分配一定的資源,最多執行一定數量的作業等),將系統中的資源分配給各個正在運行的應用程式。
- 應用程式管理器(Applications Manager):
- 負責管理整個系統中所有應用程式,包括應用程式提交、與調度器協商資源以啟動 ApplicationMaster、監控 ApplicationMaster 運行狀態併在失敗時重新啟動等。
2、NodeManager
NodeManager 是每個節點上的資源和任務管理器。
- 定時地向 RM 彙報本節點上的資源使用情況和各個 Container 的運行狀態;
- 接收並處理來自 AM 的 Container啟動/停止等各種請求。
3、ApplicationMaster
ApplicationMaster 是一個任務最先啟動的容器,用於管理當前任務的調度。
- 與 RM 調度器協商以獲取資源(用 Container 表示);
- 將得到的任務進一步分配給內部的任務;
- 與NM 通信以啟動 / 停止任務;
- 監控所有任務運行狀態,併在任務運行失敗時重新為任務申請資源以重啟任務。
4、Container
不屬於 Yarn 三大組件,但是 yarn 中資源的抽象。
- 封裝 NM 上的資源(hadoop2 僅支持 cpu 和記憶體,hadoop3 擴展網路、硬碟、GPU 等資源);
- 不同於靜態的 slot,container 可以根據需要動態劃分。
二)Yarn 通信協議
通信協議共有 5 種如下圖所示:
- 分散式環境下,需要涉及跨機器跨網路通信,YARN底層使用RPC協議實現通信。
- RPC是遠程過程調用(Remote Procedure Call)的縮寫形式。基於RPC進行遠程調用就像本地調用一樣。
- 在RPC協議中,通信雙方有一端是Client,另一端為Server,且Client總是主動連接 Server 的。因此,YARN實際 上採用的是拉式(pull-based) 通信模型。
三、Yarn 工作流程
- client 向 YARN 中提交應用程式,其中包括 AM 程式、啟動 AM 的命令、用戶程式等。
- RM 為該應用程式分配第一個 Container,並與對應的 NM 通信,要求它在這個 Container中啟動應用程式的 AM。
- AM 首先向 RM 註冊,這樣用戶可以直接通過 RM 查看應用程式的運行狀態,然後它將為各個任務申請資源,並監控它的運行狀態,直到運行結束,即重覆步驟4~7。
- AM 通過 RPC 協議向 RM 申請和領取資源。
- —旦 AM 申請到資源後,便與對應的 NM 通信,要求它啟動任務。
- NM 為任務設置好運行環境(包括環境變數、JAR 包、二進位程式等)後,將任務啟動命令寫到 一個腳本中,並通過運行該腳本啟動任務。
- 各個任務通過 RPC 協議向 AM 彙報自己的狀態和進度,以讓 AM 隨時掌握各個任務的運行狀態,從而可以在任務失政時重新啟動任務。在應用程式運行過程中,用戶可隨時通過 RPC 向 AM 查詢應用程式的當前運行狀態。
- 應用程式運行完成後,AM 向 RM 註銷並關閉自己。