乙個mapreduce作業在hado上執行的整個過程可以分為4個實體:
(1)、客戶端,提交mapreduce作業;
在客戶端上使用runjob()方法來新建jobclient例項和呼叫它的submitjob()方法。提交作業後,runjob將每秒輪詢作業的進度,如果發現與上乙個記錄不同,便把報告顯示到控制台。作業完成後,如果成功,就顯示作業計數器。否則,當之作業失敗的錯誤會被記錄到控制台。
jobclient的sunbmitjob()方法所實現的作業提交過程:
1、 向jobtracker請求乙個新的作業id(通過呼叫jobtracker的getnewjobid());
2、 檢查作業的輸出說明。比如,如果沒有指定輸出目錄或者它已經存在,作業就不會被提交,並將錯誤放回給mapreduce程式;
3、 計算作業的輸入劃分。如果劃分無法計算,比如因為輸入路徑不存在,作業就不會被提交,並有錯誤返回給mapreduce程式;
4、 將執行作業所需要的資源————包括作業jar檔案、配置檔案和計算所得的輸入劃分————複製到乙個以作業id號命名的目錄中jobtracker的檔案系統。作業jar的副本較多,如此以來,在tasktracker執行作業任務時,集群能為它們提供許多副本進行訪問。
5、告訴jobtracker作業準備執行;
(2)、jobtracker協助作業的執行;
作業的初始化:
jobtracker接收到對submitjob()方法的呼叫後,會把此呼叫放入乙個內部的佇列中,交由作業排程器進行排程,並對其進行初始化。初始化包括建立乙個代表該正在執行的作業的物件,它封裝任務和記錄資訊,以便跟蹤任務的狀態和程序;
要建立執行任務列表,作業排程器首先從共享檔案系統中獲取jobclient己計算好的輸入劃分資訊。然後為每個劃分建立乙個map任務。建立的reduce任務的數量由jobconf的mapred.reduce.tasks屬性決定,它用sernumreducetasks()方法來設定的,然後排程器便建立那麼多reduce任務來執行。
任務分配:
tasktracker執行乙個簡單的迴圈,定期傳送心跳(heartbeat)方法呼叫jobtracker。心跳方法告訴jobtracker,tasktracker是否還存活,同時也充當兩者之間的訊息通道。作為心跳方法呼叫的一部份,tasktracker會指明它是否已經準備執行新的任務,如果是,jobtracker會為它分配乙個任務,並使用心跳方法的返回值與tasktracker進行通訊;
(3)、tasktracker執行作業劃分後的任務;
通過tasktracker本地化作業的jar檔案,將它從共享檔案系統複製到tasktracker所在的檔案系統。同時將應用程式所需要的全部檔案從分布式快取複製到本地磁碟;
為任務新建乙個本地工作目錄,並把jar檔案中的內容壓縮到這個資料夾下;
新建乙個taskrunner例項來執行任務;
(4)、在以上所有過程的操作中,分布式檔案系統(hdfs)被用來實現他們的作業檔案的共享。
乙個mapreduce作業失敗有很多原因:
任務失敗:1、子任務失敗:map或reduce任務中的使用者**丟擲執行異常,子任務jvm程序會在退出之前向其tasktracker父程序傳送錯誤報告。錯誤報告最後被記入使用者日誌。tasktracker會將此次任務嘗試標記為failed,釋放乙個槽以便執行另外乙個任務;2、jvm突然退出:可能是jvm錯誤,由mapreduce使用者**某些特殊原因而造成jvm退出。3、任務的掛起:tasktracker注意到自己已經有一段時間沒有收到進度更新,因此進而將任務標記為failed。在此之後子jvm程序將被自動殺死。
tasktracker失敗如果某tasktracker由於崩潰或執行過於緩慢而失敗,它將停止向jobtracker傳送心跳。jobtracker會注意到此tasktracker已經停止傳送心跳,會將它從等待任務排程的tasktracker池中移除。jobtracker會安排此tasktracker上已經執行並成功完成的map任務返回。如果它們屬於未完成的作業的話,因為它們的中間輸出都存放在故障tasktracker的本地檔案系統上,這是reduce任務無法訪問的,任何進行中的任務也都會被重新排程。
jobtracker失敗
mapreduce的作業排程 fifo演算法(first in first out),即所有的使用者作業都被提交到乙個佇列中,然後由jobtracker按照作業的優先順序(比如提交時間的先後順序)選擇將被執行的作業。該演算法的具體實現是jobqueuetaskscheduler。具體而言,當乙個tasktracker工作的游刃有餘,期待獲得新的任務的時候,jobqueuetaskscheduler會按照各個作業的優先順序,從最高優先順序的作業開始分配任務,選擇任務的基本次序是:
map任務伺服器的清理任務,用於清理相關的過期的檔案和環境;
map任務伺服器的安裝任務,負責配置好相關的環境;
map tasks
reduce clean up task
reduce setup task
reduce tasks
(還有乙個公平排程器來實現作業排程,不過感覺認為mapreduce的作業排程這部分不是很好!)
**:
MapReduce工作原理
本文的目錄 1.mapreduce作業執行流程 2.map reduce任務中shuffle和排序的過程 mapreduce作業詳細的執行流程 流程分析 1.在客戶端啟動乙個作業。2.向jobtracker請求乙個job id。3.將執行作業所需要的資源檔案複製到hdfs上,包括mapreduce程...
map reduce工作原理
下面的圖來自南京大學計算機系黃宜華老師開設的mapreduce課程的課件,這裡稍作整理和 總結。本文旨在對接觸了mapreduce之後,但是對mapreduce的工作流程仍不是很清楚的人員,當然包括博主自己,希望與大家一起學習。mapreduce借鑑了函式式程式語言lisp中的思想,lisp lis...
MapReduce工作原理
map reduce框架的運作完全基於對,即資料的輸入是一批對,生成的結果也是一批對,只是有時候它們的型別不一樣而已。key和value的類由於需要支援被序列化 serialize 操作,所以它們必須要實現writable介面,而且key的類還必須實現writablecomparable介面,使得可...