MapReduce程式設計模型簡介

2022-08-19 07:12:08 字數 1300 閱讀 7035

mapreduce由兩個階段組成:map和reduce,使用者只需要編寫map()和reduce()兩個函式,即可完成簡單的分布式程式的設計。

map()函式以key/value對作為輸入,產生另外一系列key/value對作為中間輸出寫入本地磁碟。mapreduce框架會自動將這些中間資料按照key值進行聚集,且key值相同的資料被統一交給reduce()函式處理。

reduce()函式以key及對應的value列表作為輸入,經合併key相同的value值後,產生另外一系列key/value對作為最終輸出寫入hdfs。

mapreduce中,wordcount偽**如下:

map部分如下:

map(string key, string value):

//將字串分割為單詞

words = splitintotokens(value);

for each word w in words:

emitintermediate(w,"1");

reduce部分如下:

//key:乙個單詞

//values:該單詞出現的次數列表

reduce(string key, iterator values):

int result = 0;

for each v in values:

result += stringtoint(v);

emit(key, inttostring(result));

hadoop將輸入資料切分成若干個輸入分片(input split),並將每個split交給乙個map task處理;

map task不斷地從對應的split中解析出乙個個key/value,並呼叫map()函式處理,處理完之後根據reduce task個數將結果分成若干個分片(partition)寫到本地磁碟;

同時,每個reduce task從每個map task上讀取屬於自己的那個partition,然後使用基於排序的方法將key相同的資料聚集在一起,呼叫reduce()函式處理,並將結果輸出到檔案中。

上面的程式還缺少三個基本的元件,功能分別是:

(1)指定輸入檔案格式。將輸入資料切分成若干個split,且將每個split中的資料解析成乙個個map()函式要求的key/value對。

(2)確定map()函式產生的每個key/value對發給哪個reduce task函式處理。

(3)指定輸出檔案格式,即每個key/value對以何種形式儲存到輸出檔案中。

mapreduce能解決的問題有乙個共同點:任務可以被分解為多個子問題,且這些子問題相對獨立,彼此之間不會有牽制,待並行處理完這些子問題後,任務便被解決。

MapReduce程式設計模型

計算採用一組輸入鍵 值對,並產生一組輸出鍵 值對。mapreduce庫的使用者將計算表達為兩個函式 map和reduce。input1 map a,1 b,1 c,1 input2 map b,1 input3 map a,1 c,1 reduce c,2 reduce b,2 reduce a,2...

MapReduce 程式設計模型

mapreduce 簡介 mapreduce 本身是一種支援並行運算的程式設計模型 思想 這個程式設計模型分為兩個階段 map 階段和 reduce 階段。hadoop 的 mapreduce 框架 hadoop 的 mapreduce 是實現 mapreduce 程式設計模型的乙個分布式計算框架,...

MapReduce 程式設計模型

mapreduce 是一種簡化平行計算的程式設計模型,用於大資料量的計算。它的核心思想是 分散任務,彙總結果 將大規模資料集的操作分發給乙個主節點管理下的各個子節點共同完成,然後整合各個子節點的中間結果,從而得到最終結果。mapreduce的優點 1 便於程式設計 mapreduce 只需簡單地實現...