天天看點

MapReduce分布式計算系統

MapReduce是一種程式設計模型,用于大規模資料集(大于1TB)的并行運算。概念"Map(映射)"和"Reduce(歸約)",和它們的主要思想,都是從函數式程式設計語言裡借來的,還有從矢量程式設計語言裡借來的特性。它極大地友善了程式設計人員在不會分布式并行程式設計的情況下,将自己的程式運作在分布式系統上。 目前的軟體實作是指定一個Map(映射)函數,用來把一組鍵值對映射成一組新的鍵值對,指定并發的Reduce(歸約)函數,用來保證所有映射的鍵值對中的每一個共享相同的鍵組。

運作程式wordcount

cd /opt/module/hadoop-2.7.3/share/hadoop/mapreduce 轉入wordcount所在路徑。

運作touch in.txt,建立In.txt檔案,作為輸入檔案。

(如果in.txt是空檔案,運作vi in.txt,輸入内容作為被統計詞頻的輸入檔案)

輸出目錄/output必須不存在,程式運作後自動建立。

運作wordcount:

hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount /adir/in.txt output/

運作成功之後,進入/output目錄,打開檔案part-r-00000檢視計數結果。

MapReduce提供了以下的主要功能:

1)資料劃分和計算任務排程:

系統自動将一個作業(Job)待處理的大資料劃分為很多個資料塊,每個資料塊對應于一個計算任務(Task),并自動 排程計算節點來處理相應的資料塊。作業和任務排程功能主要負責配置設定和排程計算節點(Map節點或Reduce節點),同時負責監控這些節點的執行狀态,并 負責Map節點執行的同步控制。

2)資料/代碼互定位:

為了減少資料通信,一個基本原則是本地化資料處理,即一個計算節點盡可能處理其本地磁盤上所分布存儲的資料,這實作了代碼向 資料的遷移;當無法進行這種本地化資料處理時,再尋找其他可用節點并将資料從網絡上傳送給該節點(資料向代碼遷移),但将盡可能從資料所在的本地機架上尋 找可用節點以減少通信延遲。

3)系統優化:

為了減少資料通信開銷,中間結果資料進入Reduce節點前會進行一定的合并處理;一個Reduce節點所處理的資料可能會來自多個 Map節點,為了避免Reduce計算階段發生資料相關性,Map節點輸出的中間結果需使用一定的政策進行适當的劃分處理,保證相關性資料發送到同一個 Reduce節點;此外,系統還進行一些計算性能優化處理,如對最慢的計算任務采用多備份執行、選最快完成者作為結果。

4)出錯檢測和恢複:

以低端商用伺服器構成的大規模MapReduce計算叢集中,節點硬體(主機、磁盤、記憶體等)出錯和軟體出錯是常态,是以 MapReduce需要能檢測并隔離出錯節點,并排程配置設定新的節點接管出錯節點的計算任務。同時,系統還将維護資料存儲的可靠性,用多備份備援存儲機制提 高資料存儲的可靠性,并能及時檢測和恢複出錯的資料。

轉載于:https://www.cnblogs.com/yo123/p/10927008.html

繼續閱讀