MIT6.824-Lab1-P1

Part I: Map/Reduce input and output

完善如下函数:

  • common_map.go: doMap()
  • common_reduce.go: doReduce()

完成后测试:

cd "<project_position>/src/mapreduce"
go test -run Sequential

我们需要事先掌握如下:

common_map.go: doMap()

要干什么?

  1. doMap()管理一个Map Task.
  2. 调用mapF()将输入文件的内容变成一个[]KeyValue.
  3. 用划分函数将mapF()的输出划分到nReduce个中间文件.
  4. 每个中间文件命由<JobName>-<mapTask>-<reduceTask>三部分组成.

代码构思:

  1. 创建nReduce个json文件, 将其句柄放入jsonArr这个数组中, 其类型为[][]KeyValue.
  2. 读取文件将其内容转为String, 输入mapF()得到输出kvList.
  3. 对于kvList中每个kv, 用index = ihash(kv.Key) % nReduce来将其加入数组jsonArr[index]中.
  4. jsonArr每一个数组jsonArr[i]保存到文件jobName-mapTask-i中(调用reduceName(..)).
  5. 中间文件的格式由自己设计, 只要doReduce()能够正常decode就好.

common_reduce.go: doReduce()

要干什么?

  1. doReduce()管理一个reduce任务r.
  2. 从每一个MapTask的ReduceTask编号为r的中间文件中(共nMap个), 读取kv对, 转为String.
  3. 将kv对按照key排序.
  4. 对每个不同的key调用reduceF(), 将输出结果写入磁盘

调用sort包来排序, 教程.

可通过测试.

阅读 519

推荐阅读
从菜鸡到菜须鲲
用户专栏

1 人关注
11 篇文章
专栏主页