1. 程式人生 > >MapReduce在YARN上的執行流程

MapReduce在YARN上的執行流程

1.客戶端提交mr程式job的流程

  1. 客戶端提交job後(job.submit()),Yarn的ResourceManager會返回本次所提交的job的提交路徑(hdfs://xxx../staging)和jobid,然後拼接為一個job的資源提交路徑 (hdfs://…./staging/jobid)
  2. 然後會將
    1)job的切片規劃(呼叫FileInputFormat.getSplits()獲取切片規劃List)序列化成的檔案job.split
    2)job.xml檔案(job的相關引數)
    3)job的jar包
    拷貝到剛才拼接成的資源提交路徑

  3. 流程圖解
    這裡寫圖片描述

2.mr程式在YARN上的工作機制

  1. 客戶端提交job後,通過客戶端所在節點的YRANRUNNER向resource manager(之後簡稱rm)申請提交一個application

  2. rm會返回任務的資源提交路徑hdfs://xxx…/..和application_id

  3. 客戶端所在節點的YRANRUNNER提交job執行所需要的資源(job.split、job.xml、job.jar)到前面提到的拼接的資源提交路徑,資源提交完畢後申請執行mrAppMaster,先挑一臺node manager建立容器(cpu+ram)執行mrAppMaster

  4. 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既要監控運算流程,又要負責資源排程,耦合度高,導致負載過大。
    
  5. 流程圖解

    這裡寫圖片描述