Yarn執行原理

COMEO發表於2020-12-20
  1. yarn的介紹

    yarn是hadoop叢集當中的資源管理系統模組,從hadoop2.0開始引入yarn模組,yarn可為各類計算框架提供資源的管理和排程,主要用於管理叢集當中的資源(主要是伺服器的各種硬體資源,包括CPU,記憶體,磁碟,網路IO等)以及排程執行在yarn上面的各種任務。

    yarn核心出發點是為了分離資源管理與作業監控,實現分離的做法是擁有一個全域性的資源管理(ResourceManager,RM),以及每個應用程式對應一個的應用管理器(ApplicationMaster,AM)

    總結一句話就是說:yarn主要就是為了排程資源,管理任務等

    其排程分為兩個層級來說:

    • 一級排程管理:

      計算資源管理(CPU,記憶體,網路IO,磁碟)

    • 二級排程管理:

      任務內部的計算模型管理(AppMaster的任務精細化管理)

  2. yarn的主要元件介紹與作用

    Yarn總體上是Master/Slave結構,主要由ResourceManager、NodeManager、ApplicationMaster和Container等幾個元件構成。

    • ResourceManager(RM)負責處理客戶端請求,對各NM上的資源進行統一管理和排程。給ApplicationMaster分配空閒的Container執行並監控其執行狀態。主要由兩個元件構成:排程器和應用程式管理器:
      • 排程器(Scheduler):排程器根據容量、佇列等限制條件,將系統中的資源分配給各個正在執行的應用程式。排程器僅根據各個應用程式的資源需求進行資源分配,而資源分配單位是Container。Scheduler不負責監控或者跟蹤應用程式的狀態。總之,排程器根據應用程式的資源要求,以及叢集機器的資源情況,為應用程式分配封裝在Container中的資源。
      • 應用程式管理器(Applicatios Manager):應用程式管理器負責管理整個系統中所有應用程式,包括應用程式提交、與排程器協商資源以啟動ApplicationMaster、監控ApplicationMaster執行狀態並在失敗時重新啟動等,跟蹤分給的Container的進度、狀態也是其職責。
    • NodeManager(NM):NodeManager是每個節點上的資源和工作管理員。它會定時地向ResourceManager彙報本節點上的資源使用情況和各個Container的執行狀態;同時會接受並處理來自ApplicationMaster的Container啟動/停止等請求。
    • ApplicationMaster(AM):使用者提交的應用程式均包含一個ApplicationMaster,負責應用的監控,跟蹤應用執行狀態,重啟失敗任務等。ApplicationMaster是應用框架,它負責向ResourceManager協調資源,並且與NodeManager協同工作完成Task的執行和監控。
    • Container:Container是Yarn中的資源抽象,它封裝了某個節點上的多維度資源,如記憶體、CPU、磁碟、網路等,當ApplicationMaster向ResourceManager申請資源時,ResourceManager為ApplicationMaster返回資源便是用Container表示的。
  3. yarn的結構和工作流程

在這裡插入圖片描述

  1. yarn的排程器

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

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

      把任務按提交的順序排成一個佇列,這是一個先進先出佇列,在進行資源分配的時候,先給佇列中最頭上的任務進行分配資源,待最頭上任務需求滿足後再給下一個分配,以此類推。

      FIFO Scheduler是最簡單也是最容易理解的排程器,也不需要任何配置,但它並不適用於共享叢集。大的任務可能會佔用所有叢集資源,這就導致其它任務被阻塞。

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

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

    20201220141536632.png

    • 第三種排程器: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仍然用於叢集一半的資源,結果就是資源最終再兩個使用者之間平等的共享。

相關文章