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:排序
NM:
AM:
Container:
最後附上Yarn框架運行流程圖: