【深入淺出 Yarn 架構與實現】3-1 Yarn Application 流程與編寫方法

2022-11-14 21:01:24

本篇學習 Yarn Application 編寫方法,將帶你更清楚的瞭解一個任務是如何提交到 Yarn ,在執行中的互動和任務停止的過程。通過了解整個任務的執行流程,幫你更好的理解 Yarn 運作方式,出現問題時能更好的定位。

一、簡介

本篇將對 Yarn Application 編寫流程進行介紹。將一個新的應用程式執行到 Yarn 上,主要編寫兩個元件 ClientApplicationMaster,元件的具體實現案例將在後兩篇文章中介紹。
(實際使用中,我們並不需要實現一個 Yarn Application,直接將任務提交到 MapReduce、Spark、Hive、Flink 等框架上,再由這些框架提交任務即可,這些框架也可以被視為一種特定的 Yarn Application。)
其中,Client 主要用於提交應用程式和管理應用程式,ApplicationMaster 負責實現應用程式的任務切分、排程、監控等功能。

一)Application 的提交和啟動流程

二)各服務間涉及的 protocol

二、元件實現流程

一)Client 實現

  1. 建立並啟動 YarnClient;
  2. 通過 YarnClient 建立 Application;
  3. 完善 ApplicationSubmissionContext 所需內容:
    1. 設定 application name;
    2. 設定 ContainerLaunchContext;(包含 app master jar)
    3. 設定優先順序、佇列等
  4. 提交 Application

二)ApplicationMaster實現

  1. 建立並啟動 AMRMClientAsync,用於與 ResourceManager 通訊;
  2. 建立並啟動 NMClientAsync ,用於與 NodeManager 通訊;
  3. ResourceManager 註冊,之後會向 ResourceManager 傳送心跳;
  4. ResourceManager 申請 Container
  5. Container 中執行 task

三)Hadoop 實現案例

Hadoop 自帶的 hadoop-yarn-applications-distributedshell 是個很好的學習案例,可以參考其中的 Client.javaApplicationMaster.java 兩個類進行學習。DistributedShell 可以執行使用者指定的 Shell 命令或指令碼,包含了編寫一個 YARN Application 的完整內容。

三、小結

本篇帶大家瞭解了 Yarn Application 提交和啟動流程、元件間涉及的通訊協定,以及編寫 Application 的基本流程。實際上,在 Yarn 上執行不同的框架應用 Hive、Spark、Flink 等就是主要實現 Client 和 Application Master 兩個元件。理解了本文的相關知識,再去看其他應用提交過程就會清晰很多。
接下來的兩篇講帶大家學習 Client 和 Application Master 具體編寫方式。


參考文章:
深入解析yarn架構設計與技術實現-yarn 應用程式設計方法
Hadoop YARN原理 - 編寫YARN Application
Hadoop DOC: Writing YARN Applications
github app-on-yarn-demo
《Hadoop 技術內幕 - 深入解析 Yarn 結構設計與實現原理》第四章