天天看點

分布式并行計算MapReduce

1.闡明Hadoop平台上HDFS和MapReduce的功能、工作原理和工作過程。

HDFS功能:是Hadoop項目的核心子項目。是分布式計算中資料存儲管理的基礎,是基于流資料模式通路和處理超大檔案的需求而開發的,可以運作于廉價的商用伺服器上 pc server。

具有以下的功能:

(1)高容錯性 :自動儲存多個副本來增加容錯性 ,如果某一個副本丢失,HDFS機制會複制其他機器上的副本,透明實作。

(2)支援超大檔案 :流式資料通路 批量處理不是使用者互動式處理。

(3)HDFS使應用程式能夠以流的形式通路資料 注重的是吞吐量而不是資料通路的速度。

(4)簡化的一緻性模型大部分為一次寫入多次讀取。

  HDFS的工作機制和原理:

(1)HDFS叢集分為兩大角色:NameNode、DataNode  (Secondary Namenode)

(2)  NameNode負責管理整個檔案系統的中繼資料

(3)DataNode 負責管理使用者的檔案資料塊

(4)檔案會按照固定的大小(blocksize)切成若幹塊後分布式存儲在若幹台datanode上

(5)每一個檔案塊可以有多個副本,并存放在不同的datanode上

(6)Datanode會定期向Namenode彙報自身所儲存的檔案block資訊,而namenode則會負責保持檔案的副本數量

(7)HDFS的内部工作機制對用戶端保持透明,用戶端請求通路HDFS都是通過向namenode申請來進行

 二、MapReduce的功能、工作原理和工作過程。

MapReduce的功能:

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

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

2)資料/代碼互定位:

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

3)系統優化:

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

4)出錯檢測和恢複:

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

MapReduce程式運作過程:

  1. 作業運作過程:首先向JobTracker請求一個新的作業ID;然後檢查輸出說明(如輸出目錄已存在)、輸出劃分(如輸入路徑不存在);JobTracker配置好所有需要的資源,然後把作業放入到一個内部的隊列中,并對其進行初始化,初始化包括建立一個代表該正在運作的作業對象(封裝任務和記錄資訊),以便跟蹤任務的狀态和程序;作業排程器擷取分片資訊,每個分片建立一個map任務。TaskTracker會執行一個簡單的循環定期發送heartbeat給JobTracker,心跳間隔可自由設定,通過心跳JobTracker可以監控TaskTracker是否存活,同時也能獲得TaskTracker處理的狀态和問題,同時也能計算出整個Job的狀态和進度。當JobTracker獲得了最後一個完成指定任務的TaskTracker操作成功的通知時候,JobTracker會把整個Job狀态置為成功,然後當用戶端查詢Job運作狀态時候(注意:這個是異步操作),用戶端會查到Job完成的通知的。

  2. 邏輯角度分析作業運作順序:輸入分片(input split)、map階段、combiner階段、shuffle階段、reduce階段。

  1. map階段:即執行map函數。
  2. combiner階段:這是一個可選擇的函數,實質上是一種reduce操作。combiner是map的後續操作,主要是在map計算出中間檔案前做一個簡單的合并重複key值的操作。
  3. shuffle階段:指從map輸出開始,包括系統執行排序即傳送map輸出到reduce作為輸入的過程。另外針對map輸出的key進行排序又叫sort階段。map端shuffle,簡單來說就是利用combiner對資料進行預排序,利用記憶體緩沖區來完成。reduce端的shuffle包括複制資料和歸并資料,最終産生一個reduce輸入檔案。shuffle過程有許多可調優的參數來提高MapReduce的性能,其總原則就是給shuffle過程盡量多的記憶體空間。
  4. reduce階段:即執行reduce函數并存到hdfs檔案系統中。

2.HDFS上運作MapReduce

1)準備文本檔案,放在本地/home/hadoop/wc

2)編寫map函數和reduce函數,在本地運作測試通過

分布式并行計算MapReduce
分布式并行計算MapReduce

本地運作二個程式:

分布式并行計算MapReduce
分布式并行計算MapReduce

下載下傳文本檔案或爬取網頁内容存成的文本檔案:

分布式并行計算MapReduce

3)啟動Hadoop:HDFS, JobTracker, TaskTracker

分布式并行計算MapReduce
分布式并行計算MapReduce

把文本檔案上傳到hdfs檔案系統上 user/hadoop/input 

分布式并行計算MapReduce

建立一個shell腳本檔案:streaming接口運作的腳本,名稱為run.sh

分布式并行計算MapReduce

運作結果

分布式并行計算MapReduce
分布式并行計算MapReduce