mit6.824-Lab1概述

1.试验相关

实现语言:GO version 1.9
阅读论文MapReduce: Simplified Data Processing on Large Clusters
主要思想:用户定义map函数来处理key/value键值对来产生一系列的中间的key/value键值对,再定义一个reduce函数用来合并有着相同中间key值的中间value。git

2.MapReduce

下面这张图比较好的展现了MapReduce的执行过程。
例如要计算一个长文章中每一个单词出现的次数,能够先在Map函数中计算出每一个单词出现的频次(都是1),即生成 ("hello","1");("love","1")......这样的中间键值对。再由 reduce函数处理这些中间文件,将相同的单词的"1"加起来,获得每个中间文件中每个单词的个数,并产生一个输出结果文件。后面还会有一个merge函数会统计全部的输出结果文件。并发

  1. 将要执行的MapReduce程式复制到Master与每个Worker机器中
  2. Master决定Map程式与Reduce程式,分别由哪些Worker机器执行(3个执行Map,2个执行Reduce)
  3. 将全部的资料分配到执行Map的Worker机器中进行Map
  4. 将Map后的结果(中间文件,相似("hello","1") ; ("love","1")......这样的中间键值对)存入Worker机器的本地磁盘中
  5. 执行Reduce的Worker机器远端读取Map结果(中间文件),进行整理排序,同时执行Reduce程式,生成单词+频次的键值对,相似("hello","2") ; ("love","3")......
  6. 将使用者须要的运算结果输出(Merge函数)

3.试验概述

Lab1共分为五个部分
Part I+Part II:以串行方式实现一个简单的MapReduce程序,用于统计每一个单词出现的次数
Part III:前两部分map和reduce阶段的task都是串行执行的,在这部分实验中要将这些task改成并发执行。
Part IV:处理并发执行的执行失败的任务
Part V:选作部分,实现新的mapF和reduceF,统计某word在哪些文档中出现过函数

获取源码

git clone git://g.csail.mit.edu/6.824-golabs-2018 6.824
cd 6.824
ls
Makefile src测试

4.测试运行

最终五个试验能够运行main/test-mr.sh脚原本所有进行检验,若都经过,则Lab1已经能完成了 cdn

因为课程明确说明不要分享源码,所以个人blog中只是记录下个人分析以及部分实现的代码,欢迎你们一块儿进行探讨。
相关文章
相关标签/搜索