大資料學習筆記(五)

xxiaoMinGLL發表於2018-01-27

MapReduce的工作流程


 作業執行涉及4個獨立的實體


客戶端,用來提交MapReduce作業
JobTracker,用來協調作業的執行
TaskTracker,用來處理作業劃分後的任務
HDFS,用來在其它實體間共享作業檔案

首先,客戶端編寫好MapReduce的程式,提交一個job到JobTracker上,JobTracker構建一個Job,具體就是分配新的一個job的ID值。

然後檢查輸入和輸出檔案是否存在,如果輸出檔案存在,或者輸入檔案不存在,JobTracker就會報錯。輸入檔案存在JobTracker就會計算分片,分片計算不出來也會報錯。都沒問題就給job配置資源。

分配好資源後,JobTracker就會初始化作業,把job放入一個內部的佇列,讓配置好的作業排程器能排程到這個作業,作業排程器會初始化這個job,初始化就是建立一個正在執行的job物件(封裝任務和記錄資訊),以便JobTracker跟蹤job的狀態和程式。

初始化完畢後,作業排程器會獲取輸入分片資訊(input split),每個分片建立一個map任務。

接下來就是任務分配了,這個時候tasktracker會執行一個簡單的迴圈機制定期傳送心跳給jobtracker,心跳間隔是5秒,程式設計師可以配置這個時間,心跳就是jobtracker和tasktracker溝通的橋樑,通過心跳,jobtracker可以監控tasktracker是否存活,也可以獲取tasktracker處理的狀態和問題,同時tasktracker也可以通過心跳裡的返回值獲取jobtracker給它的操作指令。


任務分配好後就是執行任務了。在任務執行時候jobtracker可以通過心跳機制監控tasktracker的狀態和進度,同時也能計算出整個job的狀態和進度,而tasktracker也可以本地監控自己的狀態和進度。當jobtracker獲得了最後一個完成指定任務的tasktracker操作成功的通知時候,jobtracker會把整個job狀態置為成功,然後當客戶端查詢job執行狀態時候(注意:這個是非同步操作),客戶端會查到job完成的通知的。如果job中途失敗,mapreduce也會有相應機制處理,一般而言如果不是程式設計師程式本身有bug,mapreduce錯誤處理機制都能保證提交的job能正常完成。

簡單的工作流程
建立job
job-》 input file output file
job -》 reduce map
job- 》 outputkey value 資料型別
啟動job

MapReduce執行機制



在Hadoop中,一個MapReduce作業會把輸入的資料集切分為若干獨立的資料塊,由Map任務以完全並行的方式處理


框架會對Map的輸出先進行排序,然後把結果輸入給Reduce任務。


作業的輸入和輸出都會被儲存在檔案系統中,整個框架負責任務的排程和監控,以及重新執行已經關閉的任務
 
MapReduce框架和分散式檔案系統是執行在一組相同的節點,計算節點和儲存節點都是在一起的

MapReduce作業處理的流程


輸入——》 分片 ——》 map函式整理資料(預設linereader按行讀取)——》 shuffling 排序(預設按key值進行排序) 把map的輸出作為輸入 ,輸入到reduce ——》 reduce 函式整理資料——》 輸出

在編碼過程中,就是對map和reduce函式進行編碼,實現定製。

相關文章