|
|
|
我在Xebia印度辦公室發表了一個關于MapReduce的演說。演說進行得很順利,聽眾們都能夠理解MapReduce的概念(根據他們的反饋)。我成功地向技術聽眾們(主要是Java程序員,一些Flex程序員和少數的測試人員)解釋了MapReduce的概念,這讓我感到興奮。在所有辛勤的工作之后,我們在Xebia印度辦公室享用了豐盛的晚餐,然后我徑直回了家。
回家后,我的妻子(Supriya)問道:“你的會開得怎么樣?”我說還不錯。 接著她又問我會議是的內容是什么(她不是從事軟件或編程領域的工作的)。我告訴她說MapReduce。“Mapduce,那是什么玩意兒?”她問道: “跟地形圖有關嗎?”我說不,不是的,它和地形圖一點關系也沒有。“那么,它到底是什么玩意兒?”妻子問道。 “唔…讓我們去Dominos(披薩連鎖)吧,我會在餐桌上跟你好好解釋。” 妻子說:“好的。” 然后我們就去了披薩店。
我們在Domions點餐之后,柜臺的小伙子告訴我們說披薩需要15分鐘才能準備好。于是,我問妻子:“你真的想要弄懂什么是MapReduce?” 她很堅定的回答說“是的”。 因此我問道:
我: 你是如何準備洋蔥辣椒醬的?(以下并非準確食譜,請勿在家嘗試)
妻子: 我會取一個洋蔥,把它切碎,然后拌入鹽和水,最后放進混合研磨機里研磨。這樣就能得到洋蔥辣椒醬了。
妻子: 但這和MapReduce有什么關系?
我: 你等一下。讓我來編一個完整的情節,這樣你肯定可以在15分鐘內弄懂MapReduce.
妻子: 好吧。
我:現在,假設你想用薄荷、洋蔥、番茄、辣椒、大蒜弄一瓶混合辣椒醬。你會怎么做呢?
妻子: 我會取薄荷葉一撮,洋蔥一個,番茄一個,辣椒一根,大蒜一根,切碎后加入適量的鹽和水,再放入混合研磨機里研磨,這樣你就可以得到一瓶混合辣椒醬了。
我: 沒錯,讓我們把MapReduce的概念應用到食譜上。Map和Reduce其實是兩種操作,我來給你詳細講解下。
Map(映射): 把洋蔥、番茄、辣椒和大蒜切碎,是各自作用在這些物體上的一個Map操作。所以你給Map一個洋蔥,Map就會把洋蔥切碎。 同樣的,你把辣椒,大蒜和番茄一一地拿給Map,你也會得到各種碎塊。 所以,當你在切像洋蔥這樣的蔬菜時,你執行就是一個Map操作。 Map操作適用于每一種蔬菜,它會相應地生產出一種或多種碎塊,在我們的例子中生產的是蔬菜塊。在Map操作中可能會出現有個洋蔥壞掉了的情況,你只要把壞洋蔥丟了就行了。所以,如果出現壞洋蔥了,Map操作就會過濾掉壞洋蔥而不會生產出任何的壞洋蔥塊。
Reduce(化簡):在這一階段,你將各種蔬菜碎都放入研磨機里進行研磨,你就可以得到一瓶辣椒醬了。這意味要制成一瓶辣椒醬,你得研磨所有的原料。因此,研磨機通常將map操作的蔬菜碎聚集在了一起。
妻子: 所以,這就是MapReduce?
我: 你可以說是,也可以說不是。 其實這只是MapReduce的一部分,MapReduce的強大在于分布式計算。
妻子: 分布式計算? 那是什么?請給我解釋下吧。
我: 沒問題。
我: 假設你參加了一個辣椒醬比賽并且你的食譜贏得了最佳辣椒醬獎。得獎之后,辣椒醬食譜大受歡迎,于是你想要開始出售自制品牌的辣椒醬。假設你每天需要生產10000瓶辣椒醬,你會怎么辦呢?
妻子: 我會找一個能為我大量提供原料的供應商。
|
|
發表留言請先登錄!
|