[MIT_6.824]Labs's_Notes
文章目录
MIT 6.824-2020/2021
记录MIT 6.824 labs中遇到的问题与分析
拖延症要不得,加油!网上有挺多做完的,得自己做一遍才知道如何
实验源码地址:https://github.com/fzhiy/MIT-6.824
Lab 1: MapReduce
|
|
具体工作
你的工作是实现一个分布式的MapReduce,包括两个程序,master 和 worker。只有一个master进程 以及 一个或多个worker进程并行执行。在真实的系统中,工作人员将在许多不同的机器上运行,但在本实验室中,您将在一台机器上运行所有的worker。worker将通过RPC与master通信。每个worker进程将向master请求任务,从一个或多个文件读取任务的输入,执行任务,并将任务的输出写入一个或多个文件。如果一个worker没有在合理的时间内完成任务(对于这个实验室,使用10秒),master应该注意,并把同样的任务交给另一个worker。
开始已经给了一些代码。main/mrmaster.go和main/mrworker.go分别是master和worker 的主例程,不要修改这些代码。
应该在mr/master.go、mr/worker.go和mr/rpc.go中给出实现。
下面是如何在单词计数MapReduce应用程序上运行代码。首先,确保word-count插件是新构建的:
|
|
任务解读(来源:https://zhuanlan.zhihu.com/p/260752052)
测试时,启动一个
master
和多个worker
,也就是运行一次mrmaster.go
、运行多次mrworker.go
。
master
进程启动一个rpc
服务器,每个worker
进程通过rpc
机制向Master
要任务。任务可能包括map
和reduce
过程,具体如何给worker
分配取决于master
。每个单词和它出现的次数以
key-value
键值对形式出现。map
进程将每个出现的单词机械地分离出来,并给每一次出现标记为1次。很多单词在电子书中重复出现,也就产生了很多相同键值对。还没有对键值对进行合并,故此时产生的键值对的值都是1。此过程在下图中mapper
伸出箭头表示。已经分离出的单词以键值对形式分配给特定
reduce
进程,reduce
进程个数远小于单词个数,每个reduce
进程都处理一定量单词。相同的单词应由相同的reduce
进程处理。处理的方式和上面描述的算法类似,对单词排序,令单词在数组中处在相邻位置,再统计单词个数。最终,每个reduce
进程都有一个输出,合并这些输出,就是Word Count
结果。此过程在下图中箭头进入reducer
、以及后面的合并表示。MapReduce WordCount 图中,相同的单词由相同
reducer
处理。如第一个reducer
接受单词A, B
,最后一个reducer
接受单词C
。测试流程要求,输出的文件个数和参数
nReduce
相同,即每个输出文件对应一个reduce
任务,格式和mrsequential
的输出格式相同,命名为mr-out*
。我们的代码应保留这些文件,不做进一步合并,测试脚本将进行这一合并。合并之后的最终完整输出,必须和mrsequential
的输出完全相同。查看测试脚本
test-mr.sh
,可以看到合并每个输出mr-out*
的指令如下,将每个输出文件的每一行按行首单词排序,输出到最终文件mr-wc-all
中。
1
sort mr-out* | grep . > mr-wc-all
故每个
reduce
任务不能操作相同的单词,在map
流程中分离出的相同单词键值对应由同一个reduce
流程处理。
Lab1实验关键函数与流程。(参考:https://zhuanlan.zhihu.com/p/260752052)
进入src/main目录,执行./test-mr.sh > ./test-mr.out
test-mr.out中出现“PASSED ALL TESTS” 则说明通过全部测试。
00.环境按照教材来
01.go编译wc.go报错
编译代码:go build -buildmode=plugin ../mrapps/wc.go
错误如下:
解决方法(来源-> 用户Superman2077)
实测:
Lab 2: Raft
Lab 3: KV Raft
Final Project
Lab 4: Sharded KV
参考资料
- [MIT 6.824-2020] (http://nil.csail.mit.edu/6.824/2020/schedule.html)
- [MIT 6.824课程笔记] (https://mit-public-courses-cn-translatio.gitbook.io/mit6-824/)
- MIT 6.824 labs :https://zhuanlan.zhihu.com/p/260752052
文章作者 fzhiy
上次更新 2022-01-01 (cab8260)