1. 程式人生 > >Yarn架構設計詳解

Yarn架構設計詳解

Hadoop Yarn

1.Yarn基本服務組件

Yarn是一種新的 Hadoop資源管理器,它是一個通用資源管理系統,可為上層應用提供統一的資源管理和調度,它的引入為集群在利用率、資源統一管理和數據共享等方面帶來了巨大好處。

技術分享圖片

  • ResourceManager(RM):負責對各NM上的資源進行統一管理和調度。將AM分配空閑的Container運行並監控其運行狀態。對AM申請的資源請求分配相應的空閑Container。主要由兩個組件構成:調度器和應用程序管理器。
  • 調度器(Scheduler):調度器根據容量、隊列等限制條件(如每個隊列分配一定的資源,最多執行一定數量的作業等),將系統中的資源分配給各個正在運行的應用程序。調度器僅根據各個應用程序的資源需求進行資源分配,而資源分配單位是Container,從而限定每個任務使用的資源量。Shceduler不負責監控或者跟蹤應用程序的狀態,也不負責任務因為各種原因而需要的重啟(由ApplicationMaster負責)。總之,調度器根據應用程序的資源要求,以及集群機器的資源情況,為應用程序分配封裝在Container中的資源。
    調度器是可插拔的,例如CapacityScheduler、FairScheduler。
  • 應用程序管理器(Applications 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中描述的資源。
    2.Yarn的資源管理

    1.資源調度和隔離是yarn作為一個資源管理系統,最重要且最基礎的兩個功能。資源調度由resourcemanager完成,而資源隔離由各個nodemanager實現。
    2.Resourcemanager將某個nodemanager上資源分配給任務(這就是所謂的“資源調度”)後,nodemanager需按照要求為任務提供相應的資源,甚至保證這些資源應具有獨占性,為任務運行提供基礎和保證,這就是所謂的資源隔離。

    3.當談及到資源時,我們通常指內存、cpu、io三種資源。Hadoop yarn目前為止僅支持cpu和內存兩種資源管理和調度。
    4.內存資源多少決定任務的生死,如果內存不夠,任務可能運行失敗;相比之下,cpu資源則不同,它只會決定任務的快慢,不會對任務的生死產生影響。

相關參數:
memory參數:

  • 1.yarn.nodemanager.resource.memory-mb
    表示該節點上yarn可以使用的物理內存總量,默認是8192m,註意,如果你的節點內存資源不夠8g,則需要調減這個值,yarn不會智能的探測節點物理內存總量 可調節為本地內存的80%
  • 2.yarn.nodemanager.vmem-pmem-ratio
    任務使用1m物理內存最多可以使用虛擬內存量,默認是2.1
  • 3.yarn.nodemanager.pmem-check-enabled
    是否啟用一個線程檢查每個任務證使用的物理內存量,如果任務超出了分配值,則直接將其kill,默認是true。
  • 4.yarn.nodemanager.vmem-check-enabled
    是否啟用一個線程檢查每個任務證使用的虛擬內存量,如果任務超出了分配值,則直接將其kill,默認是true。
  • 5.yarn.scheduler.minimum-allocation-mb
    單個任務可以使用最小物理內存量,默認1024m,如果一個任務申請物理內存量少於該值,則該對應值改為這個數。
  • 6.yarn.scheduler.maximum-allocation-mb
    單個任務可以申請的最多的內存量,默認8192m
    CPU參數:
  • 1.yarn.nodemanager.resource.cpu-vcores
    表示該節點上yarn可使用的虛擬cpu個數,默認是8個,註意,目前推薦將該值為與物理cpu核數相同。如果你的節點cpu合數不夠8個,則需要調減小這個值,而yarn不會智能的探測節點物理cpu總數。
  • 2.yarn.scheduler.minimum-allocation-vcores
    單個任務可申請最小cpu個數,默認1,如果一個任務申請的cpu個數少於該數,則該對應值被修改為這個數
  • 3.yarn.scheduler.maximum-allocation-vcores
    單個任務可以申請最多虛擬cpu個數,默認是32.

Yarn架構設計詳解