CompositeService 多个service封装,service定义了状态机状态改变的合法情况。

重要的方法是(子类需要实现的):serviceStart,serviceInit,serviceStop
 
里面的服务有:
Dispatcher,ClientRMService,ApplicationMasterService,AplicationMasterLauncher,AdminService,ContainerAllocationExpire,NMLivenessMonitor,NodeListManager
 
Context每个服务对应有context。
子类定义serviceInit,ServiceStart,ServiceStop
继承的init,start,stop直接调用。
 
AbstractLivelinessMonitor父类,定义了monitor的一些基本操作。
这些服务的特点都是围绕dispatcher。
 
 
RMDispatcher有个register方法进行注册,将相应的Event以及对应的handler进行注册。
不出所料,里面很多服务都有queue,大多数都是异步完成。
Token之类的没有使用,暂时不用考虑。 
 
 
Event                                                  Type                                                  Handler
RMAppEvent                         RMAppEventType                          ApplicationEventDispatcher
RMStateStoreAppEvent  同上,是子类        
RMAppAttemptEvent             RMAppAttemptEventType             ApplicationAttemptEventDispatcher
                                               SchdulerEventType                       SchedulerEventDispatcher
RMNodeStatusEvent
 
状态机
StateMachineFactory<OPERAND, STATE extends Enum<STATE>, EVENTTYPE extends Enum<EVENTTYPE>, EVENT>
通过状态机把所有的状态转变都建立好后,在状态改变后自动执行。
 
 
 
1、Dispatcher里面有个queue,将所有的请求。
     每个注册到Dispatcher的类最后都能够获得一个dispatcher的handler,用于将Event传入到Dispatcher的queue中,有可能有一个,也可能有多个handler,根据注册情况。
     Dispatcher内部有个线程用于将queue中得Event根据注册的handler,dispatch到不同的类去处理。有些是同步有些是异步。
 
2、ResourceScheduler
 
 
3、ClientRMService
(1)实现的是ApllicationClientProtocol,完成的是client向Server(ResourceManager)的信息传输。
 
client submit一个job以后,提交到ClientRMService中,首先将该job,向RMAppManager submit这个job。
 
经过token,ACL验证。
然后交给Dispatcher进行处理,Event是RMAppEvent,Type的enum是RMAppEventType。
这个时候返回给Client端。
(2)生成一个RMApp类,代表一个application。向Dispatcher发送一个请求

RMAppEvent(applicationId, isRecovered ? RMAppEventType.RECOVER:

            RMAppEventType.START));
 
这里面的EventType为RMAppEventType.START。RMAppEvent对应的Handler为ApplicationEventDispatcher。
RMStateStore指的是是否存储状态。
在RMAppImpl中,状态转变通过EventType确定。
(3)随后进入RMStateStore中,生成一个ApplicationState状态,内部处理,内部进行handle,储存相应的state信息,如果不是可以recovery的话就是只打log。
随后出发RMAppEvent type的event,该Event的type是RMAppEventType.APP_SAVED
(4)随后代码流程重新进入RMAppImpl中,根据type,状态机流转到从State  NEW_SAVING到SUBMITTED,执行StartAPpAttemptTransition()
createNewAttempt(true);
(5)随后生成RMAppAttempt对象,根据id等等,把需要的参数加入。
随后进入RMAppAttemptImpl类的状态机,实现类是RMAppAttemptImpl
根据其状态机转变从RMAppAttemptState.NEW到RMAppAttemptState.SUBMITTED
transition类是AttemptStartedTransition类。
首先获取时间戳
进入ApplicationMasterService,该Service目的是沟通ApplicationMaster和ResourceManager。
  registerAppAttempt注册该ApplicationAttempt。
然后进入scheduler阶段
(6)在Scheduler阶段,首先是APP_ADDED
先不管内部逻辑,随后又进入到RMAppAttemptImpl中得状态转变
(7)EventType是RMAppAttemptEventType.APP_ACCEPTED,执行的transition类为ScheduleTransition类
它的行为是将首先将RMAppimpl的状态从submit调整到APP_ACCEPTED,没有行为。
随后在scheduler中分配资源,返回一个allocate对象。
 
至此client结束任务,下一步的任务不需要client参与了。
 
 
当NodeManager向ResourceManager汇报心跳的时候,RM会找到需要分配的资源,通过scheduler的方法去分配。在AppSchedulable方法中的assighContainer将该container assign到node中。同时通知该node需要去launch得app。这步是rm 和 nm进行通信完成的,相当于rm向nm申请ApplicationMaster的Container。
 
 
 
 
NodeManager与ResourceManager通信
协议是ResourceTracker,实现类是ResourceTrackerService 

YARN学习笔记 ResourceManager部分的更多相关文章

  1. YARN学习笔记(一)——YARN的简介

    YARN的简介 什么是YARN MRv1的架构和缺陷 经典MapReduce的局限性 解决可伸缩性问题 YARN的架构 一个可运行任何分布式应用程序的集群 YARN中的应用程序提交 YARN的其他特性 ...

  2. YARN学习笔记——Overview and Architecture

    YARN的简介 什么是YARN MRv1的架构和缺陷 经典MapReduce的局限性 解决可伸缩性问题 YARN的架构 一个可运行任何分布式应用程序的集群 YARN中的应用程序提交 YARN的其他特性 ...

  3. YARN学习笔记

    分布式资源调度框架 Yet Another Resource Negotiator YARN 不同框架使用相同的系统资源 YARN的核心组件(架构) ResourceManager RM 整个集群同一 ...

  4. Node.js学习笔记(4):Yarn简明教程

    Node.js学习笔记(4):Yarn简明教程. 引入Yarn NPM是常用的包管理工具,现在我们引入是新一代的包管理工具Yarn.其具有快速.安全.可靠的特点. 安装方式 使用npm工具安装yarn ...

  5. Hadoop学习笔记—Yarn

    目录 一些基本知识 ResourceManager 的恢复 Resource Manager的HA YARN Node Labels YARN Node Attributes Web Applicat ...

  6. 大数据学习笔记之Hadoop(三):MapReduce&YARN

    文章目录 一 MapReduce概念 1.1 为什么要MapReduce 1.2 MapReduce核心思想 1.3 MapReduce进程 1.4 MapReduce编程规范(八股文) 1.5 Ma ...

  7. Hadoop学习笔记—22.Hadoop2.x环境搭建与配置

    自从2015年花了2个多月时间把Hadoop1.x的学习教程学习了一遍,对Hadoop这个神奇的小象有了一个初步的了解,还对每次学习的内容进行了总结,也形成了我的一个博文系列<Hadoop学习笔 ...

  8. 分布式计算框架学习笔记--hadoop工作原理

    (hadoop安装方法:http://blog.csdn.net/wangjia55/article/details/53160679这里不再累述) hadoop是针对大数据设计的一个计算架构.如果你 ...

  9. Hadoop学习笔记01_Hadoop搭建

    想往大数据方向转, 难度肯定是有的. 基础知识肯定是要有的,如果是熟悉JAVA开发的人,转向应该优势大. 像我这样的,只有Linux基础以及简单的PHP基础的人,转向难度很大.但是事在人为,努力学习多 ...

随机推荐

  1. 关于使用regsvr32命令注册ActiveX控件失败的解决办法

    昨天小编也遇到这样问题,步骤一切都对,没有错误,但是每次在命令行下输入的时候,都会弹出一个对话框: 最后我发现是存放ActiveX控件的路径中带有中文文件名字所导致,所以导致的错误,我们将所在路径下的 ...

  2. SpringMVC处理脚本,SQL注入问题

    SpringMVC处理脚本,SQL注入问题(写的不好勿喷,互相学习) 使用 Filter 来过滤浏览器发出的请求,对每个URI参数请求过滤些关键字,替换成安全的字符.所有请求的 getParamete ...

  3. Java令牌生成器

    package Token; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; im ...

  4. 【Reorder List】cpp

    题目: Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must do ...

  5. 利用checkbox的到值,并且存到数据库修改的话要显示之前选择的

    在前台当然是利用checkbox来得到复选框的语言:{% for language in languages%}<input type="checkbox" name=&qu ...

  6. django构建blog--页面部分(eclipse+pydev)

    本文介绍的是在eclipse+pydev 平台下,利用django 搭建blog的第2部分:页面部分(主要涉及3个部分:模板.视图.URL模式) 篇幅1:创建模板 blog目录下新建一个文件夹:tem ...

  7. cookie和session的代码实现

    cookie和session的代码实现 1.设置cookie 今天笔试题考的是cookie的设置,我竟然选了request也可以设置cookie,我的天呀. 我们来看如何在response设置吧 pu ...

  8. boost之bind,function,signal总结

    boost里的bind,function,signal三个组件都是对用函数做参数(其他算法也用函数做参数),对函数的某一项进行操作. bind主要是对函数参数的作用. function主要是对函数地址 ...

  9. Python爬取百度贴吧图片

    一.获取URL Urllib 模块提供了读取web页面数据的接口,我们可以像读取本地文件一样读取www和ftp上的数据.首先,我们定义了一个getHtml()函数: urllib.urlopen()方 ...

  10. fpu栈溢出

    老大们遇到个问题,有一堆浮点数运算,分开写就对,合一起就溢出. 是因为定义的函数返回float的时候,别的地方声明是void错了,这样的错误累计八次之后,浮点数寄存器就满了.没地方放就错了. 函数前面 ...