【Yarn】Yarn的基本执行流程(一)应用程序提交

2024-08-29 02:28

本文主要是介绍【Yarn】Yarn的基本执行流程(一)应用程序提交,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Yarn的基本执行流程之应用程序提交

文章目录

    • Yarn的基本执行流程之应用程序提交
    • 应用程序提交
      • 客户端提交的流程
      • 任务提交时在RM上的步骤

node manager node2
Container
resource manage node
node manager node1
Container_AM
client node
1.提交应用(submit request)
2.1分配并启动application master
2.3启动
2.2资源本地化
3.Register App Master 申请资源
4.分配资源
5.1分配启动任务
5.2资源本地化
5.3启动
node manager
application
process
resource manager
node manager
application
process
Application
Client
HDFS
  1. 客户端向RM提交应用,本质上是向RM请求启动AM
  2. RM进行分配NM,并要求NM启动AM
    1. NM收到启动AM的请求后,根据所携带的参数,下载AM所依赖的资源到本地
    2. 完成依赖资源的本地化后,NM启动AM进程
  3. AM启动后向RM进行注册,并向RM申请启动任务containr所需的资源
  4. RM根据NM的资源汇报情况,向AM回复资源(container)的分配情况,即给请求的任务container分配具体的NM。
  5. AM根据任务container分配的NM,向对应的NM发送请求,要求启动任务container
    1. NM收到启动任务container的请求后,同样根据请求参数,先完成依赖资源的本地化
    2. 然后启动任务container进程。

应用程序提交

客户端提交的流程

YarnClientImpl ClientRMService 1.获取新的Application getNewApplication() 2.生成新的Application(拿到新的ApplicationId) 3.GetNewApplicationResponse 4.提交任务,轮询直到应用处于ACCEPTED submitApplication() YarnClientImpl ClientRMService
  1. 客户端向RM申请Application的ID
  2. RM内部生成application的唯一ID
  3. 通过rpc响应将applicaiton ID告知客户端
  4. 客户端携带ID,以及container上下文,通过RPC向RM提交任务。

Yarn Client(YarnClientImpl) 与 RM 进行 RPC 通信是通过 ClientRMService 服务实现的,应用程序提交到服务端,会调用 RMAppManager 类的对应方法来处理应用程序。

任务提交时在RM上的步骤

ClientRMService RMAppManager RMAppImpl RMStateStore FairScheduler RMAppAttemptImpl ApplicationMasterService 1. 提交任务 submitApplication() 2. 创建RMAppImpl 3. 触发RMAppEvent(RMAppEventType.START) 执行RMAppNewlySavingTransition() 4. 存储NewApplication信息 storeNewApplication() 5. 触发RMAppEvent (RMAppEventType.APP_NEW_SAVED) AddApplicationToSchedulerTransition() 6. 触发AppAddedSchedulerEvent (SchedulerEventType.APP_ADDED) 7. 触发RMAppEvent (RMAppEventType.APP_ACCEPTED) StartAppAttemptTransition() 8. 创建实例 createNewAttempt() 9. 触发RMAppStartAttemptEvent (RMAppAttemptEventType.START) AttemptStartedTransition() 10. registerApplicationAttempt 11. 触发AppAttemptAddedSchedulerEvent 12. 触发RMAppAttemptEvent (SchedulerEventType.APP_ATTEMPT_ADDED) ScheduleTransition() 13. 申请分配AM需要的资源 allocate() ClientRMService RMAppManager RMAppImpl RMStateStore FairScheduler RMAppAttemptImpl ApplicationMasterService
  1. ClientRMService将请求转发给内部的AppManager。

  2. AppManager创建一个App实例对象(RMAppImpl)。

  3. 随后向调度器发送RMAppEventType.START事件,触发处理方法RMAppNewlySavingTransition()

  4. RMAppImpl收到事件后,向状态存储服务请求保存App状态,RMStateStoreState.ACTIVE–>RMStateStoreState.ACTIVE???RMAppState状态从NEW变为NEW_SAVING。

  5. 状态存储服务完成APP信息的存储后,再以RMAppEventType.APP_NEW_SAVED事件的形式告知RMAppImpl,执行方法AddApplicationToSchedulerTransition()

  6. RMAppImpl向调度器发送AppAddedSchedulerEvent的事件,由调度器进行处理,RMAppState状态从NEW_SAVING变为SUBMITTED。

  7. 调度器收到消息后,进行相应的处理动作,然后告知RMAppImpl应用被接受。

  8. RMAppImpl创建Attempt实例对象(RMAppAttemptImpl

  9. 接着向其发送RMAppAttemptEventType.START事件,将RMAppAttemptState.NEW将变成RMAppAttemptState.SUBMITTED

  10. Attempt创建后,先向ApplicationMasterService进行注册,使其在内存中有对应的记录,方便后面真正的AM进程进行注册。

  11. 然后,向调度器发送AppAttemptAddedSchedulerEvent事件。

  12. 调度器同样进行一系列的处理,包括权限判断,队列应用计数等,在内存中记录相关信息,最后通知Attempt成功添加。

  13. Attempt调用调度器的接口,申请启动AM所需的资源,同时RMAppAttemptState状态保持SUBMITTED。

此时客户端等待结束(提交成功)。等待NM RM心跳交互触发调度。RMAppState状态为ACCEPTED。RMAppAttemptState状态为SUBMITTED

当RM和NM正常启动运行时,NM会与RM进行心跳交互,来进行消息交互和处理流程。

【Yarn】Yarn的基本执行流程(二)AM Container的启动

这篇关于【Yarn】Yarn的基本执行流程(一)应用程序提交的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1116582

相关文章

解密SQL查询语句执行的过程

《解密SQL查询语句执行的过程》文章讲解了SQL语句的执行流程,涵盖解析、优化、执行三个核心阶段,并介绍执行计划查看方法EXPLAIN,同时提出性能优化技巧如合理使用索引、避免SELECT*、JOIN... 目录1. SQL语句的基本结构2. SQL语句的执行过程3. SQL语句的执行计划4. 常见的性能优

Spring Bean初始化及@PostConstruc执行顺序示例详解

《SpringBean初始化及@PostConstruc执行顺序示例详解》本文给大家介绍SpringBean初始化及@PostConstruc执行顺序,本文通过实例代码给大家介绍的非常详细,对大家的... 目录1. Bean初始化执行顺序2. 成员变量初始化顺序2.1 普通Java类(非Spring环境)(

Spring Boot 中的默认异常处理机制及执行流程

《SpringBoot中的默认异常处理机制及执行流程》SpringBoot内置BasicErrorController,自动处理异常并生成HTML/JSON响应,支持自定义错误路径、配置及扩展,如... 目录Spring Boot 异常处理机制详解默认错误页面功能自动异常转换机制错误属性配置选项默认错误处理

如何在Java Spring实现异步执行(详细篇)

《如何在JavaSpring实现异步执行(详细篇)》Spring框架通过@Async、Executor等实现异步执行,提升系统性能与响应速度,支持自定义线程池管理并发,本文给大家介绍如何在Sprin... 目录前言1. 使用 @Async 实现异步执行1.1 启用异步执行支持1.2 创建异步方法1.3 调用

Spring Boot从main方法到内嵌Tomcat的全过程(自动化流程)

《SpringBoot从main方法到内嵌Tomcat的全过程(自动化流程)》SpringBoot启动始于main方法,创建SpringApplication实例,初始化上下文,准备环境,刷新容器并... 目录1. 入口:main方法2. SpringApplication初始化2.1 构造阶段3. 运行阶

使用Go实现文件复制的完整流程

《使用Go实现文件复制的完整流程》本案例将实现一个实用的文件操作工具:将一个文件的内容完整复制到另一个文件中,这是文件处理中的常见任务,比如配置文件备份、日志迁移、用户上传文件转存等,文中通过代码示例... 目录案例说明涉及China编程知识点示例代码代码解析示例运行练习扩展小结案例说明我们将通过标准库 os

Spring Boot Maven 插件如何构建可执行 JAR 的核心配置

《SpringBootMaven插件如何构建可执行JAR的核心配置》SpringBoot核心Maven插件,用于生成可执行JAR/WAR,内置服务器简化部署,支持热部署、多环境配置及依赖管理... 目录前言一、插件的核心功能与目标1.1 插件的定位1.2 插件的 Goals(目标)1.3 插件定位1.4 核

Ubuntu 24.04启用root图形登录的操作流程

《Ubuntu24.04启用root图形登录的操作流程》Ubuntu默认禁用root账户的图形与SSH登录,这是为了安全,但在某些场景你可能需要直接用root登录GNOME桌面,本文以Ubuntu2... 目录一、前言二、准备工作三、设置 root 密码四、启用图形界面 root 登录1. 修改 GDM 配

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.