MIT-6.824 MapReduce

概述

MapReduce是由JeffreyDean提出的一種處理大數據的編程模型,用戶定義map和reduce函數,map函數處理原始數據生成一系列鍵值對中間數據,reduce函數併合相同key的鍵值對。編程

編程模型

整個計算過程輸入的是鍵值對,輸出的也是鍵值對。用戶只須要提供兩個函數分別是Map和Reduce。
好比要統計大數據文本中的詞頻,咱們能夠寫出以下的Map和Reduce函數:函數

map(String key, String value):
    // key: document name
    // value: document contents
    for each word w in value:
        EmitIntermediate(w, "1");
        

reduce(String key, Iterator values):
    // key: a word
    // values: a list of counts
    int result = 0;
    for each v in values:
        result += ParseInt(v);
    Emit(AsString(result));

map函數的參數key, value分別是文本名和文本內容,map函數提取文本的每一個單詞,每一個單詞生成一個<w, "1">的鍵值對。
reduce函數對這些鍵值對進行並和,產生最終的統計結果。大數據

實現

mapreduece
當用戶程序調用MapReduce函數後,將會發生以下動做:code

  1. 用戶輸入的文件將被分紅M份
  2. 集羣中有一個master,其它的都是worker,總共有M個map任務和R個reduce任務(M和R由用戶指定)。master負責將map和reduce任務分配給空閒的worker。
  3. 負責map任務的worker執行用戶定義的Map函數,將中間鍵值對保存到本地,並分紅R份,並將位置發送給master。
  4. 負責reduce任務的worker從master獲得中間數據的位置,讀取數據到本地,調用reduce函數。
  5. 全部map和reduce調用結束後MapReduce調用結束,返回用戶程序。最終的結果應該是R個redcue生成的文件。一般這些文件做爲下一個MapReduece的輸入繼續處理。

容錯

worker failure:blog

  1. master週期性的ping worker,若是worker沒有相應則標記該worker爲failed
  2. 若是一個map任務如今worker A執行,可是失敗了,後來在worker B執行。那麼後面的Reduce worker從worker B讀取中間數據。

master failure:
master只有一個,失敗概率很小。能夠終止MapReduce。pdo

參考資料

  1. https://pdos.csail.mit.edu/6.824/papers/mapreduce.pdf
  2. https://www.youtube.com/watch?v=WLad7CCexo8
相關文章
相關標籤/搜索