【轉載】Hadoop mapreduce 實現原理

1.  如何用通俗的方法解釋MapReduce

MapReduce是Google開源的三大技術之一,是對海量數據進行「分而治之」計算框架。爲了簡單的理解並講述給客戶理解。咱們舉下面的例子來講明.app

首先,面對一堆雜亂的東西,有若干個漢堡、若干個冰淇淋、若干個可樂。若是級別都是上萬數量的狀況下,有沒有方法把他們較快的分析出來?框架

 

第一步,調度員簡單的將這一堆東西分解成若干堆。oop

 

第二步,調度員爲每堆物品分配一個分揀員,注意只分揀不計數,分揀員對應MAPReduce中的Map角色。分揀員乾的事情,就是將物品按類別分揀,好比分揀後的每一堆的狀態應該是以下圖所示。分揀員所作的也分紅簡單,從本身面前這一堆物品中拿一個,看是麪包的話,就扔麪包那。是可樂就扔可樂那。spa

 

第三步,調度員爲每類物品分配一個計數員(Reducer),把全部該類型的物品都發給他計數。好比全部的麪包類別都分給第一個計數員來負責計數。計數員統計出每一個類別的數目,再告訴調度員。.net

 

總結:Mapper用來分類,Reduce則用來對同類型的東西作進一步處理。對於互聯網的應用場景,好比分析一個網頁中出現的詞彙最多的單詞是什麼。Mapper用來將網頁中的文字段落分解成一個個單詞。相同的單詞會被送給同一個Reducer。Reducer會計算出該單詞出現了多少次。最後按照各單詞出現的次數得出結論。orm

2. 一個文本文件的處理過程

1)對應這樣一個源文本文件blog

 

2)首先由調度員經過job.setInputFormatClass(TextInputFormat.class),知道應該轉換成偏移量加文本方式的鍵-值對;再根據當前機器個數,文件大小肯定應該分解成幾個待處理的片斷,好比說分解成兩個片斷,對應兩個Map程序。get

3)第一個Map程序每次被調用,接受到的入參(key,value)是it

 

Map程序的輸出是io

 

4)第二個Map程序接受的輸入將是

 

第二個Map的輸出將是

5)Map程序的輸出,會被從新組合,同一個Key的內容,會被分配到同一個Reduce上。

好比上面三個單詞,會被分到三個Reducer上

6)第一個Reducer接收到,以下圖,注意是兩個1,來自兩個Map的結果

 

第一個Reducer的輸出會是以下圖,意味着hello這個單詞出現了兩次

7)第二個Reducer接收到

第二個Reducer輸出會是

8)第三個Reducer接收到

第三個Reducer輸出是

9)最後將三個Reducer進行合併,獲得的結果就是

 

10)彙總流程描述如圖所示

 

轉載自 

Hadoop的MapReduce實現原理解釋

如侵刪

相關文章
相關標籤/搜索