1. 程式人生 > >MapReduce幾個典型的例子

MapReduce幾個典型的例子

       在Google的《MapReduce: Simpli ed Data Processing on Large Clusters》論文中,作者向世界闡述了什麼是MapReduce。其中的幾個關於MapReduce的例子很簡單,但是很有代表性。拿來分享一下。

       分散式Grep:map函式檢查輸入行,如果匹配給定的模板(類似於正則表示式的匹配),就把該行輸出。reduce函式是一個標識函式,僅用來把中間資料輸出。

       URL訪問頻率統計:map函式處理網頁請求的日誌檔案,並輸出<URL, 1>的鍵值對。reduce函式把相同URL訪問次數值相加到一起,輸出<URL, 總訪問數>的鍵值對。

       逆向Web-Link圖:map函式把source網頁中每一個連結到target URL的結果輸出為<target, source>。reduce函式把所有和給定target相關的source URLs連線起來,並且輸出<target, list(source)>。舉個例子,搜尋引擎中輸入關鍵字,網路爬蟲就會根據關鍵字(target)查詢相關的網頁並找到所有的連結,這些就是list(source)。

        主機關鍵詞向量:關鍵詞向量歸納一個文件或一系列文件中最重要的詞出現的頻率,為一組<word, frequency>的鍵值對。map函式輸出每一個輸入文件中的<主機名,關鍵詞向量>的鍵值對(這裡的主機名是從文件的URL中抽取出的)。reduce處理給定主機的所有文件的關鍵詞向量,累加所有的關鍵詞向量,拋掉不常見的關鍵詞,輸出<主機名,關鍵詞向量>的鍵值對。這個很常見的用處就是視訊網站上關鍵詞排行榜,都可以這樣實現。

        倒序索引:map函式解析每一個文件,輸出一個序列<word, document ID>鍵值對。reduce函式所有相同word的鍵值對,並根據document IDs排序,輸出<word, list(document ID)>。輸出的鍵值對集合形成了一個簡單的倒序索引。這樣可以很容易跟蹤關鍵字在文件庫中的位置。

        分散式排序:map函式從每一個記錄中抽取出key,並輸出<key, record>的鍵值對。reduce函式原樣輸出所有的鍵值對。這個計算依賴於MapReduce中的分割函式(Partitioning Function)。

      最後給出MapReduce的執行流程圖: