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