閱讀231 返回首頁    go 汽車大全


《Hadoop與大數據挖掘》一2.1.3 Hadoop計算—MapReduce

本節書摘來華章計算機《Hadoop與大數據挖掘》一書中的第2章 ,第2.1.3節,張良均 樊 哲 位文超 劉名軍 許國傑 周 龍 焦正升 著 更多章節內容可以訪問雲棲社區“華章計算機”公眾號查看。

2.1.3 Hadoop計算—MapReduce

MapReduce是Google提出的一個軟件架構,用於大規模數據集(大於1TB)的並行運算。概念“Map(映射)”和“Reduce(歸納)”以及它們的主要思想,都是從函數式編程語言借來的,還有從矢量編程語言借來的特性。
當前的軟件實現是指定一個Map(映射)函數,用來把一組鍵值對映射成一組新的鍵值對,指定並發的Reduce(歸納)函數,用來保證所有映射的鍵值對中的每一個共享相同的鍵組,如圖2-6所示。

image


下麵將以Hadoop的“Hello World”例程—單詞計數來分析MapReduce的邏輯,如圖2-7所示。一般的MapReduce程序會經過以下幾個過程:輸入(Input)、輸入分片(Splitting)、Map階段、Shuffle階段、Reduce階段、輸出(Final result)。

image


1)輸入就不用說了,數據一般放在HDFS上麵就可以了,而且文件是被分塊的。關於文件塊和文件分片的關係,在輸入分片中說明。
2)輸入分片:在進行Map階段之前,MapReduce框架會根據輸入文件計算輸入分片(split),每個輸入分片會對應一個Map任務,輸入分片往往和HDFS的塊關係很密切。例如,HDFS的塊的大小是128MB,如果我們輸入兩個文件,大小分別是27MB、129MB,那麼27MB的文件會作為一個輸入分片(不足128M會被當作一個分片),而129MB則是兩個輸入分片(129-128=1,不足128MB,所以1MB也會被當作一個輸入分片),所以,一般來說,一個文件塊會對應一個分片。如圖2-7所示,Splitting對應下麵的三個數據應該理解為三個分片。
3)Map階段:這個階段的處理邏輯其實就是程序員編寫好的Map函數,因為一個分片對應一個Map任務,並且是對應一個文件塊,所以這裏其實是數據本地化的操作,也就是所謂的移動計算而不是移動數據。如圖2-7所示,這裏的操作其實就是把每句話進行分割,然後得到每個單詞,再對每個單詞進行映射,得到單詞和1的鍵值對。
4)Shuffle階段:這是“奇跡”發生的地方,MapReduce的核心其實就是Shuffle。那麼Shuffle的原理呢?Shuffle就是將Map的輸出進行整合,然後作為Reduce的輸入發送給Reduce。簡單理解就是把所有Map的輸出按照鍵進行排序,並且把相對鍵的鍵值對整合到同一個組中。如圖2-7所示,Bear、Car、Deer、River是排序的,並且Bear這個鍵有兩個鍵值對。
5)Reduce階段:與Map類似,這裏也是用戶編寫程序的地方,可以針對分組後的鍵值對進行處理。如圖2-7所示,針對同一個鍵Bear的所有值進行了一個加法操作,得到這樣的鍵值對。
6)輸出:Reduce的輸出直接寫入HDFS上,同樣這個輸出文件也是分塊的。
說了這麼多,其實MapReduce的本質用一張圖可以完整地表現出來,如圖2-8所示。

image


MapReduce的本質就是把一組鍵值對經過Map階段映射成新的鍵值對;接著經過Shuffle/Sort階段進行排序和“洗牌”,把鍵值對排序,同時把相同的鍵的值整合;最後經過Reduce階段,把整合後的鍵值對組進行邏輯處理,輸出到新的鍵值對。這樣的一個過程,其實就是MapReduce的本質。
Hadoop MapReduce可以根據其使用的資源管理框架不同,而分為MR v1和YARN/MR v2版本,如圖2-9所示。
在MR v1版本中,資源管理主要是Jobtracker和TaskTracker。Jobtracker主要負責:作業控製(作業分解和狀態監控),主要是MR任務以及資源管理;而TaskTracker主要是調度Job的每一個子任務task;並且接收JobTracker的命令。


image


在YARN/MR v2版本中,YARN把JobTracker的工作分為兩個部分:
1)ResourceManager(資源管理器)全局管理所有應用程序計算資源的分配。
2)ApplicationMaster負責相應的調度和協調。
NodeManager是每一台機器框架的代理,是執行應用程序的容器,監控應用程序的資源(CPU、內存、硬盤、網絡)使用情況,並且向調度器匯報。

最後更新:2017-06-26 09:31:52

  上一篇:go  《Hadoop與大數據挖掘》一2.1.4 Hadoop資源管理—YARN
  下一篇:go  《Hadoop與大數據挖掘》一2.1.2 Hadoop存儲—HDFS