大數據篇:YARN

YARN

YARN是什麼?node

YARN是一種新的 Hadoop 資源管理器,它是一個通用資源管理系統,可爲上層應用提供統一的資源管理和調度,它的引入爲集羣在利用率、資源統一管理和數據共享等方面帶來了巨大好處。web

若是沒有YARN!算法

  1. 沒法管理集羣資源分配問題。
  2. 沒法合理的給程序分配合理的資源。
  3. 不方便監控程序的運行狀態及日誌。

1 YARN概念

1.1 基本架構

  • ResourceManager
    • 整個集羣只有一個,負責集羣資源的統一管理和調度
    • 處理客戶端請求,啓動/監控ApplicationMaster
    • 監控NodeManager,彙總上報資源
    • 資源分配與調度
  • NodeManager
    • 整個集羣有多個(每一個從屬節點一個)
    • 單個節點上的資源管理和任務管理
    • 監控資源使用狀況(cpu,memory,disk,network)並向ResourceManager彙報
  • 基本思想衍進
    • 在MapReduce1.0中 JobTracker = 資源管理器 + 任務調度器
    • 擁有yarn後,將資源管理器,任務調度器作了切分
      • 資源管理
        • 讓ResourceManager負責
      • 任務調度
        • 讓ApplicationMaster負責
          • 每一個做業啓動一個
          • 根據做業切分任務的tasks
          • 向ResourceManager申請資源
          • 與NodeManager協做,將分配申請到的資源給內部任務tasks
          • 監控tasks運行狀況,重啓失敗的任務
    • JobHistoryServer
      • 每一個集羣每種計算框架一個
      • 負責蒐集歸檔全部的日誌
    • Container
      • 計算資源抽象爲Container
      • 任務運行資源(節點、內存、CPU)
      • 任務啓動命令
      • 任務運行環境

1.2 基本架構 YARN運行過程剖析

1. 客戶端發送請求,由Resource Manager分析須要多少內存資源。
2. Resource Manager告訴Node Manager用什麼樣的jar包什麼樣的啓動命令。
3. Node Manager建立Container,在Container啓動Application Master。
4. Application  Master向Resource Manager發送ResourceRequest請求去Resource Manager申請資源
5. 啓動對應的Node Manager進行通訊
6. Node Manager找到對應的Container執行Task

1.3 YARN容錯性

  • 失敗類型
    • 程序失敗 進程崩潰 硬件問題
  • 若是做業失敗了
    • 做業異常會彙報給Application Master
    • 經過心跳信號檢查掛住的任務
    • 一個做業的任務失敗比例超過配置,就會認爲該任務失敗
  • 若是Application Master失敗了
    • Resource Manager接收不到心跳信號時會重啓Application Master
  • 若是Node Manager失敗了
    • Resource Manager接收不到心跳信號時會將其移出
    • Resource Manager接收Application Master,讓Application Master決定任務如何處理
    • 若是某個Node Manager失敗任務次數過多,Resource Manager調度任務時再也不其上面運行任務
  • 若是Resource Manager運行失敗
    • 經過checkpoint機制,定時將其狀態保存到磁盤,失敗的時候,從新運行
    • 經過Zooleeper同步狀態和實現透明的HA

1.4 YARN調度框架

  • 雙層調度框架
    • RM將資源分配給AM
    • AM將資源進一步分配給各個Task
  • 基於資源預留的調度策略
    • 資源不夠時,會爲Task預留,直到資源充足
    • 與「all or nothing」策略不一樣(Apache Mesos)

1.5 YARN資源調度算法

  • 集羣資源調度器須要解決:架構

    • 多租戶(Multi-tenancy):
      • 多用戶同時提交多種應用程序
      • 資源調度器須要解決如何合理分配資源
    • 可擴展性:增長集羣機器數量能夠提升總體集羣性能。
  • Yarn使用列隊解決多租戶中共享資源的問題app

    • root框架

      |---prdwebapp

      |---devoop

      ​ |---eng性能

      ​ |---science線程

  • 支持三種資源調度器(yarn.resourcemanager.scheduler.class)

    • FIFO

      • 全部向集羣提交的做業使用一個列隊
      • 根據提交做業的順序來運行(先來先服務)
      • 優勢:簡單,能夠按照做業優先級調度
      • 缺點:資源利用率不高,不容許搶佔
    • Capacity Scheduler

      • 設計思想:資源按照比例分配給各個列隊

      • 計算能力保證:以列隊爲單位劃分資源,每一個列隊最低資源保證

      • 靈活:當某個列隊空閒時,其資源能夠分配給其餘的列隊使用

      • 支持優先級:單個列隊內部使用的就是FIFO,支持做業優先級調度

      • 多租戶:

        • 考慮多種因素防止單個做業,用戶列隊獨佔資源
        • 每一個列隊能夠配置必定比例的最低資源配置和使用上限
        • 每一個列隊有嚴格的訪問控制,只能向本身列隊提交任務
      • 基於資源調度:支持內存資源調度和CPU資源的調度

      • 從2.8.0版本開始支持搶佔

      • root

        |---prd 70%

        |---dev 30%

        ​ |---eng 50%

        ​ |---science 50%

    • Fair Scheduler(推薦)

      • 設計思想:資源公平分配
      • 具備與Capacity Scheduler類似的特色
        • 樹狀隊列
        • 每一個列隊有獨立的最小資源保證
        • 空閒時能夠分配資源給其餘列隊使用
        • 支持內存資源調度和CPU資源調度
        • 支持搶佔
      • 不一樣點
        • 核心調度策略不一樣
          • Capacity Scheduler優先選擇資源利用率低的列隊
          • 公平調度器考慮的是公平,公平體如今做業對資源的缺額
        • 單獨設置列隊間資源分配方式
          • FAIR(只考慮Mamory)
          • DRF(主資源公平調度,共同考慮CPU和Mamory)
        • 單獨設置列隊內部資源分配方式
          • FAIR DRF FIFO
  • 多類型資源調度
    • 採用DRF算法(論文:「Dominant Resource Fairness: Fair Allocation of
      Multiple Resource Types」)
    • 目前支持CPU和內存兩種資源
  • 多租戶資源調度器
    • 支持資源按比例分配
    • 支持層級隊列劃分方式
    • 支持資源搶佔

配置案例



  • 調用Wordcount案例,看看效果吧

  • hadoop jar /opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/lib/hadoop-mapreduce/hadoop-mapreduce-examples-3.0.0-cdh6.2.0.jar wordcount -Dmapreduce.job.queuename="root.default" /word.txt /output
    
    #任務2將會失敗root.users is not a leaf queue,有了自列隊就不能提交
    hadoop jar /opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/lib/hadoop-mapreduce/hadoop-mapreduce-examples-3.0.0-cdh6.2.0.jar wordcount -Dmapreduce.job.queuename="root.users" /word.txt /output1
    
    hadoop jar /opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/lib/hadoop-mapreduce/hadoop-mapreduce-examples-3.0.0-cdh6.2.0.jar wordcount -Dmapreduce.job.queuename="root.users.dev" /word.txt /output2
    
    hadoop jar /opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/lib/hadoop-mapreduce/hadoop-mapreduce-examples-3.0.0-cdh6.2.0.jar wordcount -Dmapreduce.job.queuename="root.users.test" /word.txt /output3

1.6 YARN資源隔離方案

  • 支持內存和CPU兩種資源隔離
    • 內存是一種「決定生死」的資源
    • CPU是一種「影響快慢」的資源
  • 內存隔離
    • 基於線程監控的方案
    • 基於Cgroups的方案
  • CPU隔離
    • 默認不對CPU資源進行隔離
    • 基於Cgroups的方案

1.7 YARN支持的調度語義

  • 支持的語義
    • 請求某個特定節點/機架上的特定資源量
    • 將某些節點加入(或移除)黑名單,再也不爲本身分配這些節點上的資源
    • 請求歸還某些資源
  • 不支持的語義
    • 請求任意節點/機架上的特定資源量
    • 請求一組或幾組符合某種特質的資源
    • 超細粒度資源
    • 動態調整Container資源

1.8 YARN經常使用命令

  • 列出全部的Application: yarn application -list
  • 根據Application狀態過濾: yarn application -list -appStates ACCEPTED
  • Kill掉Application: yarn application -kill [ApplicationId]
  • 查看Application日誌: yarn logs -applicationId [ApplicationId]
  • 查詢Container日誌:yarn logs -applicationId [ApplicationId] -containerId [containerId] -nodeAddress [nodeAddress]
    • 配置是配置文件中:yarn.nodemanager.webapp.address參數指定

2 Hadoop YARN應用

2.1 應用程序種類繁多

2.2 YARN設計目標

  • 通用的統一資源管理系統
    • 同時運行長應用程序和短應用程序
  • 長應用程序
    • 一般狀況下,永不中止運行的程序
    • Service、HTTP Server等
  • 短應用程序
    • 短期(秒級、分鐘級、小時級)內會運行結束的程序
    • MR job、Spark Job等

2.3 以YARN爲核心的生態系統

2.4 運行在YARN上的計算框架

  • 離線計算框架:MapReduce
  • DAG計算框架:Tez
  • 流式計算框架:Storm
  • 內存計算框架:Spark

3 監控頁面

4 YARN HA

從圖中看出yarn的HA相對於HDFS的HA簡單不少。緣由是YARN在開發的過程當中,HDFS才考慮到HA的應用(在出2.0版本),HDFS爲了老代碼的兼容性,和新代碼的可拓展性加入了ZKFailoverController(ZKFC)來處理ZK相關的業務。而YARN就直接將ZK的相關的業務規劃進了源架構中,因此架構圖看起來比HDFS HA簡單不少。

4.1 CDH中YARN配置HA

也很簡單,一步完成。

相關文章
相關標籤/搜索