MapReduce源码分析之作业Job状态机解析(一)简介与正常流程浅析

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介:         作业Job状态机维护了MapReduce作业的整个生命周期,即从提交到运行结束的整个过程。Job状态机被封装在JobImpl中,其主要包括14种状态和19种导致状态发生的事件。        作业Job的全部状态维护在类JobStateInternal中,如下所示:publ...

        作业Job状态机维护了MapReduce作业的整个生命周期,即从提交到运行结束的整个过程。Job状态机被封装在JobImpl中,其主要包括14种状态和19种导致状态发生的事件。

        作业Job的全部状态维护在类JobStateInternal中,如下所示:

public enum JobStateInternal {
	
  // 作业新建状态,当作业Job被新创建时所处的状态
  NEW,
  
  // 作业启动状态,此时运行时间已被设置,任务处于开始被调度阶段
  SETUP,
  
  // 作业已初始化状态,此时作业中的Map、Reduce任务均已被创建
  INITED,
  
  // 作业正在运行状态,此时作业会为Map、Reduce任务申请资源并进行资源分配,任务被启动,直至全部任务运行完成
  RUNNING,
  
  // 作业等待提交最终结果的状态,此时作业运行过程中产生的中间结果已被放置到临时目录中,当全部任务运行完成后,进行最终结果提交,即将临时目录数据提交到最终目录
  COMMITTING,
  
  // 作业运行成功状态,此时作业的运行结果被成功提交至最终目录,作业运行成功
  SUCCEEDED,
  
  // 等待正在运行的任务被杀死的状态
  FAIL_WAIT,
  
  // 作业运行失败将被注销时的状态
  FAIL_ABORT,
  
  // 作业运行失败所处的状态
  FAILED,
  
  // 作业等待被杀死时所处的状态
  KILL_WAIT,
  
  // 作业被注销时所处的状态
  KILL_ABORT,
  
  // 作业被杀死后所处的状态
  KILLED,
  
  // 作业运行过程中出错后所处的状态
  ERROR,
  
  // 作业重启所处状态
  REBOOT
}

        关于作业状态的详细信息,我们稍后再做介绍,这里,需要特别说明的是,前6种状态是任何一个MapReduce作业成功运行完成都必须经历的状态,而正常情况下一个作业生命周期的变化,如下图所示:


        1、NEW——>INITED:由新建NEW状态到已初始化INITED状态

              MRAppMaster中作业Job被创建时处于NEW状态,然后MRAppMaster会接着生成一个JOB_INIT事件,交给作业事件分发器jobEventDispatcher处理,如上图所示,实际上就是通过JobImpl中的InitTransition处理,此时作业会由NEW状态转换成INITED状态,当然如果初始化失败作业还是会停留在新建NEW状态;

        2、INITED——>SETUP:由已初始化INITED状态到启动SETUP状态

              MRAppMaster中等到作业初始化后,即为INITED状态时,MRAppMaster会生成一个JobStartEvent事件,其事件类型为JOB_START,交给事件分发器dispatcher(也就是作业事件分发器jobEventDispatcher)处理,实际上也是通过JobImpl中的StartTransition处理,在其transition()方法内处理完毕后,作业会由已初始化INITED状态转换成启动SETUP状态;

        3、SETUP——>RUNNING:由启动SETUP状态到作业正在运行RUNNING状态

             在上述StartTransition的transition()方法最后,会生成一个CommitterJobSetupEvent事件并提交给事件分发器dispatcher处理,而CommitterJobSetupEvent事件的类型是JOB_SETUP,其会被交由CommitterEventHandler组件处理,在其内部EventProcessor的handleJobSetup()方法中,针对JOB_SETUP事件处理的方式就是提交一个类型为JOB_SETUP_COMPLETED的JobSetupCompletedEvent事件,也就是上图的JOB_SETUP_COMPLETED,然后就会被交给SetupCompletedTransition处理,其内部会调度Task进行资源申请和分配,并启动相关任务运行,此时Job就会由由启动SETUP状态转换到作业正在运行RUNNING状态;

        4、RUNNING——>RUNNING:由作业正在运行RUNNING状态到作业正在运行RUNNING状态

              4.1、作业任务运行尝试完成事件JOB_TASK_ATTEMPT_COMPLETED不会导致作业的状态改变;

              4.2、作业任务运行完成事件JOB_TASK_COMPLETED,则会在TaskCompletedTransition的transition()方法中,根据作业中任务的整体完成情况,确定作业状态的过渡,比如:

                        4.2.1、如果作业中任务失败数目,不管是Map还是Reduce任务,超过一定的比例,而作业任务均已完成(或成功或失败),则会将作业状态过渡到FAIL_ABORT状态,并提交CommitterJobAbortEvent事件处理,否则如果任务还尚未全部完成,则会过渡到FAIL_WAIT状态;

                        4.2.2、如果作业完成数目满足要求,则会将作业状态过渡到COMMITTING状态,否则还是停留在RUNNING状态,等待其他任务完成时再判断;

              4.3、作业运行完成事件JOB_COMPLETED也是会通过类似4.2对作业中整体情况进行判断,确定作业运行状态是应该停留在RUNNING状态,还是应该过渡到COMMITTING状态,这个是在JobNoTasksCompletedTransition的transition()方法中进行判断的。

        5、RUNNING——>COMMITTING:由作业正在运行RUNNING状态到作业等待提交最终结果COMMITTING状态

              由JOB_TASK_COMPLETED和JOB_COMPLETED事件触发,具体参加上述4的分析,这里不再赘述;

        6、COMMITTING——>SUCCEEDED:由作业等待提交最终结果COMMITTING状态到作业成功状态

              由JOB_COMMIT_COMPLETED事件触发,并由CommitSucceededTransition处理,详情以后再做分析。


        关于作业状态机的全部过渡流程,及每两个状态过渡的细节,请关注后续文章!

相关文章
|
25天前
|
监控 安全 开发工具
鸿蒙HarmonyOS应用开发 | HarmonyOS Next-从应用开发到上架全流程解析
HarmonyOS Next是华为推出的最新版本鸿蒙操作系统,强调多设备协同和分布式技术,提供丰富的开发工具和API接口。本文详细解析了从应用开发到上架的全流程,包括环境搭建、应用设计与开发、多设备适配、测试调试、应用上架及推广等环节,并介绍了鸿蒙原生应用开发者激励计划,帮助开发者更好地融入鸿蒙生态。通过DevEco Studio集成开发环境和华为提供的多种支持工具,开发者可以轻松创建并发布高质量的鸿蒙应用,享受技术和市场推广的双重支持。
277 11
|
28天前
|
域名解析 弹性计算 安全
阿里云服务器租用、注册域名、备案及域名解析完整流程参考(图文教程)
对于很多初次建站的用户来说,选购云服务器和注册应及备案和域名解析步骤必须了解的,目前轻量云服务器2核2G68元一年,2核4G4M服务器298元一年,域名注册方面,阿里云推出域名1元购买活动,新用户注册com和cn域名2年首年仅需0元,xyz和top等域名首年仅需1元。对于建站的用户来说,购买完云服务器并注册好域名之后,下一步还需要操作备案和域名绑定。本文为大家展示阿里云服务器的购买流程,域名注册、绑定以及备案的完整流程,全文以图文教程形式为大家展示具体细节及注意事项,以供新手用户参考。
|
2月前
|
缓存 监控 Java
Java线程池提交任务流程底层源码与源码解析
【11月更文挑战第30天】嘿,各位技术爱好者们,今天咱们来聊聊Java线程池提交任务的底层源码与源码解析。作为一个资深的Java开发者,我相信你一定对线程池并不陌生。线程池作为并发编程中的一大利器,其重要性不言而喻。今天,我将以对话的方式,带你一步步深入线程池的奥秘,从概述到功能点,再到背景和业务点,最后到底层原理和示例,让你对线程池有一个全新的认识。
61 12
|
3月前
|
JavaScript 前端开发 开发者
Vue执行流程及渲染解析
【10月更文挑战第2天】
119 58
|
3月前
|
JavaScript 前端开发 UED
Vue执行流程及渲染解析
【10月更文挑战第5天】
|
3月前
|
域名解析 网络协议 安全
DNS查询工具简介
DNS查询工具简介
140 4
|
3月前
|
存储 搜索推荐 数据库
运用LangChain赋能企业规章制度制定:深入解析Retrieval-Augmented Generation(RAG)技术如何革新内部管理文件起草流程,实现高效合规与个性化定制的完美结合——实战指南与代码示例全面呈现
【10月更文挑战第3天】构建公司规章制度时,需融合业务实际与管理理论,制定合规且促发展的规则体系。尤其在数字化转型背景下,利用LangChain框架中的RAG技术,可提升规章制定效率与质量。通过Chroma向量数据库存储规章制度文本,并使用OpenAI Embeddings处理文本向量化,将现有文档转换后插入数据库。基于此,构建RAG生成器,根据输入问题检索信息并生成规章制度草案,加快更新速度并确保内容准确,灵活应对法律与业务变化,提高管理效率。此方法结合了先进的人工智能技术,展现了未来规章制度制定的新方向。
58 3
|
3月前
|
存储 缓存 边缘计算
揭秘直播带货背后的黑科技:播放流程全解析!
大家好,我是小米,今天聊聊社区直播带货的技术细节。我们将探讨直播播放流程中的关键技术,包括 HTTP DASH 协议、POP(Point of Presence)缓存和一致性哈希算法等。通过这些技术,直播流能根据网络状况动态调整清晰度,保证流畅体验。POP 和 DC 的多层次缓存设计减少了延迟,提升了观看效果。无论是技术人员还是直播运营者,都能从中受益。希望通过本文,你能更好地理解直播背后的技术原理。
69 3
|
4月前
|
XML 监控 Java
Spring Cloud全解析:熔断之Hystrix简介
Hystrix 是由 Netflix 开源的延迟和容错库,用于提高分布式系统的弹性。它通过断路器模式、资源隔离、服务降级及限流等机制防止服务雪崩。Hystrix 基于命令模式,通过 `HystrixCommand` 封装对外部依赖的调用逻辑。断路器能在依赖服务故障时快速返回备选响应,避免长时间等待。此外,Hystrix 还提供了监控功能,能够实时监控运行指标和配置变化。依赖管理方面,可通过 `@EnableHystrix` 启用 Hystrix 支持,并配置全局或局部的降级策略。结合 Feign 可实现客户端的服务降级。
233 23
|
3月前
|
程序员 C++
C++编程:While与For循环的流程控制全解析
总结而言,`while`循环和 `for`循环各有千秋,它们在C++编程中扮演着重要的角色。选择哪一种循环结构应根据具体的应用场景、循环逻辑的复杂性以及个人的编程风格偏好来决定。理解这些循环结构的内在机制和它们之间的差异,对于编写高效、易于维护的代码至关重要。
78 1

推荐镜像

更多