6.824 Lab1 MapReduce
阿新 • • 發佈:2022-05-17
1. 介紹
- 這個lab需要實現兩種process
- woker process,它們會呼叫Map和Reduce函式,執行讀寫檔案的操作
- coordinator process(MapReduce paper中叫做master,只有一個),它分配map task和reduece task給worker,並處理宕機的workers
2. 分析
RPC的使用
- workers和coordinator通過RPC交流。
- worker向coordinator獲取task,讀取task的輸入,一般從一個或多個檔案,執行task,並task的輸出寫到一個或多個檔案
- 一個worker應該在10s內未完成,那麼coordinator需要把這個task分配給其他worker
- RPC就是去呼叫其他機器上的
函式
- 首先需要一個RPC 伺服器開啟listen,等待RPC請求。比如在
mrcoordinator.go
中呼叫MakeCoordinator,其中呼叫Coordinator
的server函式,開啟伺服器 - 那麼這時候需要其他主機呼叫rpc請求,呼叫伺服器上的rpc服務。比如在
mrworker.go
中呼叫mr.Worker(mapf, reducef)
,那麼Worker函式中會呼叫一個呼叫rpc服務的函式CallExample
,其中call("Coordinator.Example", &args, &reply)
,其中第一個引數就是指定呼叫rpc伺服器的函式名,第二個引數就是請求方呼叫這個函式傳遞的引數(存在這個結構體中),第三個引數就是rpc服務提供方將執行的結果放入其中,這些引數會進行序列化,最後在請求方與服務方之間傳送
- 首先需要一個RPC 伺服器開啟listen,等待RPC請求。比如在
loadPlugin
- 這個函式將不同的Map與Reduce函式裝載到同一個mrworker中,編譯方式是
go build -race -buildmode=plugin ../mrapps/wc.go
,那麼go run -race mrworker.go wc.so
與
就可以使得worker節點執行裝載的map和reduce函式