1. 程式人生 > >第三部分: YARN 架構,應用監控

第三部分: YARN 架構,應用監控

這裡寫圖片描述

這裡寫圖片描述

MapReduce has undergone a complete overhaul in hadoop-0.23 and we now have, what we call, MapReduce 2.0 (MRv2) or YARN.

The fundamental idea of MRv2 is to split up the two major functionalities of the JobTracker, resource management and job scheduling/monitoring, into separate daemons. The idea is to have a global ResourceManager (RM) and per-application ApplicationMaster (AM). An application is either a single job in the classical sense of Map-Reduce jobs or a DAG of jobs.

The ResourceManager and per-node slave, the NodeManager (NM), form the data-computation framework. The ResourceManager is the ultimate authority that arbitrates resources among all the applications in the system.

The per-application ApplicationMaster is, in effect, a framework specific library and is tasked with negotiating resources from the ResourceManager and working with the NodeManager(s) to execute and monitor the tasks.

###YARN服務元件

  • YARN總體上仍然是Master/Slave結構,在整個資源管理框架中,ResourceManager 為Master,NodeManager為Slave。
  • ResourceManager 負責對各個NodeManager上的資源進行統一管理和排程
  • 當用戶提交一個應用程式時,需要提供一個用以跟蹤和管理這個程式的。
  • ApplicationMaster,它負責向ResourceManager申請資源,並需要NodeManager啟動可以佔用一定資源的任務。
  • 由於不同的Application被分佈到不同的節點上,因此它們之間不會相互影響

ResourceManager

  • 全域性的資源管理器,整個叢集只有一個,負責叢集資源的統一管理和排程分配。
  • 功能
    • 處理客戶端請求
    • 啟動/監控ApplicationMaster
    • 監控NodeManager
    • 資源分配與排程

###NodeManager

  • 整個叢集有多個,負責單節點資源管理和使用
  • 功能
  • 單個節點上的資源管理和任務管理
  • 處理來自ResourceManager的命令
  • 處理來自ApplicationMaster的命令
  • NodeManager管理抽象容器,這些容器代表著可供一個特定應用程式使用的針對每個節點的資源。
  • 定時地向RM彙報節點上的資源使用情況和各個Container的執行狀態

###Application Master

  • 管理一個在YARN內執行的應用程式的每個例項
  • 功能
  • 資料切分
  • 為應用程式申請資源,並進一步分配給內部任務
  • 任務監控與容錯
  • 負責協調來自ResourceManager的資源,開通過NodeManager監視容器的執行和資源使用(CPU,記憶體等的資源分配)。

###Container

  • YARN中的資源抽象,封裝某個節點上多維度資源,如記憶體,CPU,自盤,網路等,當AM想RM申請資源時,RM向AM返回的資源便是用Container表示的。
  • YARN 會為每個任務分配一個Container,且該任務只能使用Container中描述的資源。
  • 功能:
  • 對任務執行環境的抽象
  • 描述一系列資訊
  • 任務執行資源(節點,記憶體,CPU)
  • 任務啟動命令
  • 任務執行環境

###YARN 資源管理

  • 資源排程和資源隔離是YARN作為一個資源管理系統,最重要和最基礎的兩個功能。資源排程有ResourceManager完成,而資源隔離由各個NM實現。
  • ResourceManager將某個NodeManager上資源分配給任務(這就是所謂的“”資源排程“”)後,NodeManager需按照要求為任務提供相應的資源,甚至保證這些資源應具有獨佔性,為任務執行提供基礎的保證,這就是所謂的資源隔離。
  • 當談及到資源時,我們通常指記憶體,CPU和IO三種資源。Hadoop YARN同時支援記憶體和CPU兩種資源的排程。
  • 記憶體資源的多少會會決定任務的生死,如果記憶體不夠,任務可能執行失敗;相比之下,CPU資源則不同,它只會決定任務執行的快慢,不會對生死產生影響。

配置YARN的記憶體和核數:
這兩個引數在yarn.default.xml檔案中,預設是8G,1

<property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>4096</value>
    </property>
	<property>
        <name>yarn.scheduler.minimum-allocation-vcores</name>
        <value>2</value>
    </property>
    

###YARN資源管理

  • YARN允許使用者配置每個節點上可用的實體記憶體資源,注意,這裡是“可用的”,因為一個節點上的記憶體會被若干個服務共享,比如一部分給YARN,一部分給HDFS,一部分給HBase等,YARN配置的知識自己可以使用的,配置引數如下:

  • yarn.nodemanager.resource.memory-mb
    表示該節點上YARN可使用的實體記憶體總量,預設是8192(MB),注意,如果你的節點記憶體資源不夠8GB,則需要調減這個值,而YARN不會只能的探測節點的實體記憶體總量。

  • yarn.nodemanager.vmem-pmem-ratio
    任務每使用1MB實體記憶體,最多可使用虛擬記憶體量,預設是2.1

  • yarn.nodemanager.pmem-check-enabled
    是否啟動一個執行緒檢查每個任務正使用的實體記憶體量,如果任務超出分配值,則直接將其殺掉,預設是true。

  • yarn.nodemanager.vmem-check-enabled
    是否啟動一個執行緒檢查每個任務正使用的虛擬記憶體量,如果任務超出分配值,則直接將其殺掉,預設是true。

  • yarn.scheduler.minimum-allocation-mb
    單個任務可申請的最少實體記憶體量,預設是1024(MB),如果一個任務申請的實體記憶體量少於該值,則該對應的值改為這個數。

  • yarn.scheduler.maximum-allocation-mb
    單個任務可申請的最多實體記憶體量,預設是8192(MB).

  • 目前的CPU被劃分成虛擬CPU(CPU virtual Core),這裡的虛擬CPU是YARN自己引入的概念,初衷是,考慮到不同節點的CPU效能可能不同,每個CPU具有的計算能力也是不一樣的,比如某個物理CPU的計算機能力可能是另外一個物理CPU的2倍,這時候,你可以通過為第一個物理CPU多配置幾個虛擬CPU彌補這種差異。使用者提交作業時,可硬指定沒幹過任務需要的虛擬CPU個數。在YARN中,CPU相關配置引數如下:

  • yarn.nodemanager.resource.cpu-vcores
    表示該節點上YANR可使用的虛擬CPU個數,預設是8,注意,目前推薦將該為與物理CPU核數數目相同。如果你的節點CPU核數不夠8個,則需要調減小這個值,而YARN不會智慧的探測節點的物理CPU總數。

  • yarn.scheduler.minimum-allocation-vcore
    單個任務可申請的最小虛擬CPU個數,預設是1,如果一個任務申請的CPU個數少於該數,則該對應的值改為這個數。

  • yarn.scheduler.maximum-allocation-vcores

###Apache Slider