天天看點

MapReduce的設計思想

MapReduce 是一個分布式運算程式的程式設計架構,核心功能是将使用者編寫的業務邏輯代碼和自帶預設元件整合成一個完整的分布式運算程式,并發運作在Hadoop 叢集上。既然是做計算的架構,那麼表現形式就是有個輸入(input),MapReduce 操

作這個輸入(input),通過本身定義好的計算模型,得到一個輸出(output)。對許多開發者來說,自己完完全全實作一個并行計算程式難度太大,而MapReduce 就是一種簡化并行計算的程式設計模型,降低了開發并行應用的入門門檻。Hadoop MapReduce 構思展現在如下的三個方面:

如何對付大資料處理:分而治之

對互相間不具有計算依賴關系的大資料,實作并行最自然的辦法就是采取分而治之的政策。并行計算的第一個重要問題是如何劃分計算任務或者計算資料以便對劃分的子任務或資料塊同時進行計算。不可分拆的計算任務或互相間有依賴關系的資料無法進行并行計算!

建構抽象模型:Map 和 ReduceMapReduce 借鑒了函數式語言中的思想,用 Map 和 Reduce 兩個函數提供了高層的并行程式設計抽象模型。

Map: 對一組資料元素進行某種重複式的處理;

Reduce: 對 Map 的中間結果進行某種進一步的結果整理。

MapReduce 中定義了如下的 Map 和 Reduce 兩個抽象的程式設計接口,由使用者去

程式設計實作:

map: (k1; v1) → [(k2; v2)]

reduce: (k2; [v2]) → [(k3; v3)]

Map 和 Reduce 為程式員提供了一個清晰的操作接口抽象描述。通過以上兩個程式設計接口,大家可以看出 MapReduce 處理的資料類型是<key,value>鍵值對。

     統一構架,隐藏系統層細節

如何提供統一的計算架構,如果沒有統一封裝底層細節,那麼程式員則需要考慮諸如資料存儲、劃分、分發、結果收集、錯誤恢複等諸多細節;為此,MapReduce 設計并提供了統一的計算架構,為程式員隐藏了絕大多數系統層面的處理細節。

MapReduce 最大的亮點在于通過抽象模型和計算架構把需要做什麼(whatneed to do)與具體怎麼做(how to do)分開了,為程式員提供一個抽象和高層的程式設計接口和架構。程式員僅需要關心其應用層的具體計算問題,僅需編寫少量的處

理應用本身計算問題的程式代碼。如何具體完成這個并行計算任務所相關的諸多系統層細節被隐藏起來,交給計算架構去處理:從分布代碼的執行,到大到數千小到單個節點叢集的自動排程使用。

繼續閱讀