[轉載]Yarn做業提交流程

一、yarn簡述

yarn是一個資源調度平臺,負責爲運算程序提供服務器運算資源,至關於一個分佈式操做系統平臺,而mapreduce等運算程序則至關於運行與操做系統之上的應用程序。yarn在hadoop2.x系列中被加入的資源管理器,取代hadoop1.x中的jobtracker,將資源管理與做業調度分離。web

 

二、yarn的重要概念

2.一、yarn不須要清楚用戶提交程序的運行機制。服務器

2.二、yarn只負責提供運算資源(爲運算程序提供一個容器,容器的資源由yarn負責分配)。網絡

2.三、yarn的實現是主從關係,主動角色爲ResourceManager、被動角色爲NodeManager負責提供運算資源。框架

2.四、yarn與用戶進程徹底解耦,意味着yarn上能夠運行各類類型的分佈式運算程序,如mapreduce、storm、spark和tez等。因此經過yarn提供的接口一樣能夠實現本身的運算框架。分佈式

2.五、yarn是一個通用的資源調度平臺,今後,生產中存在各類運算集羣均可以整合在一個物理集羣上,提升資源利用率,方便數據共享。oop


3 、Yarn進程

3.1.ResourceManager ------>yarn的老大
3.2.NodeManager        ------>yarn的小弟
3.3.ResourceManager調度器   a.默認調度器------>先進先出FIFO
                                                   b.公平調度器------>每一個任務都有執行的機會
......
3.4.心跳機制                 ------>NodeManager可經過心跳機制將節點健康情況實時彙報給ResourceManager,而ResourceManager則會    根據每一個NodeManager的健康情況適當調整分配的任務數目。當NodeManager認爲本身的健康情況「欠    佳」時,可以讓  ResourceManager再也不分配任務,待健康情況好轉時,再分配新任務。
3.5.NodeManager子進程------>獨立於NodeManager,不在NodeManager內部spa

四、YARN框架流程操作系統

任何框架與YARN的結合,都必須遵循YARN的開發模式。在分析Spark on YARN的實現細節以前,有必要先分析一下YARN框架的一些基本原理。orm

Yarn框架的基本運行流程圖爲:blog

其中,ResourceManager負責將集羣的資源分配給各個應用使用,而資源分配和調度的基本單位是Container,其中封裝了機器資源,如內存、CPU、磁盤和網絡等,每一個任務會被分配一個Container,該任務只能在該Container中執行,並使用該Container封裝的資源。NodeManager是一個個的計算節點,主要負責啓動Application所需的Container,監控資源(內存、CPU、磁盤和網絡等)的使用狀況並將之彙報給ResourceManager。ResourceManager與NodeManagers共同組成整個數據計算框架,ApplicationMaster與具體的Application相關,主要負責同ResourceManager協商以獲取合適的Container,並跟蹤這些Container的狀態和監控其進度。

五、Yarn提交做業流程

5.1 YARN-Client

Yarn-Client模式中,Driver在客戶端本地運行,這種模式可使得Spark Application和客戶端進行交互,由於Driver在客戶端,因此能夠經過webUI訪問Driver的狀態,默認是http://hadoop1:4040訪問,而YARN經過http:// hadoop1:8088訪問。

YARN-client的工做流程分爲如下幾個步驟:

  • 1.Spark Yarn Client向YARN的ResourceManager申請啓動Application Master。同時在SparkContent初始化中將建立DAGScheduler和TASKScheduler等,因爲咱們選擇的是Yarn-Client模式,程序會選擇YarnClientClusterScheduler和YarnClientSchedulerBackend;
  • 2.ResourceManager收到請求後,在集羣中選擇一個NodeManager,爲該應用程序分配第一個Container,要求它在這個Container中啓動應用程序的ApplicationMaster,與YARN-Cluster區別的是在該ApplicationMaster不運行SparkContext,只與SparkContext進行聯繫進行資源的分派
  • 3.Client中的SparkContext初始化完畢後,與ApplicationMaster創建通信,向ResourceManager註冊,根據任務信息向ResourceManager申請資源(Container);
  • 4.一旦ApplicationMaster申請到資源(也就是Container)後,便與對應的NodeManager通訊,要求它在得到的Container中啓動啓動CoarseGrainedExecutorBackend,CoarseGrainedExecutorBackend啓動後會向Client中的SparkContext註冊並申請Task;
  • 5.Client中的SparkContext分配Task給CoarseGrainedExecutorBackend執行,CoarseGrainedExecutorBackend運行Task並向Driver彙報運行的狀態和進度,以讓Client隨時掌握各個任務的運行狀態,從而能夠在任務失敗時從新啓動任務;
  • 6.應用程序運行完成後,Client的SparkContext向ResourceManager申請註銷並關閉本身。

5.二、 YARN-Cluster

在YARN-Cluster模式中,當用戶向YARN中提交一個應用程序後,YARN將分兩個階段運行該應用程序:第一個階段是把Spark的Driver做爲一個ApplicationMaster在YARN集羣中先啓動;第二個階段是由ApplicationMaster建立應用程序,而後爲它向ResourceManager申請資源,並啓動Executor來運行Task,同時監控它的整個運行過程,直到運行完成。

YARN-cluster的工做流程分爲如下幾個步驟:

  • 1.Spark Yarn Client向YARN中提交應用程序,包括ApplicationMaster程序、啓動ApplicationMaster的命令、須要在Executor中運行的程序等;
  • 2.ResourceManager收到請求後,在集羣中選擇一個NodeManager,爲該應用程序分配第一個Container,要求它在這個Container中啓動應用程序的ApplicationMaster,其中ApplicationMaster進行SparkContext等的初始化;
  • 3.ApplicationMaster向ResourceManager註冊,這樣用戶能夠直接經過ResourceManage查看應用程序的運行狀態,而後它將採用輪詢的方式經過RPC協議爲各個任務申請資源,並監控它們的運行狀態直到運行結束;
  • 4.一旦ApplicationMaster申請到資源(也就是Container)後,便與對應的NodeManager通訊,要求它在得到的Container中啓動啓動CoarseGrainedExecutorBackend,CoarseGrainedExecutorBackend啓動後會向ApplicationMaster中的SparkContext註冊並申請Task。這一點和Standalone模式同樣,只不過SparkContext在Spark Application中初始化時,使用CoarseGrainedSchedulerBackend配合YarnClusterScheduler進行任務的調度,其中YarnClusterScheduler只是對TaskSchedulerImpl的一個簡單包裝,增長了對Executor的等待邏輯等;
  • 5.ApplicationMaster中的SparkContext分配Task給CoarseGrainedExecutorBackend執行,CoarseGrainedExecutorBackend運行Task並向ApplicationMaster彙報運行的狀態和進度,以讓ApplicationMaster隨時掌握各個任務的運行狀態,從而能夠在任務失敗時從新啓動任務;
  • 6.應用程序運行完成後,ApplicationMaster向ResourceManager申請註銷並關閉本身。

六、YARN-Client 與 YARN-Cluster 區別

理解YARN-Client和YARN-Cluster深層次的區別以前先清楚一個概念:Application Master。在YARN中,每一個Application實例都有一個ApplicationMaster進程,它是Application啓動的第一個容器。它負責和ResourceManager打交道並請求資源,獲取資源以後告訴NodeManager爲其啓動Container。從深層次的含義講YARN-Cluster和YARN-Client模式的區別其實就是ApplicationMaster進程的區別。

YARN-Cluster模式下,Driver運行在AM(Application Master)中,它負責向YARN申請資源,並監督做業的運行情況。當用戶提交了做業以後,就能夠關掉Client,做業會繼續在YARN上運行,於是YARN-Cluster模式不適合運行交互類型的做業;

YARN-Client模式下,Application Master僅僅向YARN請求Executor,Client會和請求的Container通訊來調度他們工做,也就是說Client不能離開。

相關文章
相關標籤/搜索