麻省理工硬核课程分布式系统lab_1解析 MIT6.824 lab_1 MapReduce

这个Lab并不是真的让我们去实现MapReduce的分布式并行框架,而是通过本地开启不同的进程(线程),去模拟集群执行MapReduce程序。

课程相关文献

建议优先使用官方的相关资料,进行完成课程,本文章仅供参考。

源代码

https://gitee.com/eddievim/eddievim_-mit6.824_lab

定义角色

  • Master(调度)

  • Worker(进行具体的Map、Reduce)(默认初始化3个)

流程

  • 通过Master角色接收到用户传进来的文件路径,找到需要进行MapReduce处理的原始文件。
  • 我们这边简单对输入进行任务切分(一个文件对应一个MapTask)。
  • 若输入文件有M个,则开启M个MapTask,Master调度Worker来领取任务并执行Map;
  • Map执行后的结果需要进行排序,并写到磁盘中去;
  • Shuffle :将MapTask的输出,改造成ReduceTask的输入。
  • 直至所有MapTask全部执行完毕后,开启ReduceTask,ReduceTask的任务是到读取MapTask产生的磁盘文件中,抓取出对应分区的Key出来,再将相同的Key与List(value)执行Reduce方法,得出结果后,最终再将结果写出到结果文件中。

初始化工作

定义各种数据结构,及数据的交换格式。

状态的定义

  • -1: TaskWait
  • 0: JobOver
  • 1: MapPhrase
  • 2: ReducePhrase
const TaskWait, JobOver, MapPhrase, ReducePhrase = -1, 0, 1, 2

Master

type Master struct {
   
	Phrase  int // 用于定义当前阶段
	NReduce int // ReduceTask并行度
	NMap    int // MapTask并行度

	MapTaskQueue    chan MapTask	// 用于存储MapTask的队列,线程安全
	ReduceTaskQueue chan ReduceTask // 用于存储ReduceTask的队列,线程安全

	MapOutFilePaths    [][]string	// MapTask输出的路径
	ReduceOutFilePaths []string		// ReduceTask输出的路径

	mutex sync.Mutex	// 锁,用于防止并发问题的产生
}

MapTask

type MapTask struct {
   
	No       int	// 编号
	Filepath string
}

ReduceTask

type ReduceTask struct {
   
	No        int	// 编号
	Filepaths 
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值