Yarn的基礎介紹以及job的提交流程

1.YARN的基礎理論

1)關於YARN的介紹:

   YARN 是一個資源調度平臺,負責爲運算程序提供服務器運算資源,相當於一個分佈式的操作系統平臺,而 MapReduce 等運算程序則相當於運行於操作系統之上的應用程序。

2)hadoop1.x中YARN的不足:

   - JobTracker是集羣的事務的集中處理,存在單點故障
   - JobTracker需要完成得任務太多,既要維護job的狀態又要維護job的task的狀態,造成資源消耗過多
   - 在 TaskTracker 端,用Map/Reduce Task作爲資源的表示過於簡單,沒有考慮到CPU。內存,等資源情況,將兩個需要大消耗量的Task調度到一起,很容易出現OOM。
   - 把資源強制劃分爲 Map/Reduce Slot,當只有 MapTask 時,TeduceSlot 不能用;當只有 ReduceTask 時,MapSlot 不能用,容易造成資源利用不足。

3)hadoop2.x中YARN的新特性:

  MRv2 最基本的想法是將原 JobTracker 主要的資源管理和 Job 調度/監視功能分開作爲兩個單獨的守護進程。有一個全局的ResourceManager(RM)和每個 Application 有一個ApplicationMaster(AM),Application 相當於 MapReduce Job 或者 DAG jobs。ResourceManager和 NodeManager(NM)組成了基本的數據計算框架。ResourceManager 協調集羣的資源利用,任何 Client 或者運行着的 applicatitonMaster 想要運行 Job 或者 Task 都得向 RM 申請一定的資源。ApplicatonMaster 是一個框架特殊的庫,對於 MapReduce 框架而言有它自己的 AM 實現,
用戶也可以實現自己的 AM,在運行的時候,AM 會與 NM 一起來啓動和監視 Tasks。

4)YARN中的角色介紹:

ResourceManager:ResoueceMananer是基於應用程序對集羣資源的需求進行調度的yarn集羣的主控制節點,負責協調和管理整個集羣,相應用戶提交的不同的類型的應用程序,解析、調度、監控等工作。ResourceManager會爲每一個application啓動一個MRappmaster,並且MRappmaster分散在各個nodemanager上。
ResourceManager只要有兩個部分組成:
  - 應用程序管理器(ApplicationsManager, ASM): 管理和監控所有的應用程序的MRappmaster,啓動應用程序的MRappmaster,以及MRappmaster失敗重啓
  - 調度器(Scheduler):底層是一個隊列,負責應用程序的執行時間和順序
     - FIFO(先進先出的隊列):先提交的任務先執行 後提交的後執行 內部只維護一個隊列
     - Fair 公平調度器:所有的計算任務進行資源的平分,全局中如果只有一個job那麼當前的job佔用所有的資源
     - Capacity(計算能力調度器):可以根據實際的job任務的大小,進行資源的配置


NodeManager:Nodemanager是yarn集羣中正真資源的提供者,也是真正執行應用程序的容器的提供者,監控應用程序的資源情況(cpu、網絡、IO、內存)。並通過心跳向集羣的主節點ResourceManager 進行彙報以及更新自己的健康狀況。同時也會監督container的生命週期管理,監控每個container的資源情況


MRAppMaster:爲當前的job的mapTask和reduceTask向ResourceManager 申請資源、監控當前job的mapTask和reduceTask的運行狀況和進度、爲失敗的MapTask和reduceTask重啓、負責對mapTask和reduceTask的資源回收。


Container :Container 是一個容器,一個抽象的邏輯資源單位。容器是由ResourceManager Scheduler 服務動態分配的資源構成的,它包括該節點上的一定量的cpu、網絡、IO、內存,MapReduce 程序的所有 Task 都是在一個容器裏執行完成的。

5)YARN中的資源調度:

hadoop 1.x
Yarn的基礎介紹以及job的提交流程

  • 首先通過client發起計算作業,由jobTracker向每一個Task Tracker發起計算(每一個job Tracker就是一個map-reduce)
  • 具體工作的是Task Tracker,而jobTracker是做資源管理的,首先Task Tracker會向job tracker做心跳,並同時的拉取相應的任務,開始計算。
  • 首先job Tracker控制Task Tracker並行map計算,當map結束之後,job Tracker控制Task Tracker並行reduce計算。
    hadoop 2.x
    Yarn的基礎介紹以及job的提交流程
  • 客戶端提交計算任務到resourceManager(hadoopxx.jar)
  • resourceManager會在一個節點上啓動一個container,在其中運行一個MRappmaster
  • MRappmaster向resourceManager申請資源運行行maptask和reducetask
  • resourceManager向MRAPPmaster返回運行maptask和reducetask的節點
  • MRAPPmaster到相應的節點中啓動一個container在其中運行maptask和reudcetask
  • MRappmaster監控maptask或者reducetask的運行狀況
  • nodemanger在運行完maptask或者reducetask後,向MRappmaster申請註銷自己,釋放資源
  • MRappmaster向resourcemanager註銷自己,釋放資源。

    2.YARN的job 提交流程

    Yarn的基礎介紹以及job的提交流程

    1. 客戶端向resourcemanager提交job運行的請求(hadoop jar xxxx.jar)
    2. Resourcemanager進行檢查,沒有問題的時候,向客戶端返回一個共享資源路徑以及JobID
    3. 客戶端將共享資源放入共享路徑下:(/tmp/hadoop-yarn/staging/hadoop/.staging/job_1539740094604_0002/)
      1. Job.jar 需要運行的jar包,重命名爲job.jar
      2. Job.split 切片信息 (FlieInputFormat---getSplits List<Split>)
      3. Job.xml 配置文件信息 (一些列的job.setxxxx())
    4. 客戶端向resourcemanager反饋共享資源放置完畢,進行job的真正提交
    5. resourceManager爲這個job分配一個節點並在這個節點上啓動MRAPPmaster任務
    6. resourceManager到對應的節點上去啓動一個container然後啓動mrappmaster
    7. MRappmaster去共享資源路徑中下載資源(主要是split、job)
    8. MRappmater對job進行初始化,生成一個job工作簿,job的工作薄記錄着maptask和reduce的運行進度和狀態
    9. MRappmaster向resourcemanager申請maptask和reducetask的運行的資源,先發maptask然後發reducetask
    10. resourcemanager向MRAPPmaster返回maptask和reduce的資源節點(返回節點時,有就近原則,優先返回當前的maptask所處理切片的實際節點,數據處處理的時候可以做到數據的本地化處理。如果是多副本的時候就在多副本的任意節點。而reducetask任務在任意不忙的節點上啓動)
    11. MRAPPmaster到對應的節點上啓動一個container,然後在container中啓動maptask任務
    12. maptask任務到對應的共享資源路徑下下載相應的資源(運行的jar包)
    13. maptask任務啓動,並且定時向MRAPPmaster彙報自己的運行狀態和進度
    14. 當有一個maptask任務完成之後,reduce就啓動container然後在啓動啓動reduce任務,但是這裏的reducetask只做數據拉取的工作,不會進行計算
    15. duceTask任務到對應的共享資源路徑下載相應的資源(運行的jar包),當所有的maptask任務運行完成後,啓動reduce任務進行計算
    16. 當maptask或者是reducetask任務運行完成之後,就會向MRAPPmaster申請註銷自己,釋放資源
    17. 當application任務完成之後,MRAPPmaster會向resourcemanager申請註銷自己,釋放資源
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章