星期五, 6月 25, 2010

雲端運算Cloud Computing學習心得筆記(四) MapReduce

  前幾回學習到硬體虛擬化及資料叢集平行運算的概念,整個infrastructure建立後,要怎麼開發平行運算的程式呢? 最著名的應用就是MapReduce了,MapReduce的概念並不新穎,甚至還有人提出他是一種倒退[1],是的,這種處理方式不會有關聯性資料庫常用的特性, 如:

資料型別 :  int varchar …等

更新 Update : 更新某筆資料

索引(index) : PK 及 FK

資料關聯性及一致性

交易Transcation : 每個Transcation 可以在資料受損時rollback

視圖View : 改變View 不用更新資料結構

 

MapReduce 本來就不是來取代關聯性資料庫的,他是用來處理大型的資料分析,他不太需要上述的特性,舉個例來說,Google每天去Crawl 上億的網站資料,如果全存在資料庫裡來分析,還要同時應付全球用戶的搜尋,用過DBMS的都知道,整個系統只會越來越慢,花大錢擴充資料庫的話是相當高額的成本。因此MaprReduce是有存在的必要的。

 

MapReduce 怎麼運做呢?以下圖[2]為例

 

 

 

 

1. 用戶程式裡的MapReduce Libary 會先把輸入的檔案資料切成M等份,每個等份16 MB-64MB , 然後會複製好幾份存在整個機器叢集

 

2. 其中一份特別的資料會指派給Master. 再由Master主機去找閒置的機器當Worker機,會指派M個Map task 和 R個Reduce task到worker主機,至於哪些Worker機做Map哪些做Reduce,也是由Master機來指派 。

 

3. 負責做Map的Worker機,會根據input資料的 key/value 的配對傳到開發者設計的Map function並將其Map結果存在暫存記憶體裡

 

4. 由Map function做出的暫存資料存在本機的 Intermediate file,由Partition function 分割成R 個區塊後把區塊位址交還給Master主機

 

5. 負責執行reduce 的Worker 接到由Mater傳來的Map處理完的資料位址後,會遠端讀取這些資料並依照key做排序,把相同的Key再群組(Group)起來.

 

6. Reduce worker 會計算sort 和 group 後的單一key的數量,在把這些直丟給用戶定義的Reduce function處理,處理後的資料會附加(append)到reduce 區的output 檔案。

 

7. 全部處理完後,Master主機會叫醒用戶程式

 

以上是流程圖,如果再參考資料流成圖[3]會更清楚

原本的資料

 

Deer Bear River

Car Car River

Deer Car Bear

 

經過MapReduce 後就變成

 

Bear,2

Car,3

Deer,2

River,2

這部分的應用,我直覺的想到,要做熱門關鍵字排行,只要將一段時間的大量查詢輸入的資料丟進此系統,很快的就可排出結果。

 

其他的應用為:

1 分散式的Grep : 做分散式的關鍵字搜尋

 

2. 計算某個URL被執行的頻率 : Key/value 在Map是<URL,1> , Reduce 後就是<URL,total count>

 

3. 反向網路連結圖 : 由<target, source> 去推出連到這個網站的連結量 <target,list(source)>

 

如果要直接測試MapReduce 程式,Amazon Elastic MapReduce似乎是不錯的選擇,試玩過在跟大家分享 http://aws.amazon.com/elasticmapreduce/

 

 

參考資料

[1] MapReduce: 一个巨大的倒退

[2]Introduction to Parallel Programming and MapReduce

[3] http://blog.jteam.nl/wp-content/uploads/2009/08/MapReduceWordCountOverview1.png

其他:

     Dean, Jeff and Ghemawat, Sanjay. MapReduce: Simplified Data Processing on Large Clusters http://labs.google.com/papers/mapreduce-osdi04.pdf

     Lammal, Ralf. Google's MapReduce Programming Model Revisited. http://www.cs.vu.nl/~ralf/MapReduce/paper.pdf

    Open Source MapReduce: http://lucene.apache.org/hadoop/

沒有留言: