整体说明

根据 MapReduce的整体设计 (如下图),在由map阶段讲数据拆解出来,然后写入到某个文件系统。接下来再由reduce阶段读取相关的文件,生成最终的目标文件。

按照实验要求,需要有一个coordinate和多个worker,利用rpc通信。需要注意的是,如果一个worker没有在合理的时间内完成任务,这任务需要重新分配。

实验的关键规则和提示

规则

在rpc服务初始化的时候,会有一个reduce task的数量,需要按照那个值取余数。

提示

Coordinate设计

RPC请求与响应的设计

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{})
*/