本篇學習 Yarn Application 編寫方法,將帶你更清楚的瞭解一個任務是如何提交到 Yarn ,在執行中的互動和任務停止的過程。通過了解整個任務的執行流程,幫你更好的理解 Yarn 運作方式,出現問題時能更好的定位。
本篇將對 Yarn Application 編寫流程進行介紹。將一個新的應用程式執行到 Yarn 上,主要編寫兩個元件 Client
和 ApplicationMaster
,元件的具體實現案例將在後兩篇文章中介紹。
(實際使用中,我們並不需要實現一個 Yarn Application,直接將任務提交到 MapReduce、Spark、Hive、Flink 等框架上,再由這些框架提交任務即可,這些框架也可以被視為一種特定的 Yarn Application。)
其中,Client 主要用於提交應用程式和管理應用程式,ApplicationMaster 負責實現應用程式的任務切分、排程、監控等功能。
YarnClient
;YarnClient
建立 Application
;ApplicationSubmissionContext
所需內容:
Application
。AMRMClientAsync
,用於與 ResourceManager
通訊;NMClientAsync
,用於與 NodeManager
通訊;ResourceManager
註冊,之後會向 ResourceManager
傳送心跳;ResourceManager
申請 Container
。Container
中執行 taskHadoop 自帶的 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 結構設計與實現原理》第四章