1. 程式人生 > >Hadoop ---- YARN

Hadoop ---- YARN

Hadoop —- YARN

  1. YARN 概述
    • YARN 是一種分散式作業系統(Distributed Operating System,DOS),主要作用為:提供使用者介面、管理分散式系統資源、控制分散式程式執行(任務排程)。
    • YARN 採用 master/slave 架構,slave(NodeManager)程序負責管理本機資源,master(ResourceManager)負責彙總分配各個 slave 上報的資源資訊。

Yarn

  1. ResourceManager

    • ResourceManager 中主要的四大模組
      • 客戶介面模組(主要介面有:web 介面、shell 介面以及 JavaAPI 介面)
      • 資源管理模組(彙總各個 slave 上報的資源資訊,RTS)
        • YARN 把一定量的各類資源抽象成為一個邏輯概念 Container (容器)。
        • 比如,統一規定 <1core,2G> 為一個 Container 。就是說分配、彙總資源時以此為單位。假如,一 slave 機器為 2 核心、4G 記憶體,該機器上的 NodeManager 程序向 ResourceManager 彙報時就可直接說是 2個 Container。分配時,亦同。這樣,大大簡化了資源管理模組。
      • 任務排程器(核心,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 之間使用 定期心跳包 進行通訊。
  2. NodeManager

    • ApplicationManager
      • ApplicationManager 其實是 Container 上執行的一個例項(程式)。把它單獨出來說明是因為,它相當於 Yarn-App 的主執行緒(指揮部)。
      • 由它向 ResourceManager 申請資源。且它得到 ResourceManager 授權後,由它與其他 NodeManager 通訊,要求 NodeManger 分配啟動對應的 Container。當然,這裡面存在令牌驗證等安全機制。
    • NodeManager 中主要的兩大模組
      • ContainerManager 模組
        • 監控 Container 狀態
        • 向 ResourceManager 彙報
      • ContainerExcutor 模組(用於啟動 Container)
  3. YARN 程式設計(編寫 Yarn-App)

    • 程式設計的內容分三部分
      • ApplicationBusinessLogic
        • 主要寫業務邏輯
        • 由所屬並行化正規化,確定 ApplicationBusinessLogic 的最終結構
      • ApplicationClient
        • 提供介面
        • 通用性較強,一般由公司的優秀程式設計師開發
      • ApplicationMaster
        • 涉及 Container 分層等,很複雜
        • 一般由公司的優秀程式設計師開發
    • 重頭開始編寫 Yarn-App 很複雜,實際使用時可以借鑑
      • M 正規化:DistributedShell
      • M-S-R 正規化:MapReduce 框架、Spark 框架
      • BSP 正規化:Giraph 框架
  4. 其他一些重要概念或思想

    • 常見並行化正規化
      • M 正規化:把全部資料等分成 n 分,各機器(程序)獨立處理一份。
      • MSR 正規化:MapReduce 模型。適合 IO 密集型的鬆耦合操作,適合全域性資料而非增量資料。
      • BSP 正規化(整體同步平行計算模型)
        • 適合處理 CPU 密集型的 緊耦合 操作(如,統計機器學習演算法、圖處理)。
        • 思想:各超步之間序列執行,超步內則並行執行(超步內分有很多塊)。
    • 先並行化後執行緒化
      • 並行化指的是把任務分到不同的機器上;
      • 執行緒化則為在同一機器內併發處理對應的任務;