YARN簡述

  YARN(Yet Another Resource Negotiator)是Hadoop的集羣資源管理系統。YARN提供請求和使用集羣資源的API,但這些API不多直接用於用戶代碼。相反,用戶代碼中用的是分佈式計算框架提供的更高層API,這些API創建在YARN之上且向用戶隱藏了資源管理細節。node

1、YARN應用運行機制

一、運行機制

       YARN經過兩類長期運行的守護進程提供本身的核心服務:管理集羣上資源使用的資源管理器(resource manager)、運行在集羣中全部節點上且可以啓動和監控容器(container)的節點管理器(node manager)。容器用於執行特定應用程序的進程,每一個容器都有資源限制(內存、CPU等)。一個容器能夠是一個Unix進程,也能夠是一個Linux cgroup,取決於YARN的配置。服務器

       YARN應用運行機制示意圖以下:架構

   

       首先,客戶端聯繫資源管理器,要求它運行一個application master進程(1)。而後,資源管理器找到一個可以在容器中啓動application master的節點管理器(2a & 2b)。application master運行起來後作什麼依賴於應用自己。多是在所處的容器中簡單地運行一個計算,並將結果返回給客戶端;或是向資源管理器請求更多的容器(3),以用於運行一個分佈式計算(4a & 4b)。app

       YARN自己不會爲應用的各部分(客戶端、master和進程)彼此間通訊提供任何手段。大多數重要的YARN應用使用某種形式的遠程通訊機制來向客戶端傳遞狀態更新和返回結果,可是這些通訊機制都是專屬於各應用的。框架

二、資源請求

       YARN有一個靈活的資源請求模型。當請求多個容器時,能夠指定每一個容器須要的計算機資源數量(內存和CPU),還能夠指定對容器的本地限制要求。YARN容許一個應用爲所申請的容器指定本地限制。本地限制可用於申請位於指定節點或機架,或集羣中任何位置的容器。分佈式

       有時本地限制沒法被知足,這種狀況下要麼不分配資源,或者可選擇放鬆限制。例如,一個節點因爲已運行了別的容器而沒法再啓動新的容器,這時若是有應用請求該節點,則YARN將嘗試在同一機架中的其餘節點上啓動一個容器,若是還不行,則會嘗試集羣中的任意一個節點。ide

       YARN應用能夠在運行中的任意時刻提出資源申請。例如,能夠在最開始提出全部的請求,或者爲了知足不斷變化的應用須要,採起更爲動態的方式在須要更多資源時提出請求。Spark採用第一種方式,在集羣上啓動固定數量的執行器;MapReduce則分兩步走,在最開始的時候申請map任務容器,reduce人去容器的啓用則放在後期。oop

三、YARN三種模型

       YARN應用生命週期差別性很大,因此按照應用到用戶運行的做業之間的映射關係對應用分類更有意義。spa

       ① 一個用戶做業對應一個應用(MapReduce);blog

       ② 做業的每一個工做流或每一個用戶對話對應一個應用(Spark);

       ③ 多個用戶共享一個長期運行的應用,做爲一種協調者的角色運行(Apache Slider、Impala)。

 

2、YARN與MapReduce 1相比

一、組成

       MapReduce 1中,有兩類守護進程控制着做業執行過程:一個jobtracker及一個或多個tasktracker。jobtracker經過調度tasktracker上運行的任務來協調全部運行在系統上的做業。tasktracker在運行任務的同時將運行進度報告發送給jobtracker,jobtracker由此記錄每項做業任務的總體進度狀況。若是其中一個任務失敗,jobtracker能夠在任何一個tasktracker節點上從新調度該任務。

       MapReduce 1和YARN組成比較以下:

MapReduce 1

YARN

Jobtracker

資源管理器、application master、時間軸服務器

TaskTracker

節點管理器

Slot

容器

二、可擴展性

       YARN能夠在更大規模的集羣上運行。因爲jobtracker必須同時管理做業任務和任務,當節點數達到4000、任務數達到40000時,MapReduce 1會遇到可擴展性瓶頸。YARN利用資源管理器和application master分離的架構優勢克服了這個侷限性,能夠擴展到面向將近10000個節點和100000個任務。

三、利用率

       MapReduce 1中,每一個tasktracker都配置有若干固定長度的slot,這些slot時靜態分配的,在配置的時候就被劃分爲map slot和reduce slot。一個map slot僅能用於運行一個map任務,一樣,一個reduce slot僅能用於運行一個reduce任務。

       YARN上,一個節點管理器管理一個資源池,而不是指定的固定數目的slot。YARN上運行的MapReduce不會出現因爲集羣中僅有map slot可用致使reduce任務必須等待的狀況。YARN中的資源時精細化管理的,這樣一個應用可以按需請求資源,而不是請求一個不可分割的、對於特定的任務而言可能會太大或過小的slot。

四、多租戶

       YARN向MapReduce之外的其餘類型的分佈式應用開放了Hadoop。用戶甚至能夠在同一個YARN集羣上運行不一樣版本的MapReduce。

 

3、YARN中的調度

一、調度選項

       YARN調度器的工做是根據既定策略爲應用分配資源。YARN中有三種調度器可用:FIFO調度器、容量調度器、公平調度器。

       FIFO調度器將應用放置在一個隊列中,而後按照提交的順序運行應用,優勢是簡單易懂不須要任何配置,可是不適合共享集羣。

       使用容量調度器時,一個獨立的專門隊列保證小做業一提交就能夠啓動,因爲隊列容量是爲那個隊列中的做業所保留的,所以這種策略是以整個集羣的利用率爲代價的。

       使用公平調度器時,不須要預留必定量的資源,由於調度器會在全部運行的做業之間動態平衡資源,既獲得了較高的集羣利用率,又能保證小做業能及時完成。

二、延遲調度

       在一個繁忙的集羣上,若是一個應用請求某個節點,那麼極有可能此時有其餘容器正在該節點上運行。此時若是等待一小段時間,可以增長在所請求的節點上分配到一個容器的機會,從而能夠提升集羣的效率。這個特性稱爲延遲調度。容量調度器和公平調度器都支持延遲調度。

       當使用延遲調度時,調度器不會簡單的使用它收到的第一個調度機會,而是等待、設定的最大數目的調度機會發生,而後才放鬆本地性限制並接收下一個調度機會。

三、主導資源公平性

       YARN中調度器解決公平性的思路是,觀察每一個用戶的主導資源,並將其做爲對集羣資源使用的一個度量(稱爲主導資源公平性 DRF),默認狀況下不用DRF。

相關文章
相關標籤/搜索