Yarn提交Job的流程

本文详细阐述了YARN环境下MapReduce作业的提交、初始化、任务分配和运行过程,包括Client如何与ResourceManager交互,NodeManager如何执行MapTask和ReduceTask,以及任务状态更新和作业完成的机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

1.作业提交
(1)client 调用 job.waitForCompletion 方法,向整个集群提交 MapReduce作业。
(2)client 向 ResourceManager 申请一个作业 Id。
(3)ResourceManager 给 Client 返回该 job 资源的提交路径(HDFS 路径)和作业 Id,每一个作业都有一个唯一的 Id。
(4)Client 发送 jar 包、切片信息和配置文件到指定的资源提交路径。
(5)Client 提交完资源后,向 ResourceManager 申请运行 MrAppMaster,执行作业(针对该 job 的 ApplicationMaster)。
2.作业初始化
(6)当 ResourceManager 收到 Client 的请求后,将该 job 添加到容量调度器(Resouce Scheduler)中。
(7)某一个空闲的 NodeManager 领取到该 job。
(8)该 NodeManager 创建 Container,并产生 MrAppMaster。
(9)下载 Client 提交的资源到本地,根据分片信息生成 MapTask 和ReduceTask。
3.任务分配
(10)MrAppMaster 向 ResouceManager 申请运行多个 MapTask 任务资源。
( 11 ) ResourceManager 将运行 MapTask 任 务 分 配 给 空 闲 的 多 个NodeManager,NodeManager 分别领取任务并创建容器(Container)。
4.任务运行
(12)MrAppMaster 向两个接收到任务的 NodeManager 发送程序启动脚本,每个接收到任务的 NodeManager 启动 MapTask,MapTask 对数据进行处理,并分区排序。
(13)MrAppMaster 等待所有 MapTask 运行完毕后,向 ResourceManager申请容器(Container),运行 ReduceTask。
(14)程序运行完毕后,MrAppMaster 会向 ResourceManager 申请注销自己。
(15)进度和状态更新
YARN 中的任务将其进度和状态(包括 counter)返回给应用管理器, 客户端每秒(通过 mapreduce.client.progressmonitor.pollinterval 设置)向应用管理器请求进度更新, 展示给用户。可以使用 YARN WebUI 查看任务执行状态。
5.作业完成
除了向应用管理器请求作业进度外, 客户端每 5 分钟都会通过调用waitForCompletion() 来 检 查 作 业 是 否 完 成 。 时 间 间 隔 可 以 通 过mapreduce.client.completion.pollinterval 来设置。作业完成之后, 应用管理器和container 会清理工作状态。作业的信息会被作业历史服务器存储以备之后用户核查。

### Flink YARN Job 提交流程详解 #### 任务提交准备阶段 在YARN模式下,Flink作业的提交过程始于客户端。当用户通过命令行或其他方式触发作业提交时,Flink会先进行一系列准备工作,包括但不限于读取配置文件、设置默认参数等操作[^1]。 #### 创建集群环境 接着,Flink依据指定的目标执行环境(如`yarn-session`),利用SPI机制加载相应的`PipelineExecutorFactory`实例,并从中挑选出适合当前场景使用的具体工厂类——对于YARN而言即为`YarnJobClusterExecutorFactory`。这一过程中还涉及到对目标集群状态的探测与资源评估工作[^4]。 #### 启动ApplicationMaster (AM) 一旦选择了合适的executor factory之后,便会创建并启动一个名为Application Master的应用程序主控进程。该进程负责向YARN ResourceManager请求容器资源用于部署TaskManager节点,并监控整个应用生命周期内的健康状况变化情况。此外,在此期间也会初始化必要的内部服务组件以便后续通信协调之需[^3]。 #### 资源申请与分配 随着AM的成功注册登记,便进入了最关键的一步:根据预定义策略动态调整所需计算资源的数量规模并向RM发起正式索求指令;与此同时还要确保所获授权能够满足实际业务需求而不至于造成浪费闲置现象发生。值得注意的是,这里的资源不仅限于CPU核心数或内存大小这样的硬件指标,还包括网络带宽在内的多种维度考量因素。 #### TaskManager 部署 获得批准后的资源会被用来构建一个个独立的工作单元——也就是所谓的Container容器实体对象,它们承载着真正意义上的数据处理逻辑运算任务(TaskManagers),并通过RPC远程调用协议完成彼此间的消息传递交互活动。此时此刻,所有的前期筹备环节均已就绪,只待最后一步正式启动应用程序主体部分即可。 #### 应用程序运行期管理 至此为止,整个提交流程基本结束,进入到了稳定运作时期。在此期间内,除了持续不断地接收来自外部的数据流输入之外,还需要密切关注各个子系统的性能表现水平,及时响应可能出现的各种异常事件以保障整体服务质量不受影响。另外值得一提的是,针对某些特殊应用场景下的特定要求(比如调整作业并行度等),也可以借助CLI工具随时作出相应变更操作[^2]。 ```bash flink modify <job_id> -p/--parallelism p ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值