[Hadoop]-Yarn-架構篇

1.簡述node

  Yarn是Hadoop2.X的核心組件之一.負責集羣的資源管理.(不侷限於Hadoop,Spark等等至關多的組件均可以利用Yarn來進行資源管理與調度)編程

  Yarn自己由兩大組件構成:ResourceManager(RM)和NodeManager(NM).在Yarn中,整個資源管理依靠這兩大組件來共同完成.網絡

  ResourceManager:框架

    ResourceManager負責整個集羣的資源管理與分配.它自己再由兩個組件構成編程語言

    應用程序管理器ApplicationManageroop

      ApplicationManager是RM的中心入口,負責管理整個集羣的應用程序.包括應用程序的提交,與調度器協商資源,跟蹤分配的Container,啓動AppMaster,監控AppMaster執行狀態,失敗重啓等等性能

    調度器(Scheduler)spa

      調度器根據根據隊列,容量等等條件(好比每隊最多分配多少,最多執行做業數多少),整體上將系統中的資源分配給各個應用程序.操作系統

      對於某一個應用程序,根據對該應用程序的請求進行資源分配.線程

      資源分配的最終結果是一個Container.

  NodeManager

    NodeManager是每一個節點上的資源管理器和任務管理器.它會定時向RM彙報本節點的資源狀況和各個Container的運行狀態,並接收和實際處理來自ApplicationManager的Container啓動&暫停命令

2.核心概念

  2.1 Container與資源隔離

    Container,意義就像它的名字-容器.它是Yarn中對資源的一種抽象.它封裝的是某個節點的多維度資源(內存,CPU,磁盤,網絡等等),也是資源最終分配的結果與單位,

    Container做爲容器的另外一個概念就是資源隔離.

    資源隔離包含兩層含義,即

      Container以內的運行使用資源的上限不會超過Container,

      Container以外的運行不會佔用到Container以內的資源.

    Container資源隔離的實際操縱者,是Yarn的NM.它針對不一樣的資源,可使用不一樣的隔離機制.具體見後

  2.2 ApplicationMaster

     ApplicationMaster是一種應用框架,這是Yarn跨越Hadoop能夠做爲不少框架的資源調度組件的基礎.

      ApplicationMaster能夠是任何編程語言編寫的程序,它使用ProtocolBuf和ResourceManager.NodeManager進行交互.

      它實際負責向ResourceManager申請協調資源,而且與NodeManager協同工做完成對任務的執行,監控等等(跟蹤應用程序狀態重啓失敗任務).

      它的原生支持就是MR,但好比Spark,Storm等等不少都實現了本身的ApplicationMaster,因此才能夠譬如SparkOnYarn.

 

3.Yarn的工做流程

  1.向Yarn提交一個應用程序.(這個應用程序自己就會包含幾個部分:用戶程序,ApplicationMaster程序,以及啓動ApplicationMaster的命令等)

  2.ResourceManager將會爲這個應用程序分配第一個Container.而且會當即與這個Container所在的NodeManager通信,要求以這個Container啓動ApplicationMaster應用程序

  3.ApplicationMaster被啓動後,會首先向ResourceManager註冊,這個時候應用程序已經正式啓動,能夠經過ResourceManager查看應用程序狀態了.

    以後ApplicationMaster將接管應用程序,負責與ResourceManager通信爲以後的各個任務申請資源,監控狀態,重複如下4-7步驟直到整個任務結束

  4.ApplicationMaster採用輪詢的方式經過RPC協議向ResourceManager申請資源

  5.一旦申請到資源拿到Container,ApplicationMaster將會當即與Container所在的NodeManager通信,要求它啓動任務

  6.NodeManager爲任務設置好運行環境(包括環境變量,Jar包,二進制程序等等),將任務啓動寫到一個腳本里,而後執行腳本啓動任務

  7.各個任務經過RPC協議向ApplicationMaster彙報本身的狀態和進度,以便ApplicationMaster隨時重啓某個任務

  8.任務所有結束後,ApplicationMaster向ResourceManager註銷並關閉本身

 

4.Yarn的資源隔離機制

  Yarn的資源都是指可供使用的資源,好比應該刨除操做系統自己佔用,其它應用程序佔用等,Yarn自己不會智能探測節點的資源

  4.1 內存隔離

    Yarn的內存隔離默認是採用線程監控是否超量.一旦發現超量會當即殺死任務.

      Java進程在建立之初內存會暴增而後迅速回復正常,因此採用線程監控會更加合適.Cgroups機制是任什麼時候候都不得超量,這樣很容易在進程啓動之初被殺死

    Yarn的內存相關配置

      yarn.nodemanager.resource.memory-mb Yarn上可以使用的物理內存,默認8192(MB),若是節點內存資源不足,則應酌情減小這個值(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)

  4.2 CPU隔離

    在Yarn中,由於考慮到不一樣的CPU的計算性能差異極大,CPU資源被從新定義了一個虛擬CPU的概念.對於高性能CPU,能夠配置更高的虛擬CPU配比率.

    默認狀況下,Yarn不會對CPU進行調度,須要使用專門的資源管理器

    Yarn的CPU相關配置

      yarn.nodemanager.resource.cpu-vcores 表示該節點可以使用的虛擬CPU個數,默認爲8,建議配置爲物理核數,高性能CPU能夠配置爲2倍物理核數

      yarn.scheduler.minimum-allocation-vcores 單個任務申請的最少核數,默認爲1

      yarn.scheduler.maximum-allocation-vcores 單個任務申請的最大核數,默認爲32

相關文章
相關標籤/搜索