本篇學習 Yarn Application 編寫方法,將帶你更清楚的瞭解一個任務是如何提交到 Yarn ,在運行中的交互和任務停止的過程。通過瞭解整個任務的運行流程,幫你更好的理解 Yarn 運作方式,出現問題時能更好的定位。 一、簡介 本篇將對 Yarn Application 編寫流程進行介紹。 ...
本篇學習 Yarn Application 編寫方法,將帶你更清楚的瞭解一個任務是如何提交到 Yarn ,在運行中的交互和任務停止的過程。通過瞭解整個任務的運行流程,幫你更好的理解 Yarn 運作方式,出現問題時能更好的定位。
一、簡介
本篇將對 Yarn Application 編寫流程進行介紹。將一個新的應用程式運行到 Yarn 上,主要編寫兩個組件 Client
和 ApplicationMaster
,組件的具體實現案例將在後兩篇文章中介紹。
(實際使用中,我們並不需要實現一個 Yarn Application,直接將任務提交到 MapReduce、Spark、Hive、Flink 等框架上,再由這些框架提交任務即可,這些框架也可以被視為一種特定的 Yarn Application。)
其中,Client 主要用於提交應用程式和管理應用程式,ApplicationMaster 負責實現應用程式的任務切分、調度、監控等功能。
一)Application 的提交和啟動流程
二)各服務間涉及的 protocol
二、組件實現流程
一)Client 實現
- 創建並啟動
YarnClient
; - 通過
YarnClient
創建Application
; - 完善
ApplicationSubmissionContext
所需內容:- 設置 application name;
- 設置 ContainerLaunchContext;(包含 app master jar)
- 設置優先順序、隊列等
- 提交
Application
。
二)ApplicationMaster實現
- 創建並啟動
AMRMClientAsync
,用於與ResourceManager
通信; - 創建並啟動
NMClientAsync
,用於與NodeManager
通信; - 向
ResourceManager
註冊,之後會向ResourceManager
發送心跳; - 向
ResourceManager
申請Container
。 - 在
Container
中運行 task
三)Hadoop 實現案例
Hadoop 自帶的 hadoop-yarn-applications-distributedshell
是個很好的學習案例,可以參考其中的 Client.java
和 ApplicationMaster.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 結構設計與實現原理》第四章