MapReduce提交job到Yarn的流程學習


以MapReduce為例,提交一個MapReduce application的大致流程如下,其中Resource Manager簡寫為RM,Node Manager簡寫為NM,Application Master簡寫為AM。

提交application大致流程

(1)首先client里執行一個MapReduce程序,這個程序運行在client端的JVM里,在main方法中最后有一個job.waitForCompletion(true)方法,當執行這個方法后會觸發job.submitJob方法,准備向RM提交一個application。

(2)RM接受到請求后,會為這個application生成一個application +id編號,並且client會檢查輸出路徑是否已存在,輸入輸出路徑信息是否齊全。不管檢查有問題與否,RM都會給client端返回信息,其包括運行這個job所需要的資源,如運行在哪個NM上,需要的container信息。

一個簡單的MapReduce程序中application+id編號示例,測試發現需要hadoop jar運行才顯示:

(3)如果返回的信息提示路徑已存在,或者job運行的參數不夠,會退出程序,否則可以繼續執行這個job,這個時候client端會將程序的jar包,以及運行所需配置信息,以及分片信息發送到HDFS(這些文件保存的上級目錄即前面生成的application+id編號,默認會拷貝10份,如果只有3個節點則多余的7份會刪除),讓jar包和配置信息等保存在各個datanode上,這對分布式集群計算拉取資源來說是有利的,比直接從client端拉取資源會更加高效。

(4)前面准備沒問題后,client端向RM提交這個application。RM收到提交后,調度器scheduler將會為它分配container資源,application manager將創建application master。

(5)RM在接受到application提交后,根據資源調度算法計算的結果(包括運行job所在的節點在哪,運行所需要的資源container是多少),會先在計算得到的某個NM上啟動一個container,用於啟動AM,這個AM是運行MapReduce job前的准備,它啟動后后續請求資源就在client端和AM之間進行了。

(6)在客戶端執行一個MapReduce程序時,能看到Map和Reduce任務執行的進度百分比,這個是AM在執行initialize job后創建的薄記對象完成的,這個薄記對象會收集運行在分布式各個節點上任務的進度,匯總后定時發送給client。

(7)在執行MapReduce程序時,會先執行Map任務然后再執行Reduce任務(默認是執行Map任務5%后再執行Reduce任務),其中Map任務的個數是由分片數決定的,即通過InputFormat的getSplit方法得到的分片數,這個分片的信息需要從HDFS獲取,里面保存的是指向實際分片信息的引用。而Reduce任務的個數則是程序中指定的,通過setNumReduces(num)來指定。

(8)MapReduce任務先執行Map task,先以Map task為例,后面Reduce task執行流程也可參考。當准備執行Map task時,AM會向RM繼續發送請求,即resource-request請求,請求獲取計算的NM和container信息。

(9)得到返回信息后,AM會給NM發送container-launch-specification信息(包含AM和NM交流所需要的資料),在NM上啟動container,並准備執行task程序,container會將task運行的進度、狀態等信息通過 application-specific協議發送給ApplicationMaster,也是通過application-specific協議client通過AM獲取到了task運行的進度和狀態信息。

(10)執行task程序部分,是在一個叫做Yarn Child的主類java application中進行的,這個類在執行task程序之前,會向HDFS獲取jar包和配置信息。

(11)在獲取到HDFS的jar包和配置信息后就開始運行task,如果是Map task則輸出的key-value對會保存到各自的分區中去,如果是Reduce task則會從對應的map分區中拉取數據准備進行合並、排序和分組,最后執行reduce分組計算並輸出到HDFS。不管是Map task還是Reduce Task其都會向AM上報執行情況。

(12)最后執行完MapReduce任務后,保存在分區中的Map輸出信息將刪除,此外保存在HDFS中的jar包信息、配置信息和分片信息也將刪除。

以上為MapReduce提交job到yarn的過程,后續再補充完善。

參考博文:
(1)《hadoop核心權威指南第四版》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM