化繁爲簡 如何向老婆解釋MapReduce?

  昨天,我在Xebia印度辦公室發表了一個關於MapReduce的演說。演說進行得很順利,聽衆們都可以理解MapReduce的概念(根據他們的反饋)。我成功地向技術聽衆們(主要是Java程序員,一些Flex程序員和少數的測試員)解釋了MapReduce的概念,這讓我感到興奮。在全部辛勤的工做以後,咱們在Xebia印度辦公室享用了豐盛的晚餐,而後我徑直回了家。程序員

  回家後,個人妻子(Supriya)問道:「你的會開得怎麼樣?」我說還不錯。 接着她又問我會議是的內容是什麼(她不是從事軟件或編程領域的工做的)。我告訴她說MapReduce。「Mapduce,那是什麼玩意兒?」她問道: 「跟地形圖有關嗎?」我說不,不是的,它和地形圖一點關係也沒有。「那麼,它究竟是什麼玩意兒?」妻子問道。 「唔…讓咱們去Dominos(披薩連鎖)吧,我會在餐桌上跟你好好解釋。」 妻子說:「好的。」 而後咱們就去了披薩店。編程


化繁爲簡 如何向老婆解釋MapReduce?
MapReduce工做原理示意圖(圖片來自jobbole)分佈式

  咱們在Domions點餐以後,櫃檯的小夥子告訴咱們說披薩須要15分鐘才能準備好。因而,我問妻子:「你真的想要弄懂什麼是MapReduce?」 她很堅決的回答說「是的」。 所以我問道:測試

  我: 你是如何準備洋蔥辣椒醬的?(如下並不是準確食譜,請勿在家嘗試)圖片

  妻子: 我會取一個洋蔥,把它切碎,而後拌入鹽和水,最後放進混合研磨機裏研磨。這樣就能獲得洋蔥辣椒醬了。get

  妻子: 但這和MapReduce有什麼關係?it

  我: 你等一下。讓我來編一個完整的情節,這樣你確定能夠在15分鐘內弄懂MapReduce.io

  妻子: 好吧。ast

  我:如今,假設你想用薄荷、洋蔥、番茄、辣椒、大蒜弄一瓶混合辣椒醬。你會怎麼作呢?基礎

  妻子: 我會取薄荷葉一撮,洋蔥一個,番茄一個,辣椒一根,大蒜一根,切碎後加入適量的鹽和水,再放入混合研磨機裏研磨,這樣你就能夠獲得一瓶混合辣椒醬了。

  我: 沒錯,讓咱們把MapReduce的概念應用到食譜上。Map和Reduce實際上是兩種操做,我來給你詳細講解下。

  Map(映射): 把洋蔥、番茄、辣椒和大蒜切碎,是各自做用在這些物體上的一個Map操做。因此你給Map一個洋蔥,Map就會把洋蔥切碎。 一樣的,你把辣椒,大蒜和番茄一一地拿給Map,你也會獲得各類碎塊。 因此,當你在切像洋蔥這樣的蔬菜時,你執行就是一個Map操做。 Map操做適用於每一種蔬菜,它會相應地生產出一種或多種碎塊,在咱們的例子中生產的是蔬菜塊。在Map操做中可能會出現有個洋蔥壞掉了的狀況,你只要把壞洋蔥丟了就好了。因此,若是出現壞洋蔥了,Map操做就會過濾掉壞洋蔥而不會生產出任何的壞洋蔥塊。

  Reduce(化簡):在這一階段,你將各類蔬菜碎都放入研磨機裏進行研磨,你就能夠獲得一瓶辣椒醬了。這意味要製成一瓶辣椒醬,你得研磨全部的原料。所以,研磨機一般將map操做的蔬菜碎彙集在了一塊兒。

  妻子: 因此,這就是MapReduce?

  我: 你能夠說是,也能夠說不是。 其實這只是MapReduce的一部分,MapReduce的強大在於分佈式計算。

  妻子: 分佈式計算? 那是什麼?請給我解釋下吧。

  我: 沒問題。

  我: 假設你參加了一個辣椒醬比賽而且你的食譜贏得了最佳辣椒醬獎。得獎以後,辣椒醬食譜大受歡迎,因而你想要開始出售自制品牌的辣椒醬。假設你天天須要生產10000瓶辣椒醬,你會怎麼辦呢?

  妻子: 我會找一個能爲我大量提供原料的供應商。

  我:是的..就是那樣的。那你可否獨自完成製做呢?也就是說,獨自將原料都切碎? 僅僅一部研磨機又是否能知足須要?並且如今,咱們還須要供應不一樣種類的辣椒醬,像洋蔥辣椒醬、青椒辣椒醬、番茄辣椒醬等等。

  妻子: 固然不能了,我會僱傭更多的工人來切蔬菜。我還須要更多的研磨機,這樣我就能夠更快地生產辣椒醬了。

  我:沒錯,因此如今你就不得不分配工做了,你將須要幾我的一塊兒切蔬菜。每一個人都要處理滿滿一袋的蔬菜,而每個人都至關於在執行一個簡單的Map操做。每個人都將不斷的從袋子裏拿出蔬菜來,而且每次只對一種蔬菜進行處理,也就是將它們切碎,直到袋子空了爲止。

  這樣,當全部的工人都切完之後,工做臺(每一個人工做的地方)上就有了洋蔥塊、番茄塊、和蒜蓉等等。

  妻子:可是我怎麼會製造出不一樣種類的番茄醬呢?

  我:如今你會看到MapReduce遺漏的階段—攪拌階段。MapReduce將全部輸出的蔬菜碎都攪拌在了一塊兒,這些蔬菜碎都是在以key爲基礎的map操做下產生的。攪拌將自動完成,你能夠假設key是一種原料的名字,就像洋蔥同樣。 因此所有的洋蔥keys都會攪拌在一塊兒,並轉移到研磨洋蔥的研磨器裏。這樣,你就能獲得洋蔥辣椒醬了。一樣地,全部的番茄也會被轉移到標記着番茄的研磨器裏,並製造出番茄辣椒醬。

  披薩終於作好了,她點點頭說她已經弄懂什麼是MapReduce了。我只但願下次她聽到MapReduce時,能更好的理解我到底在作些什麼。

  編注:下面這段話是網上其餘人用最簡短的語言解釋MapReduce:

  We want to count all the books in the library. You count up shelf #1, I count up shelf #2. That’s map. The more people we get, the faster it goes.

  咱們要數圖書館中的全部書。你數1號書架,我數2號書架。這就是「Map」。咱們人越多,數書就更快。

  Now we get together and add our individual counts. That’s reduce.

  如今咱們到一塊兒,把全部人的統計數加在一塊兒。這就是「Reduce」。

相關文章
相關標籤/搜索