lab1

简介

这个实验主要是帮助理解MapReduce,并带我们走进分布式的大门,是一个很好的实验。

首先你需要整体阅读MapReduce这篇文章,并理解主要思想。虽然现在MapReduce已经不是那么流行,但是作为分布式的入门文章和实验,我觉得是很不错的。基本上把分布式的主要思想都涉猎了。

主要机制如图

lab1_第1张图片

 Map worker读入1个文件,处理后生成n(reduce worker数目)个中间文件,然后每个Reduce worker读取其对应的所有中间文件,处理后生成1个结果文件,最后n个结果文件可以merge成1个最终结果文件。

实验大纲

你需要按照课程的要求从官网上拉取一份代码,这份代码已经定义好整体的框架,因此我们的任务就是按照要求在对应的函数里面写出符合要求的代码。

在src/mapreduce目录下面,提供了一个简单的map和reduce库,一个任务从调用Distributed方法开始,当你需要调试的时候,也可以使用Sequential方法。

mapreduce实现流程:

  1. 应用提供一些输入文件,1个map函数,1个recude函数,reduce worker的数目(nReduce)。
  2. 建立1个master节点,它启动1个RPC server(master_rpc.go),然后等待workers来注册(使用RPC call Register函数[master.go]). 当worker可用时(在第4、5步骤),schedule函数[schedule.go]决定如何分配任务到worker以及如何处理worker的failures。
  3. master节点认为每个输入文件对应1个map任务,为每个任务至少调用1次doMap函数[common_map.go]。每次调用doMap函数会读取合适的文件,并调用map函数来处理文件内容,为每个map文件生成nReduce个文件。
  4. master节点接下去为每个reduce任务至少调用1次doReduce函数[common_reduce.go]。doReduce函数收集nReduce个reduce文件,然后调用reduce函数处理这些文件,产生nReduce个结果文件。
  5. master节点调用mr.merge函数[master_splitmerge.go],来整合nReduce个结果文件成1个最终文件。
  6. master节点发送1个Shutdown的RPC调用到每个worker,来关闭它们的RPC server。

你可能感兴趣的:(6.824)