云計算背后的秘密(1)-MapReduce
【引言】之前我寫過一些關于云計算誤區(qū)的文章,雖然這些文章并不是非常技術,但是也非常希望它們能幫助大家理解云計算這一新浪潮。最近,我將云計算背后的一些核心技術介紹給讀者,由于云計算的核心技術是我最熟悉和最擅長,而且宣傳這些技術也是我寫《剖析云計算》一書和建立PeopleYun.com站點的初衷,這就是“云計算背后的秘密”這個系列的由來。
在這個新系列中將介紹多種云計算所涉及到的核心技術,包括分布式處理、分布式數據庫、分布式鎖、分布式文件系統、多租戶架構和虛擬化等,而且將會介紹這些技術相關的產品和用例,以幫助大家進一步理解這些技術。預計每周會更新一篇,總長度會在10篇左右,希望大家能喜歡,而本文則是這個系列的第一篇。
在Google數據中心會有大規(guī)模數據需要處理,比如被網絡爬蟲(Web Crawler)抓取的大量網頁等。由于這些數據很多都是PB級別,導致處理工作不得不盡可能的并行化,而Google為了解決這個問題,引入了MapReduce這個分布式處理框架。
技術概覽
MapReduce本身源自于函數式語言,主要通過"Map(映射)"和"Reduce(化簡)"這兩個步驟來并行處理大規(guī)模的數據集。首先,Map會先對由很多獨立元素組成的邏輯列表中的每一個元素進行指定的操作,且原始列表不會被更改,會創(chuàng)建多個新的列表來保存Map的處理結果。也就意味著,Map操作是高度并行的。當Map工作完成之后,系統會接著對新生成的多個列表進行清理(Shuffle)和排序,之后,會這些新創(chuàng)建的列表進行Reduce操作,也就是對一個列表中的元素根據Key值進行適當的合并。下圖為MapReduce的運行機制:
圖1. MapReduce的運行機制
接下來,將根據上圖來舉一個MapReduce的例子來幫助大家理解:比如,通過搜索引擎的爬蟲(Spider)將海量的Web頁面從互聯網中抓取到本地的分布式文件系統中,然后索引系統將會對存儲在這個分布式文件系統中海量的Web頁面進行平行的Map處理,生成多個Key為URL,Value為html頁面的鍵值對(Key-Value Map),接著,系統會對這些剛生成的鍵值對進行Shuffle(清理),之后,系統會通過Reduce操作來根據相同的key值(也就是URL)合并這些鍵值對。
優(yōu)劣點
談到MapReduce的優(yōu)點,主要有兩個方面:其一,通過MapReduce這個分布式處理框架,不僅能用于處理大規(guī)模數據,而且能將很多繁瑣的細節(jié)隱藏起來,比如,自動并行化、負載均衡和災備管理等,這樣將極大地簡化程序員的開發(fā)工作;其二,MapReduce的伸縮性非常好,也就是說,每增加一臺服務器,其就能將差不多的計算能力接入到集群中,而過去的大多數分布式處理框架,在伸縮性方面都與MapReduce相差甚遠。而 MapReduce最大的不足則在于,其不適應實時應用的需求,所以在Google最新的實時性很強的Caffeine搜索引擎中,MapReduce的主導地位已經被可用于實時處理Percolator系統所代替,其具體細節(jié),將在本系列接下來的文章中進行介紹。
相關產品
除了Google內部使用的MapReduce之外,還有,由Lucene之父Doug Cutting領銜的Yahoo團隊開發(fā),Apache管理的MapReduce的開源版本Hadoop,而且一經推出,就受到業(yè)界極大的歡迎,并且衍生出HDFS、ZooKeeper、Hbase、Hive和Pig等系列產品。
實際用例
在實際的工作環(huán)境中,MapReduce這套分布式處理框架常用于分布式grep、分布式排序、Web訪問日志分析、反向索引構建、文檔聚類、機器學習、數據分析、基于統計的機器翻譯和生成整個搜索引擎的索引等大規(guī)模數據處理工作,并且已經在很多國內知名的互聯網公司內部得到極大地應用,比如百度和淘寶。
最后,如果大家對MapReduce感興趣的話,可以到Hadoop的官方站點上下載并試用。
【編輯推薦】