热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【深入浅出Yarn架构与实现】31YarnApplication流程与编写方法

本篇学习YarnApplication编写方法,将带你更清楚的了解一个任务是如何提交到Yarn,在运行中的交互和任务停止的过程。通过了解整个任务的运行流程,帮你更好的

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

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

一、简介

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

一)Application 的提交和启动流程

image.png

二)各服务间涉及的 protocol

image.png

二、组件实现流程

一)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 的完整内容。
image.png

三、小结

本篇带大家了解了 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 结构设计与实现原理》第四章


推荐阅读
author-avatar
jason---zhu
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有