Lab 1: MapReduce
摘要
6.824 的第一个实验,已经充分展示了分布式系统的理念,分布式系统由多个主机组成,之间通过网络沟通协作构成一个系统。
其实分布式系统可以类比成公司,公司的人员之间进行协作,一起完成项目,分布式系统更像是社会,单体应用则像个人。
下面的话简单讲解下我个人 mapreduce(mr) lab 的代码。
源码
lab 页面和论文 里面所说,
mr
主要由一个 coordinator
和 多个 worker
组成。coordinator
把 task
分配给 worker
,待 worker
完成所有任务后,mapreduce
结束。
worker
接受任务并完成任务,worker
既可以是 map task
又可以是 reduce task
,接到对应的任务调用 mapf
或 reducef
即可。
由于 mr
在 map tasks
没有完成时,是不可以进入到 reduce
阶段的,所以需要增加些任务类型,standby task
和 exit task
。
standby task
让 worker
进入到短暂的休眠阶段,exit task
告知 worker
mapreduce
结束了,进程退出。
coordinator
则主要是跟踪和分配任务,为此定义两个 RPC 接口,GetTask
和 Report
,前者获取任务,后者汇报 map
或 reduce
任务的结果,如文件地址,
任务 ID 等,coordinator
记录状态。coordinator
还需要有个定时器定时查看过期任务,并回收任务,分配给其他 worker
,由于 worker
函数是幂等性的,Report
的重复任务可以忽略。
留下评论