摘要

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. 经Apache将tomcat转用80port这两个域名

    一般用tomcat通告Java web项目采用www.xxx.com:8080/appname/xxxservlet要访问一个简单的服务,这会'暴漏'应用程序名称(当然,你也可以摆脱),它看起来并不规 ...

  2. 后台自动启动appium

    首先说明,本人用的exe方式安装的appium. 新建一个.vbs文件,写入以下脚本,记得把D盘换成你自己的盘符. 1.后面taskkill好像没有实际作用..加就加了吧. Set ws = Crea ...

  3. LeetCode——Flatten Binary Tree to Linked List

    Given a binary tree, flatten it to a linked list in-place. For example, Given 1 / \ 2 5 / \ \ 3 4 6 ...

  4. 拷贝构造函数,深拷贝,大约delete和default相关业务,explicit,给定初始类,构造函数和析构函数,成员函数和内联函数,关于记忆储存,默认参数,静态功能和正常功能,const功能,朋友

     1.拷贝构造 //拷贝构造的规则,有两种方式实现初始化. //1.一个是通过在后面:a(x),b(y)的方式实现初始化. //2.另外一种初始化的方式是直接在构造方法里面实现初始化. 案比例如以 ...

  5. windows7股票的,win8残疾人,安装Han澳大利亚sinoxn个时间,sinox它支持大多数windows软体

    腾讯科技: 正如先前所宣布,微软,10一个月31迄今,Windows 7家庭基础版.家庭高级版和旗舰版盒装版本将不再销售.而微软是不会再OEM制造商授予许可数量的三个版本. windows7股票的.由 ...

  6. 自由软件之父、Google+设计者、Java之父、Linux之父、万维网之父、Vi编辑器之父、苹果Lisa电脑界面设计、微软首席软件架构师

    自由软件之父.Google+设计者.Java之父.Linux之父.万维网之父.Vi编辑器之父.苹果Lisa电脑界面设计.微软首席软件架构师 理查德·斯托曼(Richard Stallman) 理查德· ...

  7. TDD(测试驱动开发)学习一:初识TDD

    首先说一下名词解释,TDD,英文名称Test-Driven Development,中文名称测试驱动开发,简单的断下句“测试/驱动/开发”,简单的理解一下,就是测试驱动着开发,大白话就是说用一边测试一 ...

  8. STL在迭代的过程,删除指定的元素

    直接在Code.在 Picture #include <iostream> #include <list> using namespace std; // STL在迭代的过程中 ...

  9. Android Material Design带UI变化

    谷歌Matias Duarte称,"Material Design是漂亮和大胆的.由于干净的排版和布局简单且easy理解.内容才是焦点. 谷歌I/O 014开发人员大会上宣布全新的设计语言& ...

  10. ArrayList/List 泛型集合

    List泛型集合 集合是OOP中的一个重要概念,C#中对集合的全面支持更是该语言的精华之一. 为什么要用泛型集合? 在C# 2.0之前,主要可以通过两种方式实现集合: a.使用ArrayList 直接 ...