我問(wèn)妻子:“你真的想要弄懂什么是MapReduce鹏氧?” 她很堅(jiān)定的回答說(shuō)“是的”。 因此我問(wèn)道:
我: 你是如何準(zhǔn)備洋蔥辣椒醬的佩谣?(以下并非準(zhǔn)確食譜把还,請(qǐng)勿在家嘗試)
妻子: 我會(huì)取一個(gè)洋蔥,把它切碎,然后拌入鹽和水吊履,最后放進(jìn)混合研磨機(jī)里研磨安皱。這樣就能得到洋蔥辣椒醬了。
妻子: 但這和MapReduce有什么關(guān)系艇炎?
我: 你等一下酌伊。讓我來(lái)編一個(gè)完整的情節(jié),這樣你肯定可以在15分鐘內(nèi)弄懂MapReduce.
妻子: 好吧缀踪。
我:現(xiàn)在居砖,假設(shè)你想用薄荷、洋蔥驴娃、番茄奏候、辣椒、大蒜弄一瓶混合辣椒醬唇敞。你會(huì)怎么做呢蔗草?
妻子: 我會(huì)取薄荷葉一撮,洋蔥一個(gè)疆柔,番茄一個(gè)咒精,辣椒一根,大蒜一根旷档,切碎后加入適量的鹽和水模叙,再放入混合研磨機(jī)里研磨,這樣你就可以得到一瓶混合辣椒醬了鞋屈。
我: 沒(méi)錯(cuò)范咨,讓我們把MapReduce的概念應(yīng)用到食譜上。Map和Reduce其實(shí)是兩種操作谐区,我來(lái)給你詳細(xì)講解下湖蜕。
Map(映射): 把洋蔥、番茄宋列、辣椒和大蒜切碎昭抒,是各自作用在這些物體上的一個(gè)Map操作。
所以你給Map一個(gè)洋蔥炼杖,Map就會(huì)把洋蔥切碎灭返。
同樣的,你把辣椒坤邪,大蒜和番茄一一地拿給Map熙含,你也會(huì)得到各種碎塊。
所以艇纺,當(dāng)你在切像洋蔥這樣的蔬菜時(shí)怎静,你執(zhí)行就是一個(gè)Map操作邮弹。
Map操作適用于每一種蔬菜,它會(huì)相應(yīng)地生產(chǎn)出一種或多種碎塊蚓聘,在我們的例子中生產(chǎn)的是蔬菜塊腌乡。
在Map操作中可能會(huì)出現(xiàn)有個(gè)洋蔥壞掉了的情況,你只要把壞洋蔥丟了就行了夜牡。
所以与纽,如果出現(xiàn)壞洋蔥了,Map操作就會(huì)過(guò)濾掉壞洋蔥而不會(huì)生產(chǎn)出任何的壞洋蔥塊塘装。
Reduce(化簡(jiǎn)):在這一階段急迂,你將各種蔬菜碎都放入研磨機(jī)里進(jìn)行研磨,你就可以得到一瓶辣椒醬了蹦肴。
這意味要制成一瓶辣椒醬僚碎,你得研磨所有的原料。
因此冗尤,研磨機(jī)通常將map操作的蔬菜碎聚集在了一起听盖。
妻子: 所以胀溺,這就是MapReduce?
我: 你可以說(shuō)是裂七,也可以說(shuō)不是。
其實(shí)這只是MapReduce的一部分仓坞,MapReduce的強(qiáng)大在于分布式計(jì)算背零。
妻子: 分布式計(jì)算? 那是什么无埃?請(qǐng)給我解釋下吧徙瓶。
我: 沒(méi)問(wèn)題。
我: 假設(shè)你參加了一個(gè)辣椒醬比賽并且你的食譜贏得了最佳辣椒醬獎(jiǎng)嫉称。
得獎(jiǎng)之后侦镇,辣椒醬食譜大受歡迎,于是你想要開(kāi)始出售自制品牌的辣椒醬织阅。
假設(shè)你每天需要生產(chǎn)10000瓶辣椒醬壳繁,你會(huì)怎么辦呢?
妻子: 我會(huì)找一個(gè)能為我大量提供原料的供應(yīng)商荔棉。
我:是的..就是那樣的闹炉。
那你能否獨(dú)自完成制作呢?
也就是說(shuō)润樱,獨(dú)自將原料都切碎渣触?
僅僅一部研磨機(jī)又是否能滿足需要?
而且現(xiàn)在壹若,我們還需要供應(yīng)不同種類的辣椒醬嗅钻,像洋蔥辣椒醬皂冰、青椒辣椒醬、番茄辣椒醬等等养篓。
妻子: 當(dāng)然不能了灼擂,我會(huì)雇傭更多的工人來(lái)切蔬菜。
我還需要更多的研磨機(jī)觉至,這樣我就可以更快地生產(chǎn)辣椒醬了剔应。
我:沒(méi)錯(cuò),所以現(xiàn)在你就不得不分配工作了语御,你將需要幾個(gè)人一起切蔬菜峻贮。
每個(gè)人都要處理滿滿一袋的蔬菜,而每一個(gè)人都相當(dāng)于在執(zhí)行一個(gè)簡(jiǎn)單的Map操作应闯。
每一個(gè)人都將不斷的從袋子里拿出蔬菜來(lái)纤控,并且每次只對(duì)一種蔬菜進(jìn)行處理,也就是將它們切碎碉纺,直到袋子空了為止船万。
這樣,當(dāng)所有的工人都切完以后骨田,工作臺(tái)(每個(gè)人工作的地方)上就有了洋蔥塊耿导、番茄塊、和蒜蓉等等态贤。
妻子:但是我怎么會(huì)制造出不同種類的番茄醬呢舱呻?
我:現(xiàn)在你會(huì)看到MapReduce遺漏的階段—攪拌階段。
MapReduce將所有輸出的蔬菜碎都攪拌在了一起悠汽,這些蔬菜碎都是在以key為基礎(chǔ)的 map操作下產(chǎn)生的箱吕。
攪拌將自動(dòng)完成,你可以假設(shè)key是一種原料的名字柿冲,就像洋蔥一樣茬高。
所以全部的洋蔥keys都會(huì)攪拌在一起,并轉(zhuǎn)移到研磨洋蔥的研磨器里假抄。
這樣怎栽,你就能得到洋蔥辣椒醬了。
同樣地慨亲,所有的番茄也會(huì)被轉(zhuǎn)移到標(biāo)記著番茄的研磨器里婚瓜,并制造出番茄辣椒醬。