摘要

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. hdu To and Fro

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1200 代码: #include <stdio.h> #include <string ...

  2. 【高德地图API】如何获得行政区域?如何制作行政规划图?

    原文:[高德地图API]如何获得行政区域?如何制作行政规划图? 什么是行政规划图?如何获得每个行政区域的边界轮廓图?举例:重庆市 江北区.如图: 官方类参考:http://developer.amap ...

  3. 【百度地图API】当地址解析失败时,如何调用search方法查找地址

    原文:[百度地图API]当地址解析失败时,如何调用search方法查找地址 有个朋友问我,当地址解析失败时,应该如何处理呢?比如,他想搜索“南宁市青秀区”. --------------------- ...

  4. 了解了解你自己的话zookeeper(从那时起,纠正了一些说法在线)

    1,先看看官方的定义吧: ZooKeeper is a distributed, open-source coordination service for distributed applicatio ...

  5. 用了TextMate才知道什么叫神级Editor

    用了TextMate才知道什么叫神级Editor 一直用Eclipse作为开发Ruby和Java项目的IDE,但是太耗内存,再开个Firefox和虚拟机就可以直接将MBP弄残了..看到大家都对Mac下 ...

  6. Host和Server的开发

    Host和Server的开发 对于开发人员来说,代码就是最好的文档,如上一篇博文所说,下面我们就会基于Kanata项目的一些具体调用代码,来进一步深入理解OWIN的实现和作用. 今天我们先针对Host ...

  7. spark in eclipse---Spark学习笔记3

    想要调试源码,还是要放到eclipse里面去.先生成eclipse项目,下载依赖包 victor@victor-ubuntu:~/software/incubator-spark-0.8.1-incu ...

  8. exec 重定向

    文件中常用的重定向: command > filename把把标准输出重定向到一个新文件中command >> filename 把把标准输出重定向到一个文件中 (追加)comman ...

  9. Fckeditor用法

    试Fckeditor版本号:2.6.3 眼下Fckeditor仅仅能用于基于ie内核的浏览器,假设要使用于chrome等浏览器,请使用ckeditor. 详细用法: 1.将解压后的fckeditor整 ...

  10. perconaXTRADB Cluster在Redhat Linux上的安装

    installing-perconaXTRADB Cluster 5.6 For Redhat 6.4 一.server版本号查看 Root# cat /etc/redhat-release Red ...