MapReduce是一種編程模型,用于大規(guī)模數(shù)據(jù)集(大于1TB)的并行運(yùn)算。概念“Map(映射)”和“Reduce(化簡(jiǎn))”都是從函數(shù)式編程語(yǔ)言里借來(lái)的,還有從矢量編程語(yǔ)言里借來(lái)的特性。他極大地方便了編程人員在不會(huì)分布式并行編程的情況下,將自己的程序運(yùn)行在分布式系統(tǒng)上。 當(dāng)前的軟件實(shí)現(xiàn)是指定一個(gè)Map(映射)函數(shù),用來(lái)把一組鍵值對(duì)映射成一組新的鍵值對(duì),指定并發(fā)的Reduce(化簡(jiǎn))函數(shù),用來(lái)保證所有映射的鍵值對(duì)中的每一個(gè)共享相同的鍵組。
MapReduce通過(guò)把對(duì)數(shù)據(jù)集的大規(guī)模操作分發(fā)給網(wǎng)絡(luò)上的每個(gè)節(jié)點(diǎn)實(shí)現(xiàn)可靠性;每個(gè)節(jié)點(diǎn)會(huì)周期性的把完成的工作和狀態(tài)的更新報(bào)告回來(lái)。如果一個(gè)節(jié)點(diǎn)保持沉默超過(guò)一個(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ǎn)操作工作方式很類似,但是由于化簡(jiǎn)操作在并行能力較差,主節(jié)點(diǎn)會(huì)盡量把化簡(jiǎ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)、每臺(tái)機(jī)器的詞矢量、web訪問日志分析、反向索引構(gòu)建、文檔聚類、機(jī)器學(xué)習(xí)、基于統(tǒng)計(jì)的機(jī)器翻譯...”