MapReduce在YARN上的執行流程
阿新 • • 發佈:2019-01-03
1.客戶端提交mr程式job的流程
- 客戶端提交job後(job.submit()),Yarn的ResourceManager會返回本次所提交的job的提交路徑(hdfs://xxx../staging)和jobid,然後拼接為一個job的資源提交路徑 (hdfs://…./staging/jobid)
然後會將
1)job的切片規劃(呼叫FileInputFormat.getSplits()獲取切片規劃List)序列化成的檔案job.split
2)job.xml檔案(job的相關引數)
3)job的jar包
拷貝到剛才拼接成的資源提交路徑流程圖解
2.mr程式在YARN上的工作機制
客戶端提交job後,通過客戶端所在節點的YRANRUNNER向resource manager(之後簡稱rm)申請提交一個application
rm會返回任務的資源提交路徑hdfs://xxx…/..和application_id
客戶端所在節點的YRANRUNNER提交job執行所需要的資源(job.split、job.xml、job.jar)到前面提到的拼接的資源提交路徑,資源提交完畢後申請執行mrAppMaster,先挑一臺node manager建立容器(cpu+ram)執行mrAppMaster
rm將使用者的請求封裝成一個個的job,放入佇列中(YARN的三種排程器,FIFO(預設)、Fair、Capacity),mrAppMaster領取到任務後先下載job資源到本地,然後根據任務描述,向rm申請執行maptask的容器,rm在分配容器給node manager來啟動maptask和reducetask
三點需要注意:
1)程式執行時,只有mrAppMaster知道執行資訊,rm和node manager都不知道,YARN只負責資源的分配。從這一點可以看出YARN和mr程式是解耦的。 2)maptask執行完畢後,相應的資源會被回收,那之後啟動的reduce拿到maptask生成的資料呢?maptask雖然不在了,但是有檔案,它們被node manager管理,reduce可以找node manager 要,搭建環境時配過一個引數(mapreduced_shuffle)就是配合管理這些檔案。 3)Hadoop1.x版本中角色分為JobTracker和TaskTracker,JobTracker既要監控運算流程,又要負責資源排程,耦合度高,導致負載過大。
流程圖解