【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

相关文章

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

在MySQL执行UPDATE语句时遇到的错误1175的解决方案

《在MySQL执行UPDATE语句时遇到的错误1175的解决方案》MySQL安全更新模式(SafeUpdateMode)限制了UPDATE和DELETE操作,要求使用WHERE子句时必须基于主键或索引... mysql 中遇到的 Error Code: 1175 是由于启用了 安全更新模式(Safe Upd

MyBatis-Flex BaseMapper的接口基本用法小结

《MyBatis-FlexBaseMapper的接口基本用法小结》本文主要介绍了MyBatis-FlexBaseMapper的接口基本用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具... 目录MyBATis-Flex简单介绍特性基础方法INSERT① insert② insertSelec

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

springboot启动流程过程

《springboot启动流程过程》SpringBoot简化了Spring框架的使用,通过创建`SpringApplication`对象,判断应用类型并设置初始化器和监听器,在`run`方法中,读取配... 目录springboot启动流程springboot程序启动入口1.创建SpringApplicat

通过prometheus监控Tomcat运行状态的操作流程

《通过prometheus监控Tomcat运行状态的操作流程》文章介绍了如何安装和配置Tomcat,并使用Prometheus和TomcatExporter来监控Tomcat的运行状态,文章详细讲解了... 目录Tomcat安装配置以及prometheus监控Tomcat一. 安装并配置tomcat1、安装

MySQL的cpu使用率100%的问题排查流程

《MySQL的cpu使用率100%的问题排查流程》线上mysql服务器经常性出现cpu使用率100%的告警,因此本文整理一下排查该问题的常规流程,文中通过代码示例讲解的非常详细,对大家的学习或工作有一... 目录1. 确认CPU占用来源2. 实时分析mysql活动3. 分析慢查询与执行计划4. 检查索引与表

Redis 多规则限流和防重复提交方案实现小结

《Redis多规则限流和防重复提交方案实现小结》本文主要介绍了Redis多规则限流和防重复提交方案实现小结,包括使用String结构和Zset结构来记录用户IP的访问次数,具有一定的参考价值,感兴趣... 目录一:使用 String 结构记录固定时间段内某用户 IP 访问某接口的次数二:使用 Zset 进行