1. 程式人生 > >Hadoop2.6 ---- MapReduce工作原理

Hadoop2.6 ---- 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和記憶體兩類資源)。

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端排序及輸出結果

原文:https://blog.csdn.net/tanggao1314/article/details/51275812 

真心感覺這位原創作者寫的不錯,就和大家分享一下