MapReduce工做原理--Hadoop2.6

原文連接:http://blog.csdn.net/tanggao1314/article/details/51275812java

最近在研究Hadoop,發現網上的一些關於Hadoop的資料都是之前的1.X版本的,包括MapReduce的工做原理,都是之前的一些過期了的東西,因此本身從新整理了一些新2.X版本的MapReduce的工做原理

下面我畫了一張圖,便於理解MapReduce得整個工做原理



下面對上面出現的一些名詞進行介紹


ResourceManager:是YARN資源控制框架的中心模塊,負責集羣中全部的資源的統一管理和分配。它接收來自NM(NodeManager)的彙報,創建AM,並將資源派送給AM(ApplicationMaster)。

NodeManager:簡稱NM,NodeManager是ResourceManager在每臺機器的上代理,負責容器的管理,並監控他們的資源使用狀況(cpu,內存,磁盤及網絡等),以及向 ResourceManager提供這些資源使用報告。

ApplicationMaster:如下簡稱AM。YARN中每一個應用都會啓動一個AM,負責向RM申請資源,請求NM啓動container,並告訴container作什麼事情。

Container:資源容器。YARN中全部的應用都是在container之上運行的。AM也是在container上運行的,不過AM的container是RM申請的。

 網絡

1.  Container是YARN中資源的抽象,它封裝了某個節點上必定量的資源(CPU和內存兩類資源)。app

2.  Container由ApplicationMaster向ResourceManager申請的,由ResouceManager中的資源調度器異步分配給ApplicationMaster;
3. Container的運行是由ApplicationMaster向資源所在的NodeManager發起的,Container運行時需提供內部執行的任務命令(能夠是任何命令,好比java、Python、C++進程啓動命令都可)以及該命令執行所需的環境變量和外部資源(好比詞典文件、可執行文件、jar包等)。
另外,一個應用程序所需的Container分爲兩大類,以下:
       (1) 運行ApplicationMaster的Container:這是由ResourceManager(向內部的資源調度器)申請和啓動的,用戶提交應用程序時,可指定惟一的ApplicationMaster所需的資源;
       (2) 運行各種任務的Container:這是由ApplicationMaster向ResourceManager申請的,並由ApplicationMaster與NodeManager通訊以啓動之。
以上兩類Container可能在任意節點上,它們的位置一般而言是隨機的,即ApplicationMaster可能與它管理的任務運行在一個節點上。


整個MapReduce的過程大體分爲 Map-->Shuffle(排序)-->Combine(組合)-->Reduce框架

下面經過一個單詞計數案例來理解各個過程
1)將文件拆分紅splits(片),並將每一個split按行分割造成<key,value>對,如圖所示。這一步由MapReduce框架自動完成,其中偏移量即key值



                    
                    分割過程



將分割好的<key,value>對交給用戶定義的map方法進行處理,生成新的<key,value>對,以下圖所示。


                    執行map方法
                    



獲得map方法輸出的<key,value>對後,Mapper會將它們按照key值進行Shuffle(排序),並執行Combine過程,將key至相同value值累加,獲得Mapper的最終輸出結果。以下圖所示。

                     Map端排序及Combine過程



Reducer先對從Mapper接收的數據進行排序,再交由用戶自定義的reduce方法進行處理,獲得新的<key,value>對,並做爲WordCount的輸出結果,以下圖所示。


                    Reduce端排序及輸出結果
 異步

相關文章
相關標籤/搜索