摘要

本文详细描述RMAppAttempt状态机内的状态与其转换关系,分析的代码基于Apache社区Hadoop最新的2.3.0版本。

RMAppAttempt状态机

在RM中,一个RMApp可能对于一到多个RMAppAttempt,即假如RMApp的第一个RMAppAttempt失败后,RM会根据配置启动新的RMAppAttempt。

RMAppAttempt内部维护了进度,运行的机器信息,起始时间,URL等信息。其中最复杂的信息是RMAppAttempt的状态机信息。

  private static final StateMachineFactory<RMAppAttemptImpl,
RMAppAttemptState,
RMAppAttemptEventType,
RMAppAttemptEvent>
stateMachineFactory = new StateMachineFactory<RMAppAttemptImpl,
RMAppAttemptState,
RMAppAttemptEventType,
RMAppAttemptEvent>(RMAppAttemptState.NEW) // Transitions from NEW State
.addTransition(RMAppAttemptState.NEW, RMAppAttemptState.SUBMITTED,
RMAppAttemptEventType.START, new AttemptStartedTransition())

图1 RMAppAttempt状态机

RMAppAttempt状态与转换解释

这里讨论的重点在于用户提交App后RM正常的处理流程,时先不讨论RECOVERY部分,因为其状态转换原理是相同的,可以自行查看代码分析。

NEW,

和RMApp的状态机一样,RMAppAttempt的初始状态也是NEW。

在RMApp由NEW_SAVING转换为RMAppState.SUBMITTED时,RMApp会创建RMAppAttemptImpl对象,这时RMAppAttempt状态为NEW。

SUBMITTED,

表示RMAppAttempt已经创建,并准备给调度器。

在RMApp创建RMAppAttempt时会创建一个RMAppAttemptEventType.START事件,交给处理器,RMAppAttempt在NEW的状态下遇到RMAppAttemptEventType.START事件时,转化为SUBMITTED状态,并调用AttemptStartedTransition。

SCHEDULED,

表示该RMAppAttempt已经交给调度器,做好了调度的准备。

AttemptStartedTransition中,RMAppAttempt会创建AppAttemptAddedSchedulerEvent事件,该事件最终会传递给调度器;调度器把相应的RMAppAttempt放到待调度的组中,然后创建RMAppAttemptEventType.APP_ACCEPTED事件,这个事件会使RMAppAttempt调用ScheduleTransition,在ScheduleTransition中,根据该App是否为UnmanagedAM(AM是否被RM管理,UnmanagedAM由客户端负责启动,然后向RM注册;managedAM由RM命令NM启动,并负责该AM的生命周期)决定返回LAUNCHED_UNMANAGED_SAVING或SCHEDULED状态,如果是managedAM(大多数情况)返回SCHEDULED,否则返回LAUNCHED_UNMANAGED_SAVING状态。

ALLOCATED_SAVING,

表示正在保存RMAppAttemptImpl信息到RMStateStore中。

当某个NM(NodeManager)发送心跳到RM,RM会给改RM分配相应的container,这时候会创建RMContainerEventType.START事件,在RMContainerImpl状态机(后续将会介绍)遇到这个事件时会调用ContainerStartedTransition,在其转换方法中会创建RMAppAttemptEventType.CONTAINER_ALLOCATED事件,而RMAppAttemptImpl(SCHEDULED状态)遇到SCHEDULED事件后会调用AMContainerAllocatedTransition,这时会把RMAppAttemptImpl信息存储到制定的存储器中。RMAppAttempt状态转换为ALLOCATED_SAVING。

ALLOCATED,

表示RMAppAttempt已经完成调度到某台NM上的工作。

当RMStateStore完成RMAppAttemptImpl信息的存储后,会创建RMAppAttemptEventType.ATTEMPT_NEW_SAVED事件,RMAppAttemptImpl遇到此事件后会调用AttemptStoredTransition,检查存储是否出错,并创建AMLauncherEventType.LAUNCH事件,然后把状态转换为ALLOCATED。

LAUNCHED,

表示RM已经发送命令让某台NM启动相应的AM。

在AMLauncher中,处理AMLauncherEventType.LAUNCH事件,实际的方法lanch()方法中,AM首先连接上相应的NM,然后通过相应的协议让NM启动AM。完成后生成RMAppAttemptEventType.LAUNCHED事件。RMAppAttemptImpl处理此事件,调用AMLaunchedTransition,然后转换状态为LAUNCHED。

RUNNING,

AM成功向RM注册后的状态。

AM启动后会向RM注册,注册的时候RM会生成RMAppAttemptEventType.REGISTERED事件,RMAppAttemptImpl处理这个事件,调用AMRegisteredTransition,获取AM的host,port,URL等信息,创建RMAppEventType.ATTEMPT_REGISTERED事件,然后把RMAppAttemptImpl状态转换为RUNNING。

LAUNCHED_UNMANAGED_SAVING,

Unmanaged AM正在保存状态,见SCHEDULED状态。

FINAL_SAVING,

表示正在保存RMAppAttemptImpl的最终信息。

这个状态类似于RMApp的FINAL_SAVING状态,即为了保证存RMAppAttemptImpl信息,在转换为FINISHED,FAILED,FINISHING,KILLED前增加这个状态,在转换为FINAL_SAVING前,需要保存RMAppAttemptImpl的 targetedFinalState状态,在RMStateStore完成相应存储后根据targetedFinalState转化为后续的状态。

FINISHING,

表示RMAppAttemptImpl正在结束。

遇到RMAppAttemptEventType.EXPIRE或AM的RMAppAttemptEventType.CONTAINER_FINISHED事件时,RMAppAttemptImpl状态转换为FINISHED

FINISHED,

表示RMAppAttemptImpl已经结束。

只有AM主动汇报自己结束的RMAppAttempt才会标识为FINISHED状态。

FAILED,

表示RMAppAttemptImpl已经失败。

失败的情况比较多,这里不再一一介绍。

KILLED,

表示RMAppAttemptImpl已经被kill。

客户端发起KILL会导致RMAppAttemptImpl被KILL。

转载请注明出处:http://www.cnblogs.com/shenh062326/p/3587108.html

[RM 状态机详解2] RMAppAttempt状态机详解的更多相关文章

  1. [RM 状态机详解4] RMNode状态机详解

    摘要 RMNode状态机是ResourceManager的四个状态机(RMApp,RMAppAttempt,RMContainer,RMNode)中最简单的一个,状态机如图1所示.RMNode是Res ...

  2. [RM 状态机详解3]RMContainer状态机详解

    摘要 RMContainer是RM内部维护的Container状态.事实上,在RM的调度器中,会维护着一个liveContainers列表,保存着所有存活着的Container信息.图1显示RMCon ...

  3. [RM 状态机详解1] RMApp状态机详解

    概述 Apache Hadoop 2.0在Hadoop 1.0基础上做了许多的重构工作,代码上的重构最大的变化在于引入状态机处理各个角色的状态与变迁,使用状态机是得代码结构更加清晰,方便异步处理各种操 ...

  4. ViewPager 详解(二)---详解四大函数

    前言:上篇中我们讲解了如何快速实现了一个滑动页面,但问题在于,PageAdapter必须要重写的四个函数,它们都各有什么意义,在上节的函数内部为什么要这么实现,下面我们就结合Android的API说明 ...

  5. IE8“开发人员工具”使用详解上(各级菜单详解)

    来源: http://www.cnblogs.com/JustinYoung/archive/2009/03/24/kaifarenyuangongju.html IE8“开发人员工具”使用详解上(各 ...

  6. iOS 开发之照片框架详解之二 —— PhotoKit 详解(下)

    本文链接:http://kayosite.com/ios-development-and-detail-of-photo-framework-part-three.html 这里接着前文<iOS ...

  7. iOS 开发之照片框架详解之二 —— PhotoKit 详解(上)

    转载自:http://kayosite.com/ios-development-and-detail-of-photo-framework-part-two.html 一. 概况 本文接着 iOS 开 ...

  8. linux驱动由浅入深系列:高通sensor架构实例分析之三(adsp上报数据详解、校准流程详解)【转】

    本文转载自:https://blog.csdn.net/radianceblau/article/details/76180915 本系列导航: linux驱动由浅入深系列:高通sensor架构实例分 ...

  9. Linux的压缩解压命令快速上手——解压篇

    在Linux系统中,压缩文件通常是先将若干文件(包括目录)打包成一个tar文件,然后再调用压缩程序将tar文件压缩成相应的压缩包,这也就是为什么Linux系的压缩包的后缀通常都是像tar.gz,tar ...

随机推荐

  1. xcode于Archive当产生安装包遇到ld: library not found for -lPods

    此问题是由能力很困扰,通常有以下几个方案 进target的 Build Phases- Link binary Library.到场libPods.a,假设是红.删,能够 其他解决方案 Build S ...

  2. HDOJ 5017 Ellipsoid

    第一次尝试模拟退火..... Ellipsoid Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java ...

  3. Util

    Util最新代码更新说明   离上一篇又过去了一个月,时间比较紧,后续估计会更紧,所以这次将放出更多公共操作类及配套的CodeSmith模板,本篇将简要介绍新放出的重要功能,供有兴趣的同学参考. 重要 ...

  4. LeetCode_算法及数据结构覆盖统计

    [输入]共计151道题的算法&数据结构基础数据 (见附录A) [输出-算法]其中有算法记录的共计 97道 ,统计后 结果如下  top3(递归,动态规划,回溯) 递归 动态规划 回溯 BFS ...

  5. ASP.NET 5 Web 项目

    在Mac OS X Yosemite 10.10.3 中搭建第一个 ASP.NET 5 Web 项目 终于有时间在 Mac 上安装一下 ASP.NET 5,网上有许多教程,但是多数的时间比较早了,版本 ...

  6. 深入struts2(三)---工作机制和运行流程图

    1     工作原理 1.1     体系架构 图2.1 struts2.0体系架构图 1.2     工作机制 针对上节体系架构图,以下分步说明运行流程 Ø  client初始化一个指向Servle ...

  7. MVC自定义过滤器,自定义Area过滤器,自定义Controller,Action甚至是ViewData过滤器

    实现MVC自定义过滤器,自定义Area过滤器,自定义Controller,Action甚至是ViewData过滤器 MVC开发中几种以AOP方式实现的Filters是非常好用的,默认情况下,我们通过A ...

  8. POJ 1565 Skew Binary(简单的问题)

    [简要题意]:第二个是数字系统的代表性的定义.而给了你这个号码系统提示的形式和十进制转换之间的关系.现在给你一些这样的系统.让你把它变成2二进制输出. [分析]:当中 base[k]  =  2^(k ...

  9. MVC模型部分验证

    ASP.NET MVC模型部分验证 在很多情况下,我们为了代码的复用可能会存在ViewModel共用的情形.比方说,web应用中常常会遇到的一个需求就是用户找回密码的功能.用户首先要验证通过验证邮箱( ...

  10. CloudNotes

    CloudNotes 今天,我发布了CloudNotes的一个更新版本:1.0.5484.36793.这个版本与1.0.5472.20097不同的是,它拥有增强的笔记列表,与之前单调的列表系统相比,新 ...