Hadoop ---- YARN
阿新 • • 發佈:2018-12-13
Hadoop —- YARN
- YARN 概述
- YARN 是一種分散式作業系統(Distributed Operating System,DOS),主要作用為:提供使用者介面、管理分散式系統資源、控制分散式程式執行(任務排程)。
- YARN 採用 master/slave 架構,slave(NodeManager)程序負責管理本機資源,master(ResourceManager)負責彙總分配各個 slave 上報的資源資訊。
ResourceManager
- ResourceManager 中主要的四大模組
- 客戶介面模組(主要介面有:web 介面、shell 介面以及 JavaAPI 介面)
- 資源管理模組(彙總各個 slave 上報的資源資訊,RTS)
- YARN 把一定量的各類資源抽象成為一個邏輯概念
Container
(容器)。 - 比如,統一規定 <1core,2G> 為一個 Container 。就是說分配、彙總資源時以此為單位。假如,一 slave 機器為 2 核心、4G 記憶體,該機器上的 NodeManager 程序向 ResourceManager 彙報時就可直接說是 2個 Container。分配時,亦同。這樣,大大簡化了資源管理模組。
- YARN 把一定量的各類資源抽象成為一個邏輯概念
- 任務排程器(核心,Schedule)
- 支援的排程策略
- FIFO
- Fair:公平(How to do?)
- Capacity:不管當前有多少 application ,只要叢集內還有計算資源,都分配給這些應用程式,以確保這些應用程式同時執行。
- 三大排程策略可以巢狀配置(通過佇列,How to do?),此外 YARNSchedule 支援熱插拔,可動態配置排程器。
- 支援的排程策略
- 任務啟動模組(ApplicationsManager)
- 負責管理所有 ApplicationMaster 。理論上一個 ApplicationMaster 對應一個 Yarn-App.
- 當 ResourceManager 接收到新任務(新的 Yarn-App)時,由任務啟動模組使用資源管理模組選擇一空閒 Container,並在此 Container 上執行應用程式主服務(slave 主機上)。
- ResourceManager 與 NodeManager 之間使用 定期心跳包 進行通訊。
- ResourceManager 中主要的四大模組
NodeManager
- ApplicationManager
- ApplicationManager 其實是 Container 上執行的一個例項(程式)。把它單獨出來說明是因為,它相當於 Yarn-App 的主執行緒(指揮部)。
- 由它向 ResourceManager 申請資源。且它得到 ResourceManager 授權後,由它與其他 NodeManager 通訊,要求 NodeManger 分配啟動對應的 Container。當然,這裡面存在令牌驗證等安全機制。
- NodeManager 中主要的兩大模組
- ContainerManager 模組
- 監控 Container 狀態
- 向 ResourceManager 彙報
- ContainerExcutor 模組(用於啟動 Container)
- ContainerManager 模組
- ApplicationManager
YARN 程式設計(編寫 Yarn-App)
- 程式設計的內容分三部分
- ApplicationBusinessLogic
- 主要寫業務邏輯
- 由所屬並行化正規化,確定 ApplicationBusinessLogic 的最終結構
- ApplicationClient
- 提供介面
- 通用性較強,一般由公司的優秀程式設計師開發
- ApplicationMaster
- 涉及 Container 分層等,很複雜
- 一般由公司的優秀程式設計師開發
- ApplicationBusinessLogic
- 重頭開始編寫 Yarn-App 很複雜,實際使用時可以借鑑
- M 正規化:DistributedShell
- M-S-R 正規化:MapReduce 框架、Spark 框架
- BSP 正規化:Giraph 框架
- 程式設計的內容分三部分
其他一些重要概念或思想
- 常見並行化正規化
- M 正規化:把全部資料等分成 n 分,各機器(程序)獨立處理一份。
- MSR 正規化:MapReduce 模型。適合 IO 密集型的鬆耦合操作,適合全域性資料而非增量資料。
- BSP 正規化(整體同步平行計算模型)
- 適合處理 CPU 密集型的 緊耦合 操作(如,統計機器學習演算法、圖處理)。
- 思想:各超步之間序列執行,超步內則並行執行(超步內分有很多塊)。
- 先並行化後執行緒化
- 並行化指的是把任務分到不同的機器上;
- 執行緒化則為在同一機器內併發處理對應的任務;
- 常見並行化正規化