經典MapReduce作業和Yarn上MapReduce作業運行機制
阿新 • • 發佈:2018-10-07
管理 cal 3.1 mapred hadoop 資源管理器 ack 計數 sched
一、經典MapReduce缺陷
二、經典MapReduce的作業運行機制
如下圖是經典MapReduce作業的工作原理:
2.1 經典MapReduce作業的實體
經典MapReduce作業運行過程包含的實體:
- 客戶端,提交MapReduce作業。
- JobTracker,協調作業的運行。JobTracker是一個Java應用程序,它的主類是JobTracker。
- TaskTracker,運行作業劃分後的任務。TaskTracker是Java應用程序,它的主類是TaskTracker。
- 分布式文件系統(一般為HDFS),用來在其他實體間共享作業文件。
2.2 經典MapReduce作業的運行過程
1. 作業提交
- 客戶端運行MapReduce作業(步驟1)
- 向JobTracker請求一個新的作業ID,通過調用JobTracker的getNewJobId()方法獲取(步驟2)
- 將運行作業所需的資源(包括作業JAR文件、配置文件和計算所得的輸入分片)復制到一個以ID命名的JobTracker的文件系統中(步驟3)
- 告知JobTracker作業準備執行,通過調用JobTracker的submitJob()方法實現(步驟4)
2. 作業初始化
- JobTracker收到對其submitJob()方法的調用後,會把此調用放入一個內部隊列中,交由作業調度器進行調度,並對其進行初始化(步驟5)。初始化包括創建一個表示正在運行作業的對象,用於封裝任務和記錄信息,以便跟蹤任務的狀態和進程。
- 作業調度器從共享文件系統中獲取客戶端已經計算好的輸入分片(步驟6)。為每個分片創建一個map任務,創建的reduce任務由Job的mapred.reduce.tasks屬性決定,以及新建作業創建和作業清理的任務。
3. 任務分配
- TaskTracker定期向JobTracker發生“心跳(heartbeat)”,表名TaskTracker是否存活,同時保持兩者之間的通信(步驟7)
- JobTracker為TaskTracker分配任務,對於map任務,jobtracker會考慮tasktracker的網絡位置,選取一個距離其輸入分片文件最近的tasktracker,對於reduce任務,jobtracker會從reduce任務列表中選取下一個來執行。
4. 任務執行
- 從HDFS中把作業的JAR文件復制到TaskTracker所在的文件系統,實現JAR文件本地化,同時,TaskTracker將應用程序所需的全部文件從分布式緩存復制到本地磁盤(步驟8),並且為任務新建一個本地工作目錄,把JAR文件中的內容解壓到這個文件夾下,然後新建一個TaskRunner實例運行該任務。
5. 進度和狀態更新
- 任務在運行時,對其進度(progress,即任務完成百分比)的保持跟蹤。
6. 作業完成
- 將作業的狀態設置為“成功”,並且清空JobTracker作業的工作狀態,也指示TaskTracker清空作業的工作狀態(如刪除中間輸出)。
三、Yarn上MapReduce作業運行機制
如圖為Yarn中MapReduce作業的工作原理:
3.1 Yarn上的MapReduce作業的實體
主要包括以下幾個實體:
- 提交MapReduce作業的客戶端
- ResourceManager,Yarn資源管理器,負責協調集群上計算資源的分配
- NodeManager,Yarn節點管理器,負責啟動和監視集群中機器上的計算容器(container)
- MRAPPMaster,MapReduce應用程序MRAppMaster負責協調運行MapReduce作業的任務。它和MapReduce任務在容器中運行,這些容器由資源管理器分配並由節點管理器進行管理
- 分布式文件系統,一般為HDFS,用來與其他實體間共享作業文件
3.2 Yarn中MapReduce作業的運行過程
1. 作業提交
- 客戶端運行MapReduce作業(步驟1)
- 客戶端向ResourceManager請求新的作業ID,ResourceManager收到請求後,返回一個ApplicationID(步驟2)
- 客戶端檢查作業的的輸出說明,計算輸入分片,並將作業運行所需的資源(包括作業jar文件、配置文件和分片信息)復制到HDFS(步驟3)
- 告知ResourceManager作業準備執行,並調用ResourceManager上的submitApplication( )方法提交作業(步驟4)
2. 作業初始化
- 資源管理器收到應用提交請求後,便將請求傳遞給調度器Scheduler,調度器分配一個容器,然後ResourceManager在NodeManager的管理下在容器中啟動應用程序的master進程(步驟5(a)和5(b))
- 對作業進行初始化,創建對象以保持對作業進度的跟蹤(步驟6)
- MRAppMaster接受來自共享文件系統HDFS的在客戶端計算的輸入分片(步驟7)
3. 任務分配
- MRAppMaster為作業中的所有map任務和reduce任務向ResourceManager請求容器(步驟8)
4. 任務執行
- 一旦ResourceManager的調度器為任務分配了容器,MRAppMaster就通過與NodeManager通信來啟動容器(步驟9(a)和9(b))
- 任務在運行之前,需要將任務所需的資源本地化,包括作業的配置、JAR文件和所有來自分布式緩存的文件(步驟10)
- 運行map任務或reduce任務(步驟11)
5. 進度和狀態更新
- 任務每三秒鐘通過umbilical接口向ApplicationMaster匯報自己的進度和狀態(包含計數器),方便ApplicationMaster隨時掌握各個任務的運行狀態。
6. 作業完成
- 作業完成後,ApplicationMaster和任務容器清理其工作狀態,ApplicationMaster向ResourceManager註銷並關閉自己。
【參考鏈接】
[1] Asu_PC, MR1和MR2的工作原理.
[2] Tom Wbite, 《Hadoop權威指南》
經典MapReduce作業和Yarn上MapReduce作業運行機制