博客
关于我
MIT6.824 lab1 提示思路
阅读量:242 次
发布时间:2019-03-01

本文共 1211 字,大约阅读时间需要 4 分钟。

MapReduce任务在运行时通过.so文件加载,这些文件由Go插件包中的文件加载。这些文件的名称通常以.so结尾。需要注意,如果在mr/目录中进行更改,可能需要重新构建相关的MapReduce插件,例如使用以下命令:

go build -buildmode=plugin ../mrapps/wc.go

在多个机器上运行时,所有的worker需要共享同一个文件系统。这意味着如果需要高效的文件访问,可能需要使用一个全局文件系统,如GFS。

为了使中间文件的管理更为简单,可以将文件名命名为mr-X-Y的格式,其中X表示Map任务的编号,Y表示Reduce任务的编号。

在Map任务中,需要一个方法来将中间的键值对存储到文件中,以便Reduce任务能够正确读取。一个常用的方法是使用Go的encoding/json包来将键值对写入JSON文件。例如:

err := json.Unmarshal([]byte(input), &kv)if err != nil {    // 处理错误}

在Map任务中,可以使用ihash(key)函数来确定哪个Reduce任务处理特定的键。ihash函数可以在worker.go中找到。

对于文件的读写和排序,可以参考mrsequential.go中的代码,学习如何高效地读取Map输入文件、排序中间键值对以及写入Reduce输出文件。

由于MapReduce的master作为一个RPC服务器,需要处理并发请求。在处理RPC请求时,必须正确地加锁共享数据,以避免竞态条件。

为了测试并发问题,可以使用Go的race检测工具:

go build -racego run -race

在test-mr.sh脚本中,可以看到如何在测试中启用race检测工具。

在实际应用中,需要确保Reduce任务能够等待直到所有Map任务都完成。可以通过在worker中定期询问master的工作状态,并使用time.Sleep()来等待任务。或者,在master中使用循环等待,直到获得足够的心跳信息判断worker是否崩溃。

由于master无法可靠地区分worker是否崩溃、卡住或过慢,建议在master中等待一定的时间(例如10秒)后,假设worker已经崩溃,并重新分配任务给其他worker。

为了测试崩溃恢复,可以使用mrapps/crash.go插件,它在Map和Reduce任务中随机退出。这样可以验证MapReduce系统在worker崩溃时的恢复机制。

为了确保在worker崩溃时不出现半写的文件,可以使用ioutil.TempFile创建临时文件,并在写入完成后通过os.Rename进行原子性重命名。这样可以避免数据不一致的问题。

在mr-tmp目录中运行test-mr.sh脚本时,所有中间和输出文件都会存储在该目录下。如果出现问题,可以在该目录中查找相关文件进行调试。

转载地址:http://xtqv.baihongyu.com/

你可能感兴趣的文章
python和java哪个更值得学——来自知乎高赞回答
查看>>
python和c混合编程 github_在pycharm中使用git版本管理以及同步github的方法
查看>>
python命名空间更改_Python模块xml.etree.ElementTree自动修改xml命名空间键
查看>>
Python命名中尾随下划线有什么好处?
查看>>
Python启动脚本
查看>>
Python听写汇总结果
查看>>
python吊打Excel?屁!那是你不会用!
查看>>
Python合并两张图片 | 先叠透明度再合并 (附Demo)
查看>>
python各进制的表述与转换
查看>>
python各种库安装
查看>>
python可视化matplotlib_如何使用Python中最强大的可视化工具Matplotlib?
查看>>
python可维护性_使用这7大神器,让你的Python 代码更容易于维护
查看>>
Python只运行一次while循环
查看>>
python变量的详细教程_Python零基础入门教程之语法入门[变量](第二期)
查看>>
Python变量命名方法-ChatGPT4o作答
查看>>
Python变量与运算符
查看>>
Python变量/运算符/函数/模块/string
查看>>
python发送邮件的时候出现 error (535, b‘5.7.3 Authentication unsuccessful‘) 解决方法
查看>>
python系列【仅供参考】:python flask框架 debug功能
查看>>
python发送notes邮件_使用python在Lotus Notes中发送邮件
查看>>