MR1和MR2的工作原理


MapReduce1

分為6個步驟:

  1、作業的提交

    1)、客戶端向jobtracker請求一個新的作業ID(通過JobTracker的getNewJobId()方法獲取,見第2步

    2)、計算作業的輸入分片,將運行作業所需要的資源(包括jar文件、配置文件和計算得到的輸入分片)復制到一個以ID命名的jobtracker的文件系統中(HDFS),見第3步

    3)、告知jobtracker作業准備執行,見第4步

  2、作業的初始化

    4)、JobTracker收到對其submitJob()方法的調用后,會把此調用放入一個內部隊列中,交由作業調度器進行調度,並對其初始化,見第5步

    5)、作業調度器首先從共享文件系統HDFS中獲取客戶端已經計算好的輸入分片,見第6步

    6)、為每個分片創建一個map任務和reduce任務,以及作業創建和作業清理的任務。

  3、任務的分配

    7)、tasktracker定期向jobtracker發送“心跳”,表明自己還活着。見第7步

    8)、jobtracker為tasktracker分配任務,對於map任務,jobtracker會考慮tasktracker的網絡位置,選取一個距離其輸入分片文件最近的tasktracker,對於reduce任務,jobtracker會從reduce任務列表中選取下一個來執行。

  4、任務的執行

    9)、從HDFS中把作業的jar文件復制到tasktracker所在的文件系統,實現jar文件本地化,同時,tasktracker將應用程序所需的全部文件從分布式緩存中復制到本地磁盤,見第8步,並且tasktracker為任務新建一個本地工作目錄,並把jar文件的內容解壓到這個文件夾下,然后新建一個taskRunner實例運行該任務

    10)、TaskRunner啟動一個新的JVM(見第9步)來運行每個任務(見第10步)

  5、進度和狀態的更新

    11)、任務運行期間,對其進度progress保持追蹤。對map進度是已經處理輸入所占的比例。對於reduce任務,分三部分,與shuffle的三個階段相對應。

      Shuffle是系統執行排序的過程。是mapreduce的心臟。

        

        對於map端而言:每個map任務都有一個環形內存緩沖區,默認是0.8,當緩沖區達到閾值時便開始把內容溢出spill到磁盤,在寫入磁盤之前,線程會根據數據最終要傳的reducer把數據划分成相應的分區,每個分區中,按鍵值進行內排序,如果有combine(使結果更緊湊),會在combine完成之后再寫入磁盤。

        對於reducer端而言,map的輸出文件位於tasktracker的本地磁盤,每個map任務完成的時間可能不同,只要有一個完成,就會復制其輸出(這就是復制階段),然后把map的輸出進行merge合並,然后直接把數據輸入到reduce函數,完成輸出。

  6、作業的完成

YARN(MapReduce2)

分6步執行:

  1、作業提交

    1)、客戶端向ResourceManager請求一個新的作業ID,ResourceManager收到后,回應一個ApplicationID,見第2步

    2)、計算作業的輸入分片,將運行作業所需要的資源(包括jar文件、配置文件和計算得到的輸入分片)復制到一個(HDFS),見第3步

    3)、告知ResourceManager作業准備執行,並且調用submitApplication()提交作業,見第4步

  2、作業初始化

    4)、ResourceManager收到對其submitApplication()方法的調用后,會把此調用放入一個內部隊列中,交由作業調度器進行調度,並對其初始化,然后為該其分配一個contain容器,見第5步

    5)、並與對應的NodeManager通信見第5a步,要求它在Contain中啟動ApplicationMaster見第5b步

    6)、ApplicationMaster啟動后,會對作業進行初始化,並保持作業的追蹤見第6步.

    7)、ApplicationMaster從HDFS中共享資源,,接受客戶端計算的輸入分片為每個分片。見第7步

  3、任務分配

    8)、ApplicationMaster想ResourceManager注冊,這樣就可以直接通過RM查看應用的運行狀態,然后為所有的map和reduce任務獲取資源,見第8步

  4、任務執行

    9)、ApplicationMaster申請到資源后,與NodeManager進行交互,要求它在Contain容器中啟動執行任務。見第9a、9b步

  5、進度和狀態的更新

    10)、各個任務通過RPC協議umbilical接口向ApplicationMaster匯報自己的狀態和進度,方便ApplicationMaster隨時掌握各個任務的運行狀態。用戶也可以向ApplicationMaster查詢運行狀態。

  6、作業完成

    11)、應用完成后,ApplicationMaster向ResourceManager注銷並關閉自己。


免責聲明!

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



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