YARN提交任务的流程

YARN任务提交流程详解

详细步骤解析

第1阶段:应用提交

步骤 1 & 2: 申请新应用ID

  • 客户端(运行 hadoop jar 命令的 JVM)向 ResourceManager 的 ApplicationsManager 发起 RPC 调用,申请一个新的应用程序 ID

  • RM 返回一个唯一的 Application ID(如 application_1416425835806_0001)。

步骤 3: 上传应用资源

  • 客户端将应用程序运行所需的资源上传到 HDFS 或其他分布式存储系统中。这些资源包括:

    • 应用程序的 JAR 包

    • 配置文件

    • 依赖的库文件(如果适用)

    • 其他分片元数据等

  • 这些资源会被存储在一个由 Application ID 命名的目录下,以便后续由各个节点下载。

步骤 4: 提交应用程序

  • 客户端构造一个 ApplicationSubmissionContext 对象,其中包含了运行该应用的所有必要信息:

    • Application ID

    • 应用名称

    • 队列优先级信息

    • AM 的资源需求:运行 ApplicationMaster 所需的 Container 规格(例如:需要 2GB 内存和 1个 vCore)

    • AM 的启动命令:例如 java -cp ... org.apache.hadoop.mapreduce.v2.app.MRAppMaster

    • HDFS 上资源文件的路径

  • 客户端将此上下文对象提交给 RM。

第2阶段:ApplicationMaster 启动

步骤 5: RM 调度并启动 AM

  • RM 的 Scheduler 收到提交请求后,将其放入调度队列。

  • 当集群中有可用资源时,Scheduler 选择一个合适的 NodeManager(通常是负载较轻的节点)。

  • RM 通过 RPC 调用该 NodeManager,指令它启动一个 Container,并在该 Container 中运行客户端指定的 AM 启动命令。

步骤 6: NM 启动 AM 进程

  • 被选中的 NodeManager 从 HDFS 下载应用资源(JAR 包等)。

  • 它创建一个新的 Container 进程(一个独立的 JVM),并在其中执行 AM 的 main 方法(例如 MRAppMaster.main())。

  • 此时,ApplicationMaster 正式启动,它将成为这个应用的“总经理”,负责管理应用内部的所有任务。

第3阶段:任务执行与管理

步骤 7: AM 注册并申请任务资源

  • AM 启动后,首先向 RM 注册自己,告知 RM 它已准备就绪。

  • 接着,AM 根据应用程序的逻辑(例如,需要处理 100 个输入分片,所以需要 100 个 Map 任务)和配置,向 RM 的 Scheduler 发起一系列 资源请求

  • 每个资源请求指明了:

    • 需要的 Container 数量

    • 每个 Container 的资源规格(例如:每个 Map 任务需要 1GB 内存和 1个 vCore)

    • 数据本地性偏好(优先选择存储有输入数据的节点)

步骤 8: RM 分配任务容器

  • RM 的 Scheduler 根据集群的可用资源和调度策略(如 Capacity 或 Fair),将满足要求的 Container 分配给 AM。

  • RM 以 Container 对象的形式,将资源分配凭证(包含节点地址、资源量等)返回给 AM。

步骤 9: AM 启动任务

  • AM 收到 RM 分配的 Container 后,直接与对应的 NodeManager 通信。

  • AM 发送一个 ContainerLaunchContext 给 NM,其中包含了启动任务进程所需的所有信息(环境变量、依赖资源、启动命令等)。

  • NM 接收到命令后:

    • 从 HDFS 下载任务所需的特定资源(如序列化的 Map 函数代码)。

    • 在分配到的 Container 中启动一个子进程(例如 YarnChild 类)来执行具体的任务(如 MapTask 或 ReduceTask)。

    • 任务执行期间,会通过 AM 汇报进度和状态。


后续流程:监控与完成

  • 进度监控:客户端可以通过向 RM 或 AM 查询来获取应用程序的实时状态。

  • 任务容错:如果某个任务失败,AM 会检测到并重新向 RM 申请资源,在新的 Container 中重新运行该任务。

  • 应用完成:当应用程序的所有任务都成功完成后,AM 会向 RM 注销并自行关闭。RM 随后会清理应用的状态记录,并通知客户端应用已最终完成。

总结

YARN 的任务提交流程体现了其清晰的职责分离思想:

  1. Client:负责提交和监控。

  2. ResourceManager:作为全局的资源仲裁者,负责调度和启动 AM。

  3. ApplicationMaster:作为单个应用的管理者,负责内部任务的资源协商和执行。

  4. NodeManager:作为单节点的执行者,负责启动和管理 Container 进程。

这种架构使得 YARN 能够高效、可靠地管理成千上万个并发应用,每个应用都可以有完全不同的计算模型。

YARN (Yet Another Resource Negotiator) 是Hadoop生态系统中的资源管理系统,它负责管理和调度集群中的计算资源。在YARN提交作业通常包括以下几个步骤: 1. **创建应用程序 masters(ApplicationMaster)**: 当你在YARN客户端(如`yarn-client`)上运行一个MapReduce任务或其他分布式应用时,它首先会启动一个`ApplicationMaster`进程。这个进程代表你的应用程序,并负责管理整个作业。 2. **提交申请(Submit Application)**: 向ResourceManager(RM)提交作业描述文件(例如XML或JSON格式),包含作业的基本信息、资源配置需求等。你可以通过命令行工具或者API来提交。 ```shell $ yarn submit your-application.jar ``` 3. **资源分配(Resource Allocation)**: RM接收到作业提交后,会评估集群资源情况并分配适当数量的Container给`ApplicationMaster`。Container是YARN最小的可执行单元,包含了运行用户程序所需的环境。 4. **`ApplicationMaster`与NodeManager通信**: `ApplicationMaster`与每个NodeManager(NM)建立连接,告诉它们如何在节点上启动和监控Containers。 NM负责实际的容器管理和任务调度。 5. **Container启动与任务执行**: Container在指定的节点上启动,并按照`ApplicationMaster`的指示执行用户的程序或任务。 6. **任务进度更新和监控**: `ApplicationMaster`定期与NM交互获取任务状态更新,直到所有任务完成或者失败。 7. **结果收集与作业结束**: 一旦所有任务完成或遇到错误,`ApplicationMaster`报告最终状态,YARN系统关闭不再需要的资源,作业结束。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值