摘要

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. bigdata_批量机器执行通用脚本

    经常有这样的场景,需要批量验证一些配置或者机器,执行一些命令.例如  echo $PATH  等等 这里分享一个批量执行脚本 脚本名称 deployCommnd.sh 运行demo : sh depl ...

  2. linux runtime pm在深入了解的机制

    一:runtime机构简介 何为runtime机制?也就是系统在非睡眠状态,设备在空暇时能够进入runtime suspend状态同一时候不依赖系统wake_lock机制.非空暇时运行runtime  ...

  3. RHEL5 X86-64上安装Oracle 11gR2演示样例与总结

    进入Oracle DBA行业也有好几年了,可是说到安装Oracle的经验,我还真不是特别多,印象中刚開始每次安装都有点磕磕碰碰,随着接触Oracle的时间越来越长,各方面的原理.机制也都有一定的了解后 ...

  4. SignalR的实时高频通讯

    SignalR的实时高频通讯 第五章SignalR的实时高频通讯 概述:本例子演示了如果创建一个对象与其他浏览器共享实时状态的应用程序.我们要创建的应用程序为“MoveShape”,该MoveShap ...

  5. 数据持久化之SP的优化—送工具类

    第一点:sp存储的是键值对 getSharedPreferences 第一个參数是你保存文件的名字,第个是保存的模式一般能够默觉得0 先看普通 使用SP 存储String类型字符串吧 SharedPr ...

  6. SQL Server 板机

    触发器是一种特殊类型的存储过程.们介绍的存储过程. 触发器主要是通过事件进行触发被自己主动调用运行的. 而存储过程能够通过存储过程的名称被调用. Ø 什么是触发器 触发器对表进行插入.更新.删除的时候 ...

  7. java 集装箱 arraylist 用法

    1. ArrayList概述: ArrayList 是一个数组队列.相当于 动态数组. 与Java中的数组相比.它的容量能动态增长.它继承于AbstractList.实现了List, RandomAc ...

  8. js 正则之检测素数

    原文:js 正则之检测素数 相信很多人应该看过这篇文章,我第一次看到的时候是11年的样子,那时候学vbs的时候看过这个问题.原文<检查素数的正则表达式>,在文章里已经解释了他是怎么判断的, ...

  9. Apache无法启动解决 the requested operation has failed

    Apache不能启动解决办法 原因一:80端口占用例如IIS,另外就是迅雷. 原因二:软件冲突装了某些软件会使apache无法启动如Dr.com 你打开网络连接->TcpIp属性->高级- ...

  10. 收集整理的非常有用的PHP函数

    原文:收集整理的非常有用的PHP函数 项目中经常会需要一些让人头疼的函数,作为开发者应该整理一个自己的函数库,在需要之时复制过来即可.本文作者收集整理数十个PHP项目中常用的函数,保证能正常运行,你只 ...