Spark on Yarn學習之Yarn運行過程和Yarn應用的實現

2020-12-17 清無時空

【本文詳細介紹了Spark On Yarn 中Yarn運行過程和Yarn應用的實現,歡迎讀者朋友們閱讀、轉發和收藏!】

1. Yarn 的啟動流程

1.1 Yarn 啟動流程步驟

整體流程如下:

1. 提交應用及其使用到的資源

用戶向 YARN 中( RM )提交應用程式,其中包括 ApplicationMaster 程序、啟動 ApplicationMaster 的命令、用戶程序等。客戶端將應用程式所需的文件資源 ( 外部字典、 JAR 包、二進位文件等 ) 提交到 HDFS.

2. 啟動 ApplicationMaster

ResourceManager 為該應用程式分配第一個 Container ,並與對應的 NodeManager 通信,要求它在這個 Container 中啟動應用程式的 ApplicationMaster 。ApplicationMaster 與 ResouceManager 通信,以請求和獲取資源。ApplicationMaster 獲取到資源後,與對應的 NodeManager 通信以啟動任務。如果該應用程式第一次在給節點上啟動任務,則 NodeManager 首先從 HDFS 上下載文件緩存到本地,然後啟動該任務。

註:分布式緩存並不是將文件緩存到集群中各個結點的內存中,而是將文件換到各個結點的磁碟上,以便執行任務時候直接從本地磁碟上讀取文件。

3. 註冊應用

ApplicationMaster 首先向 ResourceManager 註冊,表明自己啟動成功,這樣用戶可以直接通過 ResourceManage 查看應用程式的運行狀態,然後它將為各個任務申請資源,並監控它的運行狀態,直到運行結束,即重複步驟 4~7 。

4. 為任務申請資源

ApplicationMaster 採用輪詢的方式通過 RPC 協議向 ResourceManager 申請和領取資源。

5. 與 NM 通信啟動各個任務

一旦 ApplicationMaster 申請到資源後, ApplicationMaster 就會將啟動命令交給 NodeManager, 要求它啟動任務。啟動命令裡包含了一些信息使得 Container 可以與 Application Master 進行通信。

6.NM 啟動任務

NodeManager 為任務設置好運行環境(包括環境變量、 JAR 包、二進位程序等)後,將任務啟動命令寫到一個腳本中,並通過運行該腳本啟動任務( Container )。

7. 執行任務

在 Container 內執行用戶提交的代碼,各個 Container 通過某個 RPC 協議向 ApplicationMaster 匯報自己的狀態和進度,以讓 ApplicationMaster 隨時掌握各個任務的運行狀態,從而可以在任務失敗時重新啟動任務。

8. 任務狀態查詢

在應用程式運行過程中,用戶可隨時通過 RPC 向 ApplicationMaster 查詢應用程式的當前運行狀態。

9. 運行完畢

應用程式運行完成後, ApplicationMaster 向 ResourceManager 註銷並關閉自己。

1.2 AM 與 RM 的詳細交互

1. 用戶向 YARN ResourceManager 提交應用程式, RM 收到提交申請後,先向資源調度器申請用以啟動 AM 的資源,待申請到資源後,再由 ApplicationMasterLauncher 與對應的 NodeManager 通信,從而啟動應用程式的 ApplicationMaster.

2.ApplicationMaster 啟動完成後, ApplicationMasterLaucher 會通過事件的形式,將剛剛啟動的 Application Master 註冊到 AMLiveMonitor ,以啟動心跳監控。

3.ApplicationMaster 啟動後,先向 ApplicatinMaterService 註冊,並將自己所在 host 、埠號等信息匯報給它。

4.AM 運行過程中,周期性地向 ApplicationMaserService 回報心跳信息(信息中包含想要申請的資源描述)。

5. ApplicationMasterService 每次收到 ApplicationMaster 心跳信息好後,將通知 AMLivelinessMonitor 更新應用程式的最新回報心跳的時間。

6. 應用程式運行完成後, AM 向 AMService 發送請求,註銷自己。

7.AMService 收到註銷請求後,標註應用程式運行狀態完成,同時通知 AMLivelinessMonitor 移除對它的心跳監控。

總結:

當用戶向 YARN 中提交一個應用程式後, YARN 將分兩個階段運行該應用程式:第一個階段是啟動

ApplicationMaster ;第二個階段是由 ApplicationMaster 創建應用程式,為它申請資源,並監控它的整個運行過程,直到運

行完成。

2.Yarn Application 的實現

2.1 Yarn application 中的角色和接口

Yarn 是一個資源管理系統,負責整個集群資源的管理和分配。如果需要在一個 yarn 集群上運行程序 :

首先得有個客戶端 client 來提交 job 到 ResourceManager(RM) 申請資源。Client 通過 RMProtocol 協議來與 RM 通信,將應用程式運行所需的一些信息,比如 local file/jars ,執行的命令,參數,環境變量等提供給 RM 來運行應用的第一個 container 也就是 ApplicationMaster(AppMaster) 。

如果申請到了資源, RM 就在第一個 container 上啟動 AppMaster 。AppMaster 然後通過 AMRMProtocol 協議與 ResourceManager 通訊,註冊自身,然後繼續申請資源。

如果獲得了 containers , AppMaster 會通過 ContainerManager 類與 NodeManager 通信,為任務啟動 container 。AppMaster 同時也會提供啟動 container 需要的一些信息,比如命令行,環境變量等。任務完成後, AppMaster 會通過 AMRMProtocol::finishApplicationMaster 來通知 RM 任務完成。同時, client 可以通過查詢 RM 來獲取 job 的狀態信息,或者如果 AppMaster 支持也可以直接從 AppMaster 查詢信息。如果需要, client 可以通過 ClientRMProtocol::forceKillApplication 來 kill 掉 application 。

三個角色

1. client 即客戶端,負責將應用程式提交到 RM 。

2. AppMaster 即整個應用程式的核心,負責與 RM 通信,申請資源,啟動 containers 。並監控 containers 的執行情況,在 container 執行失敗後做 failover 的處理。

3. container 就是具體幹活的,和具體業務相關的一些處理邏輯。

三個 RPC 協議

1. ClientRMProtocol(Client<–>ResourceManager) :客戶端與 RM 通信的協議,可以啟動 AppMater ,查詢或者 kill AppMaster 。

2. AMRMProtocol(ApplicationMaster<–>ResourceManager) :AppMaster 與 RM 通信, AppMaster 可以向 RM 註冊和註銷自己,也可以向 RM 申請資源以啟動 container 。

3. ContainerManager(ApplicationMaster<–> NodeManager) :AppMaster 與 NM 通信,可以啟動或者停止一個 container ,也可以獲取 container 的執行狀態。

我知道你在看

相關焦點

  • 阿里P8帶你走進YARN,一起探索YARN到底是什麼鬼東西?
    Yarn通俗介紹Apache Hadoop YARN (Yet Another Resource Negotiator,另一種資源協調者)是一種新的 Hadoop 資源管理器,它是一個通用資源管理系統和調度平臺,可為上層應用提供統一的資源管理和調度
  • 更快、更強——解析Hadoop新一代MapReduce框架Yarn
    ResourceManager協調集群的資源利用,任何client或者運行著的applicatitonMaster想要運行job或者task都得向RM申請一定的資源。ApplicatonMaster是一個框架特殊的庫,對於MapReduce框架而言有它自己的AM實現,用戶也可以實現自己的AM,在運行的時候,AM會與NM一起來啟動和監視tasks。
  • Yarn 的內存分配管理機制及相關參數配置
    ,任務執行過程就會出現異常。步驟4:所有任務運行完成後,ApplicationMaster 向 ResourceManager 註銷,整個應用程式運行結束。它跟Linux Container沒有任何關係,僅僅是YARN提出的一個概念(從實現上看,可看做一個可序列化/反序列化的Java類)。
  • 史上最牛YARN介紹
    YARN 是一個資源調度平臺,負責為運算程序提供伺服器運算資源,相當於一個分布式的操 作系統平臺,而 MapReduce 等運算程序則相當於運行於作業系統之上的應用程式Yarn的組成>1) ResourceManager(RM)控制整個集群並管理應用程式向基礎計算資源的分配。
  • 什麼是包芯紗,包芯紗介紹covering yarn
    什麼是包芯紗,包芯紗介紹covering yarn 2016-09-14 16:07:22 來源:全球紡織網 什麼是包芯紗
  • YARN琢磨不透?一篇文章帶你玩轉YARN!
    一、hadoop yarn 簡介Apache YARN(Yet Another Resource Negotiator) 是 hadoop 2.0 引入的集群資源管理系統。用戶可以將各種服務框架部署在 YARN 上,由 YARN 進行統一地管理和資源分配。
  • 用Spark-NLP建立文本分類模型
    介紹自然語言處理是全球數據科學團隊的重要過程之一。隨著數據的不斷增長,大多數組織已經轉移到大數據平臺,如apachehadoop和AWS、Azure和GCP等雲產品。這些平臺不僅能夠處理大數據,使組織能夠對非結構化數據(如文本分類)進行大規模分析。但在機器學習方面,大數據系統和機器學習工具之間仍然存在差距。
  • SparkCore——專業術語及流程圖
    1,Applicationapplication(應用)其實就是用spark-submit提交的程序。比方說spark examples中的計算pi的SparkPi。一個application通常包含三部分:從數據源(比方說HDFS)取數據形成RDD,通過RDD的transformation和action進行計算,將結果輸出到console或者外部存儲(比方說collect收集輸出到console)。2,DriverSpark中的driver感覺其實和yarn中Application Master的功能相類似。
  • Hadoop框架:Yarn基本結構和運行原理
    二、基本執行流程向Yarn提交MapReduce應用程式程序進行調度;RM組件返回資源提交路徑和ApplicationId;RM進程NM進程通信,根據集群資源分配容器;將MRAppMaster分發到上面分配的容器上面;運行所需資源提交到HDFS上申請運行MRAppMaster;RM經過上述操作把客戶端請求轉換為Task任務;容器中運行的就是Map或者Reduce任務;
  • 復盤node項目中遇到的13+常見問題和解決方案
    但是在和朋友合作開發項目時發現執行yarn start後會報錯, 後面看錯誤信息才發現window下不識別export, 後面筆者發現我們可以把cookie作為是一個由瀏覽器和伺服器共同協作實現的規範。
  • 大數據系列之Hadoop的資源管理模塊YARN
    >每個應用程式對應一個 AM,AM向RM申請資源用於在NM上啟動相應的 Task;NM 向 RM通過心跳信息:匯報 NM健康狀況、任務執行狀況、領取任務等;RM:整個集群只有一個,負責集群資源的統一管理和調度1)處理來自客戶端的請求(啟動/殺死應用程式);
  • 大數據入門:Hadoop Yarn組件基礎解析
    Yarn簡介Yarn是Yet Another Resource Negotiator的縮寫,在Hadoop生態當中,作為通用的資源管理系統與調度平臺,去實現CPU、內存、磁碟、網絡等資源進行統一管理與拆分,以容器的形式,為上層應用提供統一的資源服務。
  • Spark運行模式——Local模式
    首先需要下載Spark1.官網地址 http://spark.apache.org/2.文檔查看地址 https://spark.apache.org/docs/2.1.1/3.下載地址 https://archive.apache.org/dist/spark/Local
  • 三分鐘入門大數據之ZooKeeper和Yarn之間的區別與聯繫是什麼?
    基於多年的網際網路行業從業經驗,漢斯老師在這裡向大家推薦大數據方向,希望通過本人的《三分鐘入門大數據》和《十分鐘精通大數據》等系列文章,幫助所有有志了解學習大數據的朋友掌握大數據的相關知識,也歡迎所有對網際網路行業以及大數據領域感興趣的朋友前來交流。