MapRdeuce&Yarn的工作機制
那天在集群中跑一個MapReduce的程序時,在機器上jps了一下發現了每台機器中有好多個YarnChild。困惑什么時YarnChild,當程序跑完后就沒有了,神奇。后來百度了下,又問問了別的大佬。原來是這樣
什么是YarnChild:
答:MrAppmaster運行程序時向resouce manager 請求的maptask/reduceTask。也是運行程序的容器。其實它就是一個運行程序的進程。
圖解說下:
hadoop1版本的MapRdeuce&Yarn的工作機制
1.客戶端發來request。JobTracker接受request。
2.JobTracker將客戶端發來的request任務分配給TaskTracker
3.然后TaskTracker生成maptask運行程序
4.JobTracker不僅要負責資源調度,還要負責監控應運運算流程。
缺點:耦合的高,當JobTracker死掉時,所有的客戶端的請求任務都會死掉,而hadoop2則避免了這個問題,它中的對象多,但都各司其職,耦合的低,運行效率快。
hadoop2版本的MapRdeuce&Yarn的工作機制
1.客戶端發出請求,YARNRUNNER接受,生成一個代理對象,向resource manager請求一個application
2.resource manager返回application的提交路徑和application_id(這里使用id是應為可能有多個任務用id來區別)
3.YARNRUNNER向hdfs提交job運行所需要的文件(application,job.split,job,.xml,job.jar)
4.向resource manager 報告提交完成,申請一個mrAppMaster
5.將用戶的請求初始化成一個task,將task放到隊列中,等待node manager來領取task任務。(這其中使用了調度策略,節約資源,如:Fair Capacity等等)
6.node manager領取到任務,
7.生成一個Container,然后在hdfs中下載運行資源。
8.向resource manager申請運行maptask的容器(帶着任務,split,運行資源.的元數據..)
9.其他的node manager領取到resouce manager的任務,創建容器,此時的Container則是YarnChild,也是maptask,然后maptask在hdfs下載所要運行的資源。
10.MrAppMaster發送程序腳本運行jar,當maptask中的程序運行完成后,maptask的資源被resource manager回收了,但跑完的資源在node manager中。
11.當maptask運行完成后MRAppmaster又向resorce manager申請 reduce task(至於它申請多少個是由它有多少個map task決定的),然后根據忙於不忙node manager領取任務.創建container,
12.redcuetask 向map獲取相應分區的數據資源,運行文件。
13.application運行完畢后MrAppmaster會向resource manager注銷自己
總結:Yarn:資源調度系統(jar/xml/cpu/IO)
負責程序運行所需資源的分配回收等任務調度,於程序運行內部即使完全無關,所以yarn只是一個寺院調度平台,mapreudce 則是一個運行技術框架,那別的運算框架也可以使用yarn,如:spark/storm/flink....