MIT 6.824 lab1方案设计

凡事预则立,不预则废 – 《礼记·中庸》

Coordinator 流程:

在这里插入图片描述

  • 读入:Coordinator接收传入文件参数。每个文件都作为独立的文件。 M M M 等于文件数量。然后这些任务都用Task结构体保存。Task记录任务的文件名,id(独立生成),类型(Map or Reduce)以及状态(completed,in-progress,idle)。这些Task会被生产到一个channel中,后续所有的任务调度都通过Channel来实现。
  • MapStage :主要是分发各种MapTask。使用一个数组记录所有in-progress或completed的map task。
  • MapStage下收到请求,任务分发:Worker请求Coordinator分发任务。Coordinator收到请求时,worker会返回上一个任务的执行情况。如果上一个任务不为空,则将其生产的文件记录保存为一个新的reduce task。然后我们对in-progress和completed的所有task进行扫描,有执行中但距离上次执行时间已过去20s的任务,我们认为这个任务出了问题需要重新生产到channel中。当channel中无法读取数据,且数组中无in-progress任务的时候,我们认为任务已完成,可进入Reduce状态。若有,则等待,令worker sleep个5s再看看。
  • ReduceStage :这个时候我们要执行ReduceTask了。跟MapStage类似,用一个新的数组记录所有in-progress或completed的reduce task。
  • ReduceStage下收到请求,任务分发:跟MapStage的流程类似。最后如果处理完成,channel没有Task可读且数组内无in-progress任务,则直接跳转到结束状态。
type Task struct {
	id           int
	taskType     int // 0 map 1 reduce -1 wait
	status       int //0 idle 1 in-progress 2 completed
	file		 string // task's input path
	dispatchTime time.Time
}
var mapOngoingTasks []*Task
var reduceOngoingTasks []*Task
var taskReady chan *Task
var machines = 0

Worker

请求机器的ID和任务

func AcquireId(resp *AcquireIdResp)
type AcquireIdResp struct  {
	Id	int
}

func AcquireTask(req *AcquireTaskReq, resp *AcquireTaskResp)

type AcquireTaskReq struct  {
	TaskType		int // 0 map 1 reduce -1 wait -2 quit
	LastTaskId		int // -1 wait
	LastOutputPath	string // default ""
}

type AcquireTaskResp struct {
	TaskType	int // 0 map 1 reduce -1 wait -2 quit
	TaskId		int // -1 wait
	InputPath	string // default ""
}

完整代码会公布在GitHub中
待填坑

weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
MIT 6.824 课程的 Lab1 是关于 Map 的实现,这里单介绍一下实现过程。 MapReduce 是一种布式计算模型,它可以用来处理大规模数据集。MapReduce 的核心想是将数据划分为多个块,每个块都可以在不同的节点上并行处理,然后将结果合并在一起。 在 Lab1 中,我们需要实现 MapReduce 的基本功能,包括 Map 函数、Reduce 函数、分区函数、排序函数以及对作业的整体控制等。 首先,我们需要实现 Map 函数。Map 函数会读取输入文件,并将其解析成一系列键值对。对于每个键值对,Map 函数会将其传递给用户定义的 Map 函数,生成一些新的键值对。这些新的键值对会被分派到不同的 Reduce 任务中,进行进一步的处理。 接着,我们需要实现 Reduce 函数。Reduce 函数接收到所有具有相同键的键值对,并将它们合并成一个结果。Reduce 函数将结果写入输出文件。 然后,我们需要实现分区函数和排序函数。分区函数将 Map 函数生成的键值对映射到不同的 Reduce 任务中。排序函数将键值对按键进行排序,确保同一键的所有值都被传递给同一个 Reduce 任务。 最后,我们需要实现整个作业的控制逻辑。这包括读取输入文件、调用 Map 函数、分区、排序、调用 Reduce 函数以及写入输出文件。 Lab1 的实现可以使用 Go 语言、Python 或者其他编程语言。我们可以使用本地文件系统或者分布式文件系统(比如 HDFS)来存储输入和输出文件。 总体来说,Lab1 是一个比较简单的 MapReduce 实现,但它奠定了 MapReduce 的基础,为后续的 Lab 提供了良好的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值