根据 MapReduce的整体设计 (如下图),在由map阶段讲数据拆解出来,然后写入到某个文件系统。接下来再由reduce阶段读取相关的文件,生成最终的目标文件。
按照实验要求,需要有一个coordinate和多个worker,利用rpc通信。需要注意的是,如果一个worker没有在合理的时间内完成任务,这任务需要重新分配。
规则
:
在rpc服务初始化的时候,会有一个reduce task的数量,需要按照那个值取余数。
提示
:
type Request struct {}
type Reply struct {
// map or reduce task id
Idx int
// 当worker收到exit任务的时候需要主动退出
// 0 map, 1 reduce, 2 wait, 3 exit
TaskType uint8
// map task filename
FileName string
// reduce task count
N int
}
/*
请求任务的时候直接request, reply。在提交完成任务的时候,这两个参数反过来就ok了。
请求任务
call("Coordinator.RequestTask", &Request{},&Reply{})
提交完成任务
call("Coordinator.SubmitTask", &Reply{},&Request{})
*/