摘要

RMContainer是RM内部维护的Container状态。事实上,在RM的调度器中,会维护着一个liveContainers列表,保存着所有存活着的Container信息。图1显示RMContainer接口,从中可以看到,RMContainer主要维护了containerID,ApplicationAttemptId,state,reserved等信息。

图1 RMContainer接口

作为RMContainer实现类,RMContainerImpl维护了一个状态机,图2是其状态机图。

图2 RMContainer状态机图

相对于RMApp和RMAppAttempt的状态机RMContainer算是比较简单的了。接下来介绍一下正常流程下RMContainer在RM的状态变迁。

RMContainerImpl的状态与转换解释

NEW,

RMContainerImpl的初始状态,当调度器初始化一个RMContainerImpl时,其状态被设置为new 。

RESERVED,

表示RMContainerImpl已经预订了某个NM的资源。

当调度器准备把某个container分配给相应的NM,当时这时NM上的资源不能满足container的需求,这时调度器则会让container预订此NM,然后创建一个RMContainerEventType.RESERVED事件,RMContainerImpl会调用ContainerReservedTransition处理这个事件,把预订信息(资源,节点,优先级)保存下来,然后设置自己的状态为RESERVED。当然有可能出现多次预订,多次预订后还是RESERVED状态。

ALLOCATED,

表示RMContainerImpl处于已经分配的状态。

同样的,无论RMContainerImpl处于NEW还是RESERVED,当调度器准备把某个container分配给相应的NM,且NM的资源能满足container的需求,则会把相应的container标记调度到NM上,并创建RMContainerEventType.START事件,RMContainerImpl会调用ContainerStartedTransition,创建RMAppAttemptEventType.CONTAINER_ALLOCATED(RMAppAttempt状态机详解中有介绍)事件,然后RMContainerImpl状态被设置为ALLOCATED。

ACQUIRED,

表示已经分配资源的Container已经被通知到AM。

AM(ApplicationMaster)通过ApplicationMasterProtocol.Allocate()向RM发起资源请求,RM会调用调度器处理AM的请求,在调度器中首先会把请求资源保存下来,然后把已经分配的资源(AM上次请求的资源已经得到了分配)返回给AM,这期间调度器会生成RMContainerEventType.ACQUIRED事件,RMContainerImpl调用AcquiredTransition处理这个事件,生成RMAppAttemptEventType.CONTAINER_ACQUIRED事件,然后RMContainerImpl状态改为ACQUIRED状态。

RUNNING,

表示RMContainerImpl已经处于运行状态。

当NM发送心跳给RM,NM会把自己节点上运行的container列表汇报给RM,RM让调度器负责处理,在NM汇报的container列表中包含刚刚运行的container,调度器处理这些container的时候会生成RMContainerEventType.LAUNCHED事件,RMContainerImpl会调用LaunchedTransition处理此事件,然后RMContainerImpl状态改为RUNNING。

COMPLETED,

表示RMContainerImpl已经运行结束。

当NM发送心跳给RM,包含了已经结束了container,这时候调度器处理这些container的时候会生成RMContainerEventType.FINISHED事件,RMContainerImpl会调用FinishedTransition处理此事件,生成RMAppAttemptEventType.CONTAINER_FINISHED事件,然后RMContainerImpl改为COMPLETED。

EXPIRED,

表示RMContainerImpl由于超时

当RMContainerImpl由ALLOCATED转换ACQUIRED期间,RMContainerImpl会调用AcquiredTransition,在AcquiredTransition中,container注册到containerAllocationExpirer,当container超过一定时间(默认600000ms)没有成为RUNNING状态,则会创建SchedulerEventType.CONTAINER_EXPIRED事件,调度器负责处理此事件,并创建RMContainerEventType.EXPIRE事件,RMContainerImpl调用FinishedTransition事件处理,状态改为EXPIRED。

RELEASED,

表示RMContainerImpl对应的资源被AM主动释放。

AM通过allocate发送心跳给RM,其中包含了需要释放的资源(通过container对应),这时调度器会创建RMContainerEventType.RELEASED事件,RMContainerImpl处理此事件,然后状态改为RELEASED。

KILLED

表示RMContainerImpl被KILL。

当container对应的Application已经结束,或者客户端或者AM发起kill ,相应的RMContainerImpl状态会转换为KILLED。

[RM 状态机详解3]RMContainer状态机详解的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. 背包【p1858】 多人背包(次优解 or 第k优解)

    题目描述--->p1858 多人背包 分析: 很明显,这题是背包问题的一种变形. 求解 次优解or第k优解. 表示刚开始有点懵,看题解也看不太懂. 又中途去补看了一下背包九讲 然后感觉有些理解, ...

随机推荐

  1. Tyvj P1016 包装问题 (DP)

    底 Background 太原诚成中学2模拟法庭竞赛 第三条道路 描写叙述 Description 有一个箱子容量为v(正整数.o≤v≤20000).同一时候有n个物品(o≤n≤30).每一个物品有一 ...

  2. CSS3新功能简要

    1.CSS3 框架:    由 CSS3,您可以创建圆角.加入到该矩形阴影,使用图片绘制边框.例如 * border-radius -border-*-radius(top,left,right,bo ...

  3. C#记录日志、获取枚举值 等通用函数列表

    )             {                 ] >=  && ipvals[] <=                  && ipval ...

  4. crawler_基础之_java.net.HttpURLConnection 访问网络资源

    java访问网络资源 由底层到封装  为  scoket==> java.net.HttpURLConnection==>HttpClient 这次阐述先 java.net.HttpURL ...

  5. mac_Alfred_快捷设置

    1.安装(不说了去 Google 吧) 2.基础快捷键:option+space 3.打开应用程序:Alfred 几乎是一切程序的入口,你再也不需要找妈妈要开始菜单了.用快捷键呼出Alfred,输入任 ...

  6. myql_链接丢失异常_mybaits _等框架_报错_The last packet successfully

    mysql 8小时问题的解决方法 转发: 别看是英文 ,写的很好 ,才转 Use Hibernate + MYSQL database development, link timeout proble ...

  7. Vs2012 构建配置 Lua5.2.3

    随着手机游戏client程序员,当然,遇到这样的问题,该游戏已经提交出版.但第二天一早,发现有一个逻辑游戏BUG.怎么办,不严重,在一般情况下,非强制性的更新.假设一个严重BUG,他们将不得不强制更新 ...

  8. youcompleteme install and configure

    三四年前我配置vim插件的时候还都是手动配置,还没有听说vundle这个vim插件管理工具,现在配置vim插件的时候基本上都用vundle,这个插件也确实是方便快捷,只不过这东西时能话了就不清楚里面的 ...

  9. HDU 4052 Adding New Machine(矩形面积并)

    Adding New Machine Problem Description Incredible Crazily Progressing Company (ICPC) suffered a lot ...

  10. IOS开发-Swift新语言初见

    Safe Swift pairs increased type safety with type inference, restricts direct access to pointers, and ...