MIT6.824之MapReduce实现

1|0MIT6.824之MapReduce实现

这篇文章主要是大致分析一下MapReduce的实现,具体代码见Github(https://github.com/iloveacm4/mapReduce)

首先,依照MIT的lab已经给出了大致代码。

我们的实现主要分为两个部分,master.go 和 worker.go。另外还定义了用于RPC的结构rpc.go

// Master 结构体 type Master struct { // Your definitions here. AllFilesName map[string]int //记录文件名 MapTaskNumCount int NReduce int // 记录需要生成的Reduce task数量 InterFIlename [][]string // intermediate file MapFinished bool ReduceTaskStatus map[int]int // 记录Reduce状态 ReduceFinished bool // 记录是否完成reduce,完成后任务结束 RWLock *sync.RWMutex } //两个chan用来存放map任务 和 Reduce任务 var maptasks chan string // chan for map task var reducetasks chan int // chan for reduce task
//master.go //前期准备工作 func MakeMaster(files []string, nReduce int) *Master {} //初始化Master结构体,开启server服务,会调用master.server() func (m *Master) server() {} //注册RPC,调用generateTask()产生任务,等待worker发来的任务请求 func (m *Master) generateTask() {} //将Master结构体中AllFileName所有文件加载入 maptasks, 再处理完成后,再加载reduce任务进入reducetasks // 接受远程调用,为worker分配任务 func (m *Master) MyCallHandler(args *MyArgs, reply *MyReply) error {} //负责接受worker发来的请求,有三种请求MsgForTask, //一是请求任务,请求map任务以及请求reduce任务,根据不同的请求作不同的处理。需要设置reply为相应的值。并且运行一个守护协程timerForWorker() //二是请求结束map任务MsgForFinishMap,用来通知master map任务结束。设置AllFileName[filename]为Finished状态 //三是请求结束reduce任务MsgForFinishReduce。同样需要设置ReduceTaskStatus[index]为Finished状态 func (m *Master)timerForWorker(taskType, identify string){} //设置定时器为10秒,10秒内完成了任务,则设置相应的任务为Finished //否则重新将任务设置为未完成状态并加入相应的任务队列
//worker.go func Worker(mapf func(string, string) []KeyValue, reducef func(string, []string) string) {} //主函数,死循环,不断地调用CallForTask()函数请求任务,并根据master分配的 //任务类型调用mapInWorker(), 或者reduceInWorker() func CallForTask(msgType int,msgCnt string) MyReply {} // 调用RPC,返回请求到的任务 func mapInWorker(reply *MyReply,mapf func(string, string) []KeyValue) {} //调用mapf做map任务, 并调用WriteToJSONFile()写入JSON文件中, //调用SendInterFiles,表明已处理到中间状态 //并调用CallForTask(MsgForFinishMap, reply.Filename)表明结束该任务 func reduceInWorker(reply *MyReply, reducef func(string, []string) string) {} //与mapInWorker同理 //统计的原理是按照key排序,然后遍历统计 func SendInterFiles(msgType int, msgCnt string, nReduceType int) MyReply {} //发送中间文件到master表明位置

__EOF__

本文作者iloveacm
本文链接https://www.cnblogs.com/iloveacm/p/16022520.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   iloveacm  阅读(93)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示