天天看點

資料庫必知詞彙:MapReduce

MapReduce是一種程式設計模型,其基于“映射”與“歸約”的思想,把一堆雜亂無章的資料按照某種特征歸納起來,然後處理并得到最後的結果。MapReduce程式設計思想是将用于解決一些大問題可以被分解為許多子問題的場景,且這些子問題相對獨立,将這些子問題并行處理完後,大問題也就被解決。

MapReduce最早是由Google公司研究提出的一種面向大規模資料處理的并行計算模型和方法。Google公司設計MapReduce的初衷主要是為了解決其搜尋引擎中大規模網頁資料的并行化處理。2003年和2004年,Google公司在國際會議上分别發表了兩篇關于Google分布式檔案系統和MapReduce的論文,公布了Google的GFS和MapReduce的基本原理和主要設計思想。Google公司發明了MapReduce之後首先用其重新改寫了其搜尋引擎中的Web文檔索引處理系統。但由于MapReduce可以普遍應用于很多大規模資料的計算問題,是以自發明MapReduce以後,Google公司内部進一步将其廣泛應用于很多大規模資料處理問題。Google公司内有上萬個各種不同的算法問題和程式都使用MapReduce進行處理。

MapReduce是面向大資料并行處理的計算模型、架構和平台,它隐含了以下三層含義:

  • MapReduce是一個基于叢集的高性能并行計算平台(Cluster Infrastructure)。它允許用市場上普通的商用伺服器構成一個包含數十、數百至數千個節點的分布和并行計算叢集。
  • MapReduce是一個并行計算與運作軟體架構(Software Framework)。它提供了一個龐大但設計精良的并行計算軟體架構,能自動完成計算任務的并行化處理,自動劃分計算資料和計算任務,在叢集節點上自動配置設定和執行任務以及收集計算結果,将資料分布存儲、資料通信、容錯處理等并行計算涉及到的很多系統底層的複雜細節交由系統負責處理,大大減少了軟體開發人員的負擔。
  • MapReduce是一個并行程式設計模型與方法(Programming Model & Methodology)。它借助于函數式程式設計語言Lisp的設計思想,提供了一種簡便的并行程式設計方法,用Map和Reduce兩個函數程式設計實作基本的并行計算任務,提供了抽象的操作和并行程式設計接口,以簡單友善地完成大規模資料的程式設計和計算處理。

MapReduce極大地友善了程式設計人員在不會分布式并行程式設計的情況下,将自己的程式運作在分布式系統上。目前的軟體實作是指定一個Map(映射)函數,用來把一組鍵值對映射成一組新的鍵值對,指定并發的Reduce(歸約)函數,用來保證所有映射的鍵值對中的每一個共享相同的鍵組。

MapReduce設計上具有以下主要的技術特征:

  • 向“外”橫向擴充,而非向“上”縱向擴充:MapReduce叢集的建構完全選用價格便宜、易于擴充的低端商用伺服器,而非價格昂貴、不易擴充的高端伺服器。對于大規模資料處理,由于有大量資料存儲需要,顯而易見,基于低端伺服器的叢集遠比基于高端伺服器的叢集優越,這就是為什麼MapReduce并行計算叢集會基于低端伺服器實作的原因。
  • 失效被認為是常态:MapReduce并行計算軟體架構使用了多種有效的錯誤檢測和恢複機制,如節點自動重 啟技術,使叢集和計算架構具有對付節點失效的健壯性,能有效處理失效節點的檢測和恢複。
  • 把處理向資料遷移:MapReduce采用了資料/代碼互定位的技術方法,計算節點将首先盡量負責計算其本地存儲的資料,以發揮資料本地化特點,僅當節點無法處理本地資料時,再采用就近原則尋找其他可用計算節點,并把資料傳送到該可用計算節點。
  • 順序處理資料、避免随機通路資料:為了實作面向大資料集批處理的高吞吐量的并行處理,MapReduce可以利用叢集中的大量資料存儲節點同時通路資料,以此利用分布叢集中大量節點上的磁盤集合提供高帶寬的資料通路和傳輸。
  • 為應用開發者隐藏系統層細節:MapReduce提供了一種抽象機制将程式員與系統層細節隔離開來,程式員僅需描述需要計算什麼(What to compute),而具體怎麼去計算(How to compute)就交由系統的執行架構處理,這樣程式員可從系統層細節中解放出來,而緻力于其應用本身計算問題的算法設計。
  • 平滑無縫的可擴充性:MapReduce在很多情形下能實作以上理想的擴充性特征。

資料來源:

1.黃山,王波濤,王國仁,于戈,李佳佳.MapReduce優化技術綜述[J].計算機科學與探索,2013,7(10):885-905.

2.MapReduce

https://segmentfault.com/a/1190000016544942

3.Hadoop 新 MapReduce 架構 Yarn 詳解

https://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/

4.谷歌技術"三寶"之MapReduce

https://blog.csdn.net/opennaive/article/details/7514146

5.What is MapReduce?

https://www.ibm.com/analytics/hadoop/mapreduce

6.Hadoop – MapReduce

https://www.tutorialspoint.com/hadoop/hadoop_mapreduce.html

7.What is MapReduce?

https://intellipaat.com/blog/what-is-mapreduce/