MapReduce是一種編程模型,用于大規(guī)模數(shù)據(jù)集(大于1TB)的并行運(yùn)算。概念“Map(映射)”和“Reduce(化簡)”都是從函數(shù)式編程語言里借來的,還有從矢量編程語言里借來的特性。他極大地方便了編程人員在不會分布式并行編程的情況下,將自己的程序運(yùn)行在分布式系統(tǒng)上。 當(dāng)前的軟件實(shí)現(xiàn)是指定一個(gè)Map(映射)函數(shù),用來把一組鍵值對映射成一組新的鍵值對,指定并發(fā)的Reduce(化簡)函數(shù),用來保證所有映射的鍵值對中的每一個(gè)共享相同的鍵組。
MapReduce通過把對數(shù)據(jù)集的大規(guī)模操作分發(fā)給網(wǎng)絡(luò)上的每個(gè)節(jié)點(diǎn)實(shí)現(xiàn)可靠性;每個(gè)節(jié)點(diǎn)會周期性的把完成的工作和狀態(tài)的更新報(bào)告回來。如果一個(gè)節(jié)點(diǎn)保持沉默超過一個(gè)預(yù)設(shè)的時(shí)間間隔,主節(jié)點(diǎn)(類同Google File System中的主服務(wù)器)記錄下這個(gè)節(jié)點(diǎn)狀態(tài)為死亡,并把分配給這個(gè)節(jié)點(diǎn)的數(shù)據(jù)發(fā)到別的節(jié)點(diǎn)。
化簡操作工作方式很類似,但是由于化簡操作在并行能力較差,主節(jié)點(diǎn)會盡量把化簡操作調(diào)度在一個(gè)節(jié)點(diǎn)上,或者離需要操作的數(shù)據(jù)盡可能近的節(jié)點(diǎn)上了;這個(gè)特性可以滿足Google的需求,因?yàn)樗麄冇凶銐虻膸,他們的?nèi)部網(wǎng)絡(luò)沒有那么多的機(jī)器
在Google,MapReduce用在非常廣泛的應(yīng)用程序中,包括“分布grep、分布排序、web連接圖反轉(zhuǎn)、每臺機(jī)器的詞矢量、web訪問日志分析、反向索引構(gòu)建、文檔聚類、機(jī)器學(xué)習(xí)、基于統(tǒng)計(jì)的機(jī)器翻譯...”