Hadoop2.x——Yarn原理

       Hadoop2.x較Hadoop1.x來講,變化很是大,主要主要體如今Hadoop2.x引入了「Yarn」這個核心部件。網絡

        hadoop1.x有兩大部件,HDFS和MadpReduce,其中HDFS(Hadoop Distributed Files System)用於分佈式存儲文件,便於集羣中各機器從上面讀取和寫入文件(數據),MadpReduce則是Hadoop的兩個核心進程,Map負責對數據塊的分片,Reduce對Map進程出來的結果進行聚合,排序,寫入到HDFS中。從上圖中,對於hadoo1.x來講,HDFS和MapReduce是兩個相互依賴的關係,而對於hadoop2.x,在HDFS和MapReduce之間增長了Yarn部件,這個暫且能夠理解爲是一個「管理平臺」,MapReduce就變成了一個可插拔的「插件」,它不只僅容許hadoo自身的部件使用,還容許其餘的數據處理插件接入到hadoop的生態上,如spark。框架

        首先,簡單瞭解hadoop1.x的MapReduce工做原理:分佈式


        當客戶端CLient提交任務給hadoop集羣時,在master節點上啓動JobTracker進程,負責任務的資源管理和做業調度及監控,JobTracker根據任務須要,決定開啓哪些機器的資源,將做業分配給哪些機器,而後在那些機器上啓動TaskTracker,真正的工做執行會在TaskTracker的機器上面。從上圖,能夠看出一個問題,JobTrack屬於單節點,每臺機器都要與master節點創建關係,其責任很是大,若是master節點出現異常,那麼整個程序就會很是緊張。所以,hadoop2.x分散了JobTrack的權利。oop

        hadoop2.x的MapReduce工做原理:spa

        hadoop2.x將JobTracker的資源管理給了RM(Resource Manager),做業調度及監控分給了AM(App Master)。RM有一個可插拔的調度組件Scheduler(純屬的調度器),負責運行中的各類應用分配資源,不負責應用程序的監控和狀態跟蹤。當客戶端提交一個任務請求,RM接收到了,就會尋找一個合適的機器啓動AM(RM只負責「尋找」這個動做),真正啓動AM進程的是NM(Node Manager),NM是負責給當前所在機器執行的任務分配資源,來運行MapReduce操做,而Container就是所謂的資源,AM本質上也是一個Container(即,資源),只是AM不進行做業的執行,只負責下面各個Container的做業調度及監控;回過來,當NM啓動了AM以後,AM就會根據任務來決定向RM請求所須要的機器、資源來完成任務,一樣的,RM分配了機器以後,Container仍是由各個機器的NM來啓動,每一個Container都和AM創建關係。當任務正式跑起來了,NM和AM也不是閒着,NM負責監控當前機器是否正常運行,AM負責監控其做業的狀態。插件

        舉個比較形象的例子:RM是一個房產,可插拔調度器Scheduler至關於一箇中介平臺,客戶需求來了,須要開設美容院,那麼中介平臺就會到各個區域(一臺機器至關於一個區域)尋找一個適合客戶需求的地方給客戶開設辦公總部大樓,這個總部大樓就是AM,美容院總部須要開分店來實現營收,那麼美容院總部(AM)就會向房產(RM)請求多一點區域來開分店,假設中介平臺(Scheduler)根據需求找到了兩個區域給美容總部,具體分配哪一個鋪位(資源)給它開店呢?中介平臺(Scheduler)把這個任務交給了各個區域的銷售商(NM),每一個區域的銷售商(NM)根據需求給美容院總部(AM)提供足夠多的信息,找到了合適的鋪位(Container)開分店了,如今美容院正式開始運做了。其中體現了兩組角色的關係,房產——中介平臺——銷售商美容院總部——美容院分店。對於第一組關係,銷售商(NM)並非說幫美容院找到鋪位就完事了,它還要監控美容院是否是真的是作美容業務,而不是開遊戲廳之類的,還要負責這個美容院所在的鋪位這個硬件是否正常,而後按期向中介平臺(Scheduler)或者說房產(RM)彙報狀況,當鋪位出現問題,沒法讓美容院正常運做,那麼銷售商(NM)安排當前區域的其餘鋪位,若是全部鋪位都爆滿了或全部鋪位都不能用了,那麼中介平臺(Scheduler)就要立刻安排另外的區域給美容院開分店。對於第二組關係,各個美容院分店(COntainer)按期向總部(AM)彙報經營狀況。3d

        對於提交給集羣的每一個做業,會啓動一個專用的,短暫的JobTracker來控制任務的執行,短暫的JobTracker由從屬節點上的TaskTracker負責啓動,而再也不是hadoop1.x的時候,由主節點啓動。代理

各節點、進程的概念與功能:blog

RM:排序

  • RM處理客戶端請求,接受JobSubmitter提交的做業,按照作的上下文信息。以及從NM收集來的狀態信息,啓動Scheduler,分配一個Container做爲AM;
  • RM擁有爲系統中全部資源分配的決定權,是中心服務,作的事情就是調度、啓動每個Job所屬的Application、另外監控App裏擦體哦那給的存在狀況與運行在每一個節點上的NM進程交互,經過心跳通訊,大道監控NM的目的。

NM:

  • 是slave節點的進程,相似TaskTracker的角色,是每臺機器框架的代理,處理來自RM的請求;
  • 接收並處理來自AM的Container啓動、中止等各類請求;
  • 負責地區哦那個應用程序的Container(執行應用程序的同期),並監控他們的資源使用狀況(包括:CPU、內存、磁盤和網絡),並報告RM;

AM:

  • 應用程序的Master,每個用用程序對應一個AM,在用戶提交一個應用程序時,一個AM的輕量型進程實例就會啓動,AM協調應用程序內的全部任務的執行;
  • 每個Application(對應hadoop1.x的Job)都有一個AM,AM運行在RM以外的機器上;
  • 與RM協商資源、與NM協同工做、與Scheduler協商合適的Container進行Container的監控;
  • 本質也是一個Container;

Container:

  • 是任務運行環境的抽象封裝;
  • Container只是使用NM上指定資源的權力;
  • AM必須向NM提供更多的信息來啓動Container;
  • 描述任務的運行資源(節點、內存、CPU)、啓動命令和運行環境

最後附上Yarn框架運行流程圖:

相關文章
相關標籤/搜索