Skip to content

LMFrank/MIT6.824_Lab

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 

Repository files navigation

MIT6.824

课程主页http://nil.csail.mit.edu/6.824/2020/index.html

视频资料

MIT 6.824 Distributed Systems Spring 2020

Lab1-MapReduce

参考资料:(均在Lab1目录下)

  1. 文献:MapReduce: Simplified Data Processing on Large Clusters

  2. 文献翻译:

  3. 实验文档:包含中英文 6.824 Lab 1: MapReduce

Note

按照文档提示运行go build -buildmode=plugin ../mrapps/wc.go是有问题的,目前的解决方案有两种:

  1. 设置GO111MODULE=off,将源码放在GOPATH下,但是看反馈,依然有报错现象,推荐第2种解决方法

  2. 启动GO111MODULE,也就是使用go mod管理包

    • 在6.824根目录下打开cmd,输入go mod init <name>
    • 更改源码中的导包方式,将相对路径改为绝对包路径
  3. 程序使用Go内置的rpc作为通信手段,GOB是go语言使用的二进制序列化协议,使用rpc传输的字段应该使用大写,否则不会被识别

  4. 根据测试规则,我们并不需要做合并,paper中也提到经过mapreduce框架处理后的数据可能也直接用于其他场景了。

    # test-mr.sh会先生成正确的结果文件
    ../mrsequential ../../mrapps/wc.so ../pg*txt || exit 1
    sort mr-out-0 > mr-correct-wc.txt
    rm -f mr-out*
    //
    ...
    //
    # 然后会将复合mr-out*的文件进行排序,并合并生成mr-wc-all这个文件
    # 再使用cmp命令比对
    sort mr-out* | grep . > mr-wc-all
    if cmp mr-wc-all mr-correct-wc.txt
    then
      echo '---' wc test: PASS
    else
      echo '---' wc output is not the same as mr-correct-wc.txt
      echo '---' wc test: FAIL
      failed_any=1
    fi

代码实现

已通过所有测试

  • Master.go
    • MakeMaster:开启一个master
    • server:将进程注册到rpc中
    • Work:向worker分配任务,更新map和reduce任务的状态,使用context管理超时
    • Commit:确认task完成
  • Worker.go
    • Worker:启动死循环,不断向master发出请求
    • MapWork:将master发来的文件,经过mapf处理,然后生成中间文件
    • ReduceWork:将master发来的任务,对应的中间文件,合成最终output

参考:https://www.yuque.com/abser/blog/lab1mapreduce

Lab2-Raft

参考资料:

  1. Raft一致性算法论文的中文翻译

About

MIT6.824课程的lab实现

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published