1. 程式人生 > >YARN詳解(YARN架構設計、常用命令、三種排程器)

YARN詳解(YARN架構設計、常用命令、三種排程器)

    YARN架構設計也是主從架構,分為Resource Mananger(RM)和Node Manager(NM),其中RM主要負責應用管理和資源排程,NM主要負責容器和作業。

一、YARN架構介紹


YARN架構圖如上圖所示,詳細介紹如下:

  • ResourceManager(RM):負責對各NM上的資源進行統一管理和排程,將AM分配空閒的Container執行並監控其執行狀態。對AM申請的資源請求分配相應的空閒Container。主要由兩個元件構成:排程器(Scheduler)和應用程式管理器(Applications Manager)
  • 排程器(Scheduler):排程器根據容量、佇列等限制條件(如每個佇列分配一定的資源,最多執行一定數量的作業等),將系統中的資源分配給各個正在執行的應用程式。排程器僅根據各個應用程式的資源需求進行資源分配,而資源分配單位是
    Container,從而限定每個任務使用的資源量。Scheduler不負責監控或者跟蹤應用程式的狀態,也不負責任務因為各種原因而需要的重啟(由ApplicationMaster負責)。總之,排程器根據應用程式的資源要求,以及叢集機器的資源情況,為用程式分配封裝在Container中的資源。排程器是可插拔的,例如CapacityScheduler、FairScheduler。(PS:在實際應用中,只需要簡單配置即可)
  • 應用程式管理器(Application Manager):應用程式管理器負責管理整個系統中所有應用程式,包括應用程式提交、與排程器協商資源以啟動AM、監控AM執行狀態並在失敗時重新啟動等,跟蹤分給的Container的進度、狀態也是其職責。
  • NodeManager(NM):NM是每個節點上的資源和工作管理員。它會定時地向RM彙報本節點上的資源使用情況和各個Container的執行狀態;同時會接收並處理來自AM的Container 啟動/停止等請求。
  • ApplicationMaster(AM):使用者提交的應用程式均包含一個AM,負責應用的監控,跟蹤應用執行狀態,重啟失敗任務等。ApplicationMaster是應用框架,它負責向ResourceManager協調資源,並且與NodeManager協同工作完成Task的執行和監控。MapReduce就是原生支援的一種框架,可以在YARN上執行Mapreduce作業。有很多分散式應用都開發了對應的應用程式框架,用於在YARN上執行任務,例如Spark,Storm等。如果需要,我們也可以自己寫一個符合規範的YARN application。
  • Container:是YARN中的資源抽象,它封裝了某個節點上的多維度資源,如記憶體、CPU、磁碟、網路等,當AM向RM申請資源時,RM為AM返回的資源便是用Container 表示的。 YARN會為每個任務分配一個Container且該任務只能使用該Container中描述的資源。(詳細介紹可參考小編部落格:Container容器詳解

二、YARN常用命令

   1、 檢視YARN命令

1.進入hadoop程式目錄中的bin目錄
2.檢視yarn所以命令
    yarn 

    2、檢視正在執行的任務

hadoop/bin]$yarn application -list

    PS:application_1528463812366_0001,查詢的數字1528463812366代表long型下的時間數值

    3、殺掉正在執行任務

yarn application -kill 任務id
例:yarn application -kill application_1528463812366_0001

三、YARN三種排程器

    應用對YARN資源的請求應該立刻得到滿足,但是實際環境中資源有限,一個應用資源的請求可能要等待一段時間才能得到相應的資源。在YARN中,負責應用資源分配的是Schedule,對於排程,其本身就是一個難題。YARN中提供了三種可以選擇的排程器:FIFO Schedule、Capacity Schedule、FairSchedule,其對比圖如下圖所示。


FIFO Schedule:也可稱為佇列排程器,簡單的理解所提交的job一個一個完成。

Capacity Schedule(預設):簡單理解就是會額外空出一部分資源,專門用於完成一些小的job,但是若沒有相關任務,則這個資源就會一直佔用,容易造成資源浪費。

Fair Schedule:一般情況下,排程器選擇這種排程方式,簡單理解就是我一個job佔用全部資源工作,若有小job來,就釋放一定的資源去完成小job,小job完成後,大job繼續佔用,一般不會產生資源浪費。PS:小job提交後需要等待一定時間,等大job釋放資源

關於排程器,入門理解可以參考部落格Schedule詳解