【深入浅出 Yarn 架构与实现】3-1 Yarn Application 流程与编写方法

时间:2022-11-14 19:08:03

本篇学习 Yarn Application 编写方法,将带你更清楚的了解一个任务是如何提交到 Yarn ,在运行中的交互和任务停止的过程。通过了解整个任务的运行流程,帮你更好的理解 Yarn 运作方式,出现问题时能更好的定位。

一、简介

本篇将对 Yarn Application 编写流程进行介绍。将一个新的应用程序运行到 Yarn 上,主要编写两个组件 ClientApplicationMaster,组件的具体实现案例将在后两篇文章中介绍。
(实际使用中,我们并不需要实现一个 Yarn Application,直接将任务提交到 MapReduce、Spark、Hive、Flink 等框架上,再由这些框架提交任务即可,这些框架也可以被视为一种特定的 Yarn Application。)
其中,Client 主要用于提交应用程序和管理应用程序,ApplicationMaster 负责实现应用程序的任务切分、调度、监控等功能。

一)Application 的提交和启动流程

【深入浅出 Yarn 架构与实现】3-1 Yarn Application 流程与编写方法

二)各服务间涉及的 protocol

【深入浅出 Yarn 架构与实现】3-1 Yarn Application 流程与编写方法

二、组件实现流程

一)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 架构与实现】3-1 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 结构设计与实现原理》第四章