1. 程式人生 > 其它 >6.824 Lab1 MapReduce

6.824 Lab1 MapReduce

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服務提供方將執行的結果放入其中,這些引數會進行序列化,最後在請求方與服務方之間傳送

loadPlugin

  • 這個函式將不同的Map與Reduce函式裝載到同一個mrworker中,編譯方式是go build -race -buildmode=plugin ../mrapps/wc.go,那麼go run -race mrworker.go wc.so
    就可以使得worker節點執行裝載的map和reduce函式

5. 實現