分佈式處理之 MapReduce

方法介紹

MapReduce 是一種計算模型,簡單的說就是將大批量的工作(數據)分解(map)執行,然後再將結果合併成最終結果(reduce)。這樣做的好處是可以在任務被分解後,通過大量機器進行分佈式並行計算,減少整個操作的時間。也就是說,MapReduce 的原理就是一個歸併排序。

它的適用範圍爲數據量大,但是數據種類小可以放入內存的場景。基本原理及要點是將數據交給不同的機器去處理,數據劃分,結果歸併。

MapReduce 模式的主要思想是將要執行的問題(如程序)自動拆分成 Map(映射)和 Reduce(化簡)的方式,其流程圖如圖 6-4 所示。
在這裏插入圖片描述

在數據被分割後通過 Map 函數的程序將數據映射成不同的區塊,分配給計算機機羣處理達到分佈式運算的效果,在通過 Reduce 函數的程序將結果彙整,從而輸出開發者需要的結果

MapReduce 借鑑了函數式程序設計語言的設計思想,其軟件實現是指定一個 Map 函數,把鍵值對(key/value)映射成新的鍵值對(key/value),形成一系列中間結果形式的 key/value 對,然後把它們傳給Reduce(規約)函數,把具有相同中間形式 key/value 合併在一起。Map 和 Reduce 函數具有一定的關聯性。函數描述如表 6-1 所示:

在這裏插入圖片描述

MapReduce 致力於解決大規模數據處理的問題,因此在設計之初就考慮了數據的局部性原理,利用局部性原理將整個問題分而治之MapReduce 集羣由普通 PC 機構成,爲無共享式架構。在處理之前,將數據集分佈至各個節點。處理時,每個節點就近讀取本地存儲的數據處理(map),將處理後的數據進行合併(combine)、排序(shuffle and sort )後再分發(至 reduce 節點),避免了大量數據的傳輸,提高了處理效率。無共享式架構的另一個好處是配合複製(replication)策略,集羣可以具有良好的容錯性,一部分節點的 down 機對集羣的正常工作不會造成影響。

Hadoop 是一個實現了 MapReduce 模式的開源分佈式並行編程框架。圖 6-5 是有關 Hadoop 的作業調優參 數 及 原 理 , 左 邊 是 map 任 務 運 行 示 意 圖 , 右 邊 是 reduce 任 務 運 行 示 意 圖 。
在這裏插入圖片描述

如圖 2 所示,其中 map 階段,當 map 任務 開始運算, 併產生中間數據後並非直接而簡單的寫入磁盤它首先利用內存緩衝區來對已經產生的 buffer 進行緩存,並在內存緩存區 中進行一些預排序來優化整map 的性能。 而上圖右邊的 reduce 階段則經歷了三個階段,分別 Copy->Sort->Reduce。我們能明顯地看出其中的 Sort 是採用的歸併排序(merge sort)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章