开发环境WIN10+WSL Ubuntu18.04(直接在微软商店下载使用)
1、map任务写入中间文件时为空 原因:
file, _ := os.OpenFile(intermidateFile, os.O_APPEND|os.O_RDWR, 0777)
刚开始以为openfile只需要os.O_APPEND就可以了,然而openfile的参数应该为两个os.O_APPEND和os.O_RDWR(读写与追加)
2、worker任务执行完后应该继续执行,用的for循环,然而报错dial unix /var/tmp/824-mr-0: socket: too many open files
因为没有关闭打开的文件,通过lsof |wc -l查看打开的文件数可以发现超过了1024(linux默认的最大打开文件数)
3、刚开始对于map任务的设计是对每一个kv pair处理,打开mr-X-Y文件并处理,这样会很慢,每个mapwork要执行10分钟。所以直接打开nReduce个文件,减少文件打开次数,总共只有nReduce次打开文件操作。fileList := [10]*os.File{}//这里的10就是nReduce
4、输出结果跟MapReduce论文中提到的不一样,MapReduce论文指出一般情况下,MapReduce会将结果分摊到R个分区上,产生R个输出文件,这R个输出文件经常作为另一个MapReduce任务的输入,或者在另外一个可以处理多个分割文件的分布式应用中使用。而本lab需要整合到一个文件mr-out-0里,构造两个函数
func unionFile(filename1 string, filename2 string)
func sortFinalFile(filename string)
在done函数判定所有worker完成后由master执行
本lab中我只修改了wc_test的整合,而没有进行indexer_test的整合,不过查看生成的文件和正确文件发现是一样的,所以wctest能pass而indexer fail 了

515

被折叠的 条评论
为什么被折叠?



