編程模型檢視原始碼討論檢視歷史
編程模型,用於大規模數據集(大於1TB)的並行運算。概念"Map(映射)"和"Reduce(歸約)",是它們的主要思想,都是從函數式編程語言裡借來的,還有從矢量編程語言里借來的特性。它極大地方便了編程人員在不會分布式並行編程的情況下,將自己的程序運行在分布式系統上。 當前的軟件實現是指定一個Map(映射)函數,用來把一組鍵值對映射成一組新的鍵值對,指定並發的Reduce(歸約)函數,用來保證所有映射的鍵值對中的每一個共享相同的鍵組。[1]
定義
MapReduce是面向大數據並行處理的計算模型、框架和平台,它隱含了以下三層含義: 1)MapReduce是一個基於集群的高性能並行計算平台(Cluster Infrastructure)。它允許用市場上普通的商用服務器構成一個包含數十、數百至數千個節點的分布和並行計算集群。 2)MapReduce是一個並行計算與運行軟件框架(Software Framework)。它提供了一個龐大但設計精良的並行計算軟件框架,能自動完成計算任務的並行化處理,自動劃分計算數據和計算任務,在集群節點上自動分配和執行任務以及收集計算結果,將數據分布存儲、數據通信、容錯處理等並行計算涉及到的很多系統底層的複雜細節交由系統負責處理,大大減少了軟件開發人員的負擔。 3)MapReduce是一個並行程序設計模型與方法(Programming Model & Methodology)。它藉助於函數式程序設計語言Lisp的設計思想,提供了一種簡便的並行程序設計方法,用Map和Reduce兩個函數編程實現基本的並行計算任務,提供了抽象的操作和並行編程接口,以簡單方便地完成大規模數據的編程和計算處理
分布可靠
MapReduce通過把對數據集的大規模操作分發給網絡上的每個節點實現可靠性;每個節點會周期性的返回它所完成的工作和最新的狀態。如果一個節點保持沉默超過一個預設的時間間隔,主節點(類同Google File System中的主服務器)記錄下這個節點狀態為死亡,並把分配給這個節點的數據發到別的節點。每個操作使用命名文件的原子操作以確保不會發生並行線程間的衝突;當文件被改名的時候,系統可能會把他們複製到任務名以外的另一個名字上去。(避免副作用)。 化簡操作工作方式與之類似,但是由於化簡操作的可並行性相對較差,主節點會儘量把化簡操作只分配在一個節點上,或者離需要操作的數據儘可能近的節點上;這個特性可以滿足Google的需求,因為他們有足夠的帶寬,他們的內部網絡沒有那麼多的機器。
用途
在Google,MapReduce用在非常廣泛的應用程序中,包括「分布grep,分布排序,web連接圖反轉,每台機器的詞矢量,web訪問日誌分析,反向索引構建,文檔聚類,機器學習,基於統計的機器翻譯...」值得注意的是,MapReduce實現以後,它被用來重新生成Google的整個索引,並取代老的ad hoc程序去更新索引。 MapReduce會生成大量的臨時文件,為了提高效率,它利用Google文件系統來管理和訪問這些文件。 在谷歌,超過一萬個不同的項目已經採用MapReduce來實現,包括大規模的算法圖形處理、文字處理、數據挖掘、機器學習、統計機器翻譯以及眾多其他領域。
參考文獻
- ↑ mapreduce計算的主要流程有哪些百度知道