Yarn資源排程

QAQ_0v0發表於2020-09-23

簡介

yarn是hadoop叢集當中的資源管理系統模組,管理叢集當中的資源(主要是伺服器的各種硬體資源,包括CPU,記憶體)以及執行在yarn上面的各種任務。

  • 一級排程管理:
    計算資源管理(CPU,記憶體,網路IO,磁碟)
    App生命週期管理 (每一個應用執行的情況,都需要彙報給ResourceManager)
  • 二級排程管理:
    任務內部的計算模型管理 (AppMaster的任務精細化管理)
    多樣化的計算模型

主要元件介紹與作用

主要元件

  • ResourceManager:yarn叢集的主節點,主要用於接收客戶端提交的任務,並對資源進行分配
  • NodeManager:yarn叢集的從節點,主要用於任務的計算
  • ApplicationMaster:當有新的任務提交到ResourceManager的時候,ResourceManager會在某個從節點nodeManager上面啟動一個ApplicationMaster程式,負責這個任務執行的資源的分配,任務的生命週期的監控等
  • Container:資源的分配單位,ApplicationMaster啟動之後,與ResourceManager進行通訊,向ResourceManager提出資源申請的請求,然後ResourceManager將資源分配給ApplicationMaster,這些資源的表示,就是一個個的container
  • JobHistoryServer:這是yarn提供的一個檢視已經完成的任務的歷史日誌記錄的服務,我們可以啟動jobHistoryServer來觀察已經完成的任務的所有詳細日誌資訊
  • TimeLineServer:hadoop2.4.0以後出現的新特性,主要是為了監控所有執行在yarn平臺上面的所有任務(例如MR,Storm,Spark,HBase等等)

主要元件的作用

  • resourceManager主要作用:
    處理客戶端請求
    啟動/監控ApplicationMaster
    監控NodeManager
    資源分配與排程

  • NodeManager主要作用:
    單個節點上的資源管理和任務管理
    接收並處理來自resourceManager的命令
    接收並處理來自ApplicationMaster的命令
    管理抽象容器container
    定時向RM彙報本節點資源使用情況和各個container的執行狀態

  • ApplicationMaster主要作用:
    資料切分
    為應用程式申請資源
    任務監控與容錯
    負責協調來自ResourceManager的資源,開通NodeManager監視容的執行和資源使用(CPU,記憶體等的資源分配)

  • Container主要作用:
    對任務執行環境的抽象
    任務執行資源(節點,記憶體,cpu)
    任務啟動命令
    任務執行環境

yarn當中的排程器

yarn我們都知道主要是用於做資源排程,任務分配等功能的,那麼在hadoop當中,究竟使用什麼演算法來進行任務排程就需要我們關注了,hadoop支援好幾種任務的排程方式,不同的場景需要使用不同的任務排程器

yarn當中的排程器介紹

第一種排程器:FIFO Scheduler (佇列排程器)

把應用按提交的順序排成一個佇列,這是一個先進先出佇列,在進行資源分配的時候,先給佇列中最頭上的應用進行分配資源,待最頭上的應用需求滿足後再給下一個分配,以此類推。
FIFO Scheduler是最簡單也是最容易理解的排程器,也不需要任何配置,但它並不適用於共享叢集。大的應用可能會佔用所有叢集資源,這就導致其它應用被阻塞。在共享叢集中,更適合採用Capacity Scheduler或Fair Scheduler,這兩個排程器都允許大任務和小任務在提交的同時獲得一定的系統資源。
在這裡插入圖片描述

第二種排程器:capacity scheduler(容量排程器,apache版本預設使用的排程器)

Capacity 排程器允許多個組織共享整個叢集,每個組織可以獲得叢集的一部分計算能力。通過為每個組織分配專門的佇列,然後再為每個佇列分配一定的叢集資源,這樣整個叢集就可以通過設定多個佇列的方式給多個組織提供服務了。除此之外,佇列內部又可以垂直劃分,這樣一個組織內部的多個成員就可以共享這個佇列資源了,在一個佇列內部,資源的排程是採用的是先進先出(FIFO)策略。
在這裡插入圖片描述

第三種排程器:Fair Scheduler(公平排程器,CDH版本的hadoop預設使用的排程器)

Fair排程器的設計目標是為所有的應用分配公平的資源(對公平的定義可以通過引數來設定)。公平排程在也可以在多個佇列間工作。舉個例子,假設有兩個使用者A和B,他們分別擁有一個佇列。當A啟動一個job而B沒有任務時,A會獲得全部叢集資源;當B啟動一個job後,A的job會繼續執行,不過一會兒之後兩個任務會各自獲得一半的叢集資源。如果此時B再啟動第二個job並且其它job還在執行,則它將會和B的第一個job共享B這個佇列的資源,也就是B的兩個job會用於四分之一的叢集資源,而A的job仍然用於叢集一半的資源,結果就是資源最終在兩個使用者之間平等的共享
在這裡插入圖片描述

關於yarn常用引數設定

  • 第一個引數:container分配最小記憶體
    yarn.scheduler.minimum-allocation-mb 1024 給應用程式container分配的最小記憶體
  • 第二個引數:container分配最大記憶體
    yarn.scheduler.maximum-allocation-mb 8192 給應用程式container分配的最大記憶體
  • 第三個引數:每個container的最小虛擬核心個數
    yarn.scheduler.minimum-allocation-vcores 1 每個container預設給分配的最小的虛擬核心個數
  • 第四個引數:每個container的最大虛擬核心個數
    yarn.scheduler.maximum-allocation-vcores 32 每個container可以分配的最大的虛擬核心的個數
  • 第五個引數:nodeManager可以分配的記憶體大小
    yarn.nodemanager.resource.memory-mb 8192 nodemanager可以分配的最大記憶體大小,預設8192Mb

相關文章