💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
*(难点内容)* <br/> :-: ![](https://img.kancloud.cn/a9/84/a9848a1f2ef5ffbe51c62338e08779e2_1108x772.png) 作业提交全过程详解 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 会清理工作状态。作业的信息会被作业历史服务器存储以备之后用户 核查。