大數據篇:YARN


大數據篇:YARN

YARN是什么?

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

如果沒有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使用列隊解決多租戶中共享資源的問題

    • root

      |---prd

      |---dev

      ​ |---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

也很簡單,一步完成。

5 參數調優

5.1 內存利用優化

  • yarn.nodemanager.resource.memory-mb

單個節點可用內存,表示該節點上YARN可使用的物理內存總量。

  • yarn.scheduler.maximum-allocation-mb

單個任務可申請的最多物理內存量

一般出現資源不夠的情況就需要調整上述兩個參數,比如前面來了1個G數據,分成10個塊,每一個map占用1G內存,那么需要10G,4個reduce任務一個1G內存,這時候yarn.scheduler.maximum-allocation-mb參數就必須大於14G,而如果有2個這種任務,那么yarn.nodemanager.resource.memory-mb參數就必須大於28G。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM