9. 一步一步带你实现MAP REDUCE

写完LAB2,3,4; 再切回LAB1。
不得不说,LAB4 的B 部分真心难。我的那些思考,背后都是大量的DEBUG,才得出的正确思路。那些点也不是我一开始就能想到的。

言归正传,我们开始MAP REDUCE的实现。

首先我们需要知道MAP REDUCE的框架,以及运作原理。

我们通过一个WORD CNT的例子来看


image.png

MAP部分每台机器选取各自的FILE,分别处理按照SHARD的规则,导出到不同的文件。
REDUCE这边值抓取自己负责的SHARD的文件然后做统计。

就是MIT 作业要求上说的内容


image.png

而整个MAP REDUCE 分为下图这几个步骤


image.png

首先INPUT,就是用户为指定一组输入的文件集。然后不同机器取不同的文件,系统尽量做到每台机器平分文件就是SPLIT。MAP就是从一个文件里读,变成一个个单词后,交给PARTITION SORT(MAP是用户自己实现)
出去的时候是没有序的,但是都按照SHARD规则放到不同的文件里了。这边MAP REDUCE框架会对文件做一次硬盘外排序保证后序的FETCH是有序的。
FETCH那边 因为会有多个文件OWN这个SHARD,他需要有序的读,就需要使用K路归并算法。
最后把有序的文件输入给到REDUCE,REDUCE做WORD CNT统计,最后写进OUT文件里。

最后我们看下SYSTEM 的架构是怎么样的。


image.png

好了了解了MAP REDUCE的原理,我们就正式开始写LAB了

第一步 读作业要求到PART1

https://pdos.csail.mit.edu/6.824/labs/lab-1.html

第二步 阅读代码结构

主要是先看COMMON_MAP, COMMON_REDUCE。

里面说到要看GO IOUTILS
https://studygolang.com/articles/14669

第三步 设计DO MAP的步骤

大概实现思路如下:
1.read file content
2.call mapF to get []KeyValue
3.produce intermediate files by nReduce and reduceName
https://my.oschina.net/solate/blog/719702
4.foreach keyValue,ihash the key mod nReduce , use json.NewEncoder to write into a correct file

第四步 实现DOMAP

image.png

第五步 设计DO REDUCE 步骤

1.第一步 把几个文件的内容都读到内存里
2.第二步 排序
3.第三步 根据排序的KEY,调用REDUCE,生成新的KEY VALUE PAIR写进OUT FILE

第六步 实现DO REDUCE

image.png

image.png

第7步 跑测试

image.png

实现PART2 WORD CNT

首先阅读作业说明,以及HINT里给的几个相关博客。
切割出单词需要FieldsFunc的用法
MAP就是切割单词,然后统计次数然后输出的KEYVALUE[]
REDUCE就是把所有的统计结构做汇总,求SUM。

image.png

image.png

image.png

第8步 阅读PART 3文档 并实现

然后构建大概思路,需要去监听registerChan上还没有可用的WORKER,如果TASK还有多,来一个就分配一个。

分配的时候,为了并发,需要单独开线程去发RPC,等回复。OK了之后,把TASK CNT -1,随后把这个WORKER重新放回registerChan

这个用来看NTASK有没有做完。这样就不用去减TASK CNT了

image.png
image.png

第9步 阅读PART 4文档 并实现

根据文档4的意思,其实就是WORKER会挂掉。挂掉的表现就是RPC响应超时。这个时候MASTER就需要找一个新的WORKER

那么其实我们就需要先拿到RPC的RESPONSE。如果是OK按照原来逻辑走。如果不OK,可能是网络超时,可能是节点挂了。
无论是啥我们都需要通知另一个线程,让他知道这个事情发生,他可以HANDLE.
从这点出发就会想到线程间通信在GO里是用CHANNEL来做。

那么我就设定一个TIMEOUT CH,如果一个任务失败了,我就通知这个CH 这个任务的ID号。

那么另外一个线程感知到了,就可以从这个CHANNEL里取到这个ID号,随后再找一个WORKER ADDR,把这个任务分配给这个WORKER去做。基于上述思路。
代码如下。


image.png

TEST -RACE来测会慢一下。不过要求会更严格。
测试通过


image.png

第10步 实现倒排索引

真的很简单。一个文件,列出所有单词,KEY是单词,VALUE都是这个文件名
REDUCE更简单了,根据要求的格式输出下。


image.png

image.png

image.png

尾声

应该是从4月28号 开始写MIT 6.824的LAB。到今天全部写完 花了一个月不到几天的时间。

从LAB 2开始写,写到4 ,4写完之后花了我整整1个周末和3个晚上(因为白天要上班)的时间去DEBUG 4B。相比LAB1,整个LAB从看需求到测试通过,几乎都是BUG FREE,估计就花了我2个小时就搞定了。

不得不说还是收获了不少东西。

也非常开心,开心的点不仅是所有部分全部测试至少200次正确。(为啥是200次测试,一个是有些测试1000次确实太耗时。另一个原因确保我的代码的可靠性是2个9,0.99^200 = 0.1, 假设10%是低概率事件。所以200次都过,可靠性应该在99%之上的) 同时也觉得自己的代码量还是很少的。(我的观点是,实现同样的功能在不破坏可读性的基础上,代码越简洁越厉害)

最后代码提交上GIT。
https://github.com/yixuaz/6.824-2018

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容