YARN工作全解

首先放張YARN官網的圖便於理解:
這裏寫圖片描述
講一下YARN的優點(網上一搜一籮筐):

首先要提一下MapReduce1,它只包含JobTracker(協調在集羣上運行的所有作業)和TaskTracker(運行分配的任務並定期向 JobTracker 報告進度),主要存在這樣幾個問題:

  • JobTracker容易存在單點故障;
    既要負責資源管理,又要進行作業調度,負擔重;當需處理太多任務時,會造成過多的資源消耗。
  • 當mapreduce job非常多的時候,會造成很大的內存開銷,在
    TaskTracker端,以mapreduce task的數目作爲資源的表示過於簡單,沒有考慮到cpu以及內存的佔用情況,如果兩個大內存消耗的task被調度到了一塊,很容易出現OutOfMemory異常。
  • 在TaskTracker端,把資源強制劃分爲map task slot和reduce task slot,無法有效利用資源。

然後纔是YARN的主場:

  • YARN的設計減小了JobTracker的資源消耗,並且讓監測每一個Job子任務(tasks)狀態的程序分佈式化了(使用Application Master)。
  • Application Master是一個可變更的部分,可以定製自己的編程模型。
  • 對於資源的表示以內存爲單位,比之前以剩餘slot數目更加合理,相當於map task slot和reduce task slot共享內存。
  • Container用來作爲YARN的一個資源隔離組件,可以用來對資源進行調度和控制。

yarn主要組件有以下幾個:

  1. Resource Manager: 負責資源調度、資源分配等工作,運行在NameNode節點。
  2. NodeManager:運行在DataNode節點,負責啓動Application和對資源的管理。
  3. Container: 通過ResourceManager分配。包括容器的cpu、內存等資源。
  4. App Mstr (Application Master):Resource Manager與application之間的橋樑。Resource Manager 首先將任務給Application master,然後Application master 在將Resource manager的指示傳達給各個 nodemanager(相當於工人)進行幹活兒。每個application只有一個Applicationmaster,運行在node manager節點,Application master是由Resource manager指派的。

知道了這些,那麼Client提交了一個任務後yarn怎麼工作呢?
大致會經歷這麼幾個過程(圖中虛實線可作參考,以下爲個人理解):

  1. Client提交任務,任務可以是mapper程序也可以是reducer程序或者是一個進程的輸入列表(即application),包括啓動ResourceManager命令。
  2. ResourceManager爲提交的任務分配第一個Container(包含內存,cpu等),並與NodeManager通信,要求其在整個Contianer中啓動一個處理作業的Application Master(應用管理器)。
  3. Application Master啓動之後向 ResourceManager註冊,使用戶可以直接通過Resourcemanager查詢作業的運行狀態,然後它將爲各個任務申請資源並監控任務的運行狀態直到運行結束;Application通過RPC(遠程過程調用)請求向Resourcemanager申請和領取資源。
  4. Application Master領取(或者申請)到任務之後會要求指定NodeManager節點啓動去做ResourceManager指定的任務。
  5. 每個NodeManager上Container內的任務結束後application會向Application Master會彙報自己的狀態和進度,此時Application Master將接收到的狀態信息發送給ResourceManager。
  6. 此時ResourceManager會根據得到的Application Master監測到的狀態信息,重新爲任務分配資源,並告知Application Master,然後循環4-6過程,直至任務結束。

收工。

參考文檔
yarn官方文檔
圖解YARN工作原理
YARN簡述及優勢

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章