實現語言:GO version 1.9
閱讀論文:MapReduce: Simplified Data Processing on Large Clusters
主要思想:用戶定義map函數來處理key/value鍵值對來產生一系列的中間的key/value鍵值對,再定義一個reduce函數用來合併有着相同中間key值的中間value。git
下面這張圖比較好的展現了MapReduce的執行過程。
例如要計算一個長文章中每一個單詞出現的次數,能夠先在Map函數中計算出每一個單詞出現的頻次(都是1),即生成 ("hello","1");("love","1")......這樣的中間鍵值對。再由 reduce函數處理這些中間文件,將相同的單詞的"1"加起來,獲得每個中間文件中每個單詞的個數,併產生一個輸出結果文件。後面還會有一個merge函數會統計全部的輸出結果文件。併發
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測試
最終五個試驗能夠運行main/test-mr.sh腳原本所有進行檢驗,若都經過,則Lab1已經能完成了 cdn
因爲課程明確說明不要分享源碼,所以個人blog中只是記錄下個人分析以及部分實現的代碼,歡迎你們一塊兒進行探討。