本文首发于 http://www.YoungZY.com/
写在前面:这篇实验课的说明(原版)和代码前前后后看了很多遍,还是一团糨糊,不知从何入手。看到后面,又忘记了前面。于是想把它翻译一遍,希望能把题理解得更透彻点。果然,翻译过程中发现几个之前忽略的点。
原文地址:https://pdos.csail.mit.edu/6.824/labs/lab-mr.html
简介
在这节实验课里你将构建一个MapReduce系统。你需要实现一个工作程序(worker process)和一个调度程序(coordinator process)。工作程序用来调用Map和Reduce函数,并处理文件的读取和写入。调度程序用来协调工作任务并处理失败的任务。你将构建出跟 这篇MapReduce论文 里描述的类似的东西。(注意:本实验中用”coordinator”替代里论文中的”master”。)
开始
首先需要搭配好Go的开发环境,无需赘述。 接着可以通过git来获取本实验所需的初始代码:
git clone git://g.csail.mit.edu/6.824-golabs-2022 6.824
我们在src/main/mrsequential.go
提供了一个简单的MapReduce实现。它在同一个进程里执行里Map函数和Reduce函数。我们也提供了一些MapReduce的应用程序:单词计数器(mrapps/wc.go
)和文本检索器(mrapps/indexer.go
)。你可以通过以下命令来执行单词计数器程序:
cd 6.824
cd src/main
go build -race -buildmode=plugin ../mrapps/wc.go
go run -race mrsequential.go wc.so pg*.txt
more mr-out-0
注意:-race
选项打开了Go语言的竞争探测器。我们建议你在开发和调试6.824实验代码时都加上这个选项。我们在评分时不会使用这个选项。尽管如此,如果你的代码里存在竟态,我们测试时不用竟态探测器它也会失败。
mrsequential.go
将其输出保存在mr-out-0
文件中。输入来自pg
开头的txt文件。
可以随意从mrsequential.go
中借用代码。你也应该打开mrapps/wc.go
看看MapReduce的应用程序是如何实现的。
近期评论