本節內容:Lect 1編程
MapReduce框架的執行過程:負載均衡
master分發任務,把map任務和reduce任務分發下去 map worker讀取輸入,進行map計算寫入本地臨時文件 map任務完成通知master 告知本地中間結果文件的位置大小信息 master通知reduce worker reduce worker從不一樣的map worker讀取本身負責的部分,這個過程稱爲shuffle reduce worker讀取以後會在本地進行排序 調用用戶的reduce方法進行計算 最終reduce將結果輸出到全局的文件系統(GFS) 失敗處理的過程: master故障:不處理,外部程序決定是否重作 worker故障:master定時ping各個worker,若一段時間ping不通說明崩了 若是發現了某個worker故障了 這個worker執行中的reduce和map任務都會被標記爲空閒從新分配 若是是reduce任務而且執行完了那麼就忽略無論(reduce生成的結果存在GFS,不會丟) 若是是map任務而且執行完了,那麼就要重置狀態,要求從新執行。由於中間文件可能丟失了(map的中間文件存在worker本地)。
具體過程能夠參考這張圖:框架
MapReduce模型的容錯性:map()/reduce()各個函數之間都是獨立運行的,沒有依賴。因此從新執行也會產生相同的輸出。純函數的這個需求是MR相對於其餘並行編程方案的主要限制,而後也是由於這個需求使得MR很是簡單。當出錯時直接從新執行對應的函數和區塊便可函數
每一個區塊儘量的小(分紅儘量多的塊),便於負載均衡、出錯重啓等spa
Ref: https://zou.cool/2018/11/27/mapreduce/code