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