【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

相关文章

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

SpringBoot整合MybatisPlus的基本应用指南

《SpringBoot整合MybatisPlus的基本应用指南》MyBatis-Plus,简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,下面小编就来和大家介绍一下... 目录一、MyBATisPlus简介二、SpringBoot整合MybatisPlus1、创建数据库和

Spring AI ectorStore的使用流程

《SpringAIectorStore的使用流程》SpringAI中的VectorStore是一种用于存储和检索高维向量数据的数据库或存储解决方案,它在AI应用中发挥着至关重要的作用,本文给大家介... 目录一、VectorStore的基本概念二、VectorStore的核心接口三、VectorStore的

python之流程控制语句match-case详解

《python之流程控制语句match-case详解》:本文主要介绍python之流程控制语句match-case使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录match-case 语法详解与实战一、基础值匹配(类似 switch-case)二、数据结构解构匹

在VSCode中本地运行DeepSeek的流程步骤

《在VSCode中本地运行DeepSeek的流程步骤》本文详细介绍了如何在本地VSCode中安装和配置Ollama和CodeGPT,以使用DeepSeek进行AI编码辅助,无需依赖云服务,需要的朋友可... 目录步骤 1:在 VSCode 中安装 Ollama 和 CodeGPT安装Ollama下载Olla

Git如何修改已提交人的用户名和邮箱

《Git如何修改已提交人的用户名和邮箱》文章介绍了如何修改Git已提交人的用户名和邮箱,包括注意事项和具体步骤,确保操作正确无误... 目录git修改已提交人的用户名和邮箱前言第一步第二步总结git修改已提交人的用户名和邮箱前言需注意以下两点内容:需要在顶层目录下(php就是 .git 文件夹所在的目

linux环境openssl、openssh升级流程

《linux环境openssl、openssh升级流程》该文章详细介绍了在Ubuntu22.04系统上升级OpenSSL和OpenSSH的方法,首先,升级OpenSSL的步骤包括下载最新版本、安装编译... 目录一.升级openssl1.官网下载最新版openssl2.安装编译环境3.下载后解压安装4.备份

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

grom设置全局日志实现执行并打印sql语句

《grom设置全局日志实现执行并打印sql语句》本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些... 目录gorm中的自定义日志gorm中日志的其他操作日志级别Debug自定义 Loggergorm中的

javaScript在表单提交时获取表单数据的示例代码

《javaScript在表单提交时获取表单数据的示例代码》本文介绍了五种在JavaScript中获取表单数据的方法:使用FormData对象、手动提取表单数据、使用querySelector获取单个字... 方法 1:使用 FormData 对象FormData 是一个方便的内置对象,用于获取表单中的键值