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. 实现