MIT6.824 Lab 1: MapReduce

mit的分布式实验。第一个实验就是实现google MapReduce论文的简单版本,基于课程要求,我的代码就不公开了(本身也不会go,边写边查资料的,临时磨枪上阵,代码写得太烂)。

 

直接我的思路。

流程

分为两个部分,master和worker。

master:

启动3个goroutine。

1.RPC服务器。提供两个rpc接口GetTask和markTaskFinish,用于获取任务和标记任务完成。

2.任务状态检查,检查所有任务是否完成,如果完成就进入下一个阶段,一共三个阶段,map->reduce->finish。还要检查任务是否超时,如果超时则重新标记为空闲。

3.master状态检查,检查任务状态是否为finish如果为finish则结束进程(这个就是mrmaster做的事情,所以实际上这条就可以忽略了,只要你重写一下检查函数)。

 

worker:

大致可以写成这样的伪代码。

while(true):

            task = GetTask()

            DoTask(task)

            MarkTaskFinish()

大致就是三个过程,先获取任务->做任务->标记任务完成。当然还有一些细节,实际上你要通过GetTask获得的状态得知是否整个MapReduce已经完成了,如果已经完成,此时你要跳出循环。

还有当获取不到任务的时候要sleep一下,避免发太多RPC调用。

 

MapReduce的过程

假设你要hash成x个reduce work。

 

Map

1.master对每个文件输入文件初始化成一个map任务。

2.worker对文件的每个字符串调用map函数,得到新的字符串,新的字符串根据key来hash输出到对应的文件中。(当然其实这个过程是先写到中间文件再rename到结果文件)

3.worker记录所有的输出文件,通过MarkTaskFinish标记任务完成同时告诉master写到了哪些文件。

 

Reduce

1.master会整理哪些文件是对应哪个reduce work的,然后初始化reduce Task。

2.worker会对reduce Task中每个文件的内容读进来排序,对同一个key的数组的内容调用reduce函数得到结果,将结果写到对应的输出文件中。

3.同样执行完告诉master任务完成并且输出到了哪些文件。

 

如果有哪个地方不清楚,可以联系我,我在能力范围内解答,代码为了尊重教授的想法是不可能公布的。顺便贴下结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值