1. MapReduce论文
关于这片论文没啥好说的,有地方不懂得可以看课程的视频( B站有 ), MapReduce论文翻译。具体工作过程可参见下图:
2. Lab 大致内容
整个Lab要完成的代码文件有三个:
1. Master.go 即负责分配Map和Reduce任务的主进程
2. RPC.go 由于 Worker 需要通过RPC 与 Master 进程 通信,故在此放置 RPC调用的参数与响应的结构体定义
3. Worker.go 干活的进程, 从Master获取任务并执行
整个程序大致执行流程为
1. 启动 Master 进程,监听 Worker 发过来的 RPC 请求
2. 启动一个或若干Worker进程
3. Worker 进程从 Master 获取 任务,如为 Map / Rduce 任务,则调用对应的Map / Reduce 函数处理,并将结果写到文件中;
如暂时无任务(任务都在执行或完成), 则等待一定时间;如任务都已完成,则退出
对于 Master 进程,需要自己定义管理任务状态的一些数据结构,并且 由于可能有多个Worker产生RPC请求,RPC请求会并发访问或修改这些数据结构,所以一定要加锁Mutex
对于Worker进程,RPC请求可以细分为 1. 请求分配任务 2. 完成分配任务