mit6.824-Lab1概述

1.試驗相關

實現語言:GO version 1.9
閱讀論文MapReduce: Simplified Data Processing on Large Clusters
主要思想:用戶定義map函數來處理key/value鍵值對來產生一系列的中間的key/value鍵值對,再定義一個reduce函數用來合併有着相同中間key值的中間value。git

2.MapReduce

下面這張圖比較好的展現了MapReduce的執行過程。
例如要計算一個長文章中每一個單詞出現的次數,能夠先在Map函數中計算出每一個單詞出現的頻次(都是1),即生成 ("hello","1");("love","1")......這樣的中間鍵值對。再由 reduce函數處理這些中間文件,將相同的單詞的"1"加起來,獲得每個中間文件中每個單詞的個數,併產生一個輸出結果文件。後面還會有一個merge函數會統計全部的輸出結果文件。併發

  1. 將要執行的MapReduce程式複製到Master與每個Worker機器中
  2. Master決定Map程式與Reduce程式,分別由哪些Worker機器執行(3個執行Map,2個執行Reduce)
  3. 將全部的資料分配到執行Map的Worker機器中進行Map
  4. 將Map後的結果(中間文件,相似("hello","1") ; ("love","1")......這樣的中間鍵值對)存入Worker機器的本地磁盤中
  5. 執行Reduce的Worker機器遠端讀取Map結果(中間文件),進行整理排序,同時執行Reduce程式,生成單詞+頻次的鍵值對,相似("hello","2") ; ("love","3")......
  6. 將使用者須要的運算結果輸出(Merge函數)

3.試驗概述

Lab1共分爲五個部分
Part I+Part II:以串行方式實現一個簡單的MapReduce程序,用於統計每一個單詞出現的次數
Part III:前兩部分map和reduce階段的task都是串行執行的,在這部分實驗中要將這些task改成併發執行。
Part IV:處理併發執行的執行失敗的任務
Part V:選作部分,實現新的mapF和reduceF,統計某word在哪些文檔中出現過函數

獲取源碼

git clone git://g.csail.mit.edu/6.824-golabs-2018 6.824
cd 6.824
ls
Makefile src測試

4.測試運行

最終五個試驗能夠運行main/test-mr.sh腳原本所有進行檢驗,若都經過,則Lab1已經能完成了 cdn

因爲課程明確說明不要分享源碼,所以個人blog中只是記錄下個人分析以及部分實現的代碼,歡迎你們一塊兒進行探討。
相關文章
相關標籤/搜索