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. Swift Tips - 当 Swift 遇上 CocoaPods

    CocoaPods 作为 iOS 开发的包管理工具,几乎成为了 Objective-C 的行业标准.它为我们提供了非常方便的包管理功能.而苹果正式发布 Swift 语言也已经有半年多时间了,Swift ...

  2. Mono for Android (4)-- 图片转为二进制,二进制转回图片

    最近纠结蓝牙打印的问题,想着图片先转为二进制发给打印机,找了好多资料,终于成功了,贴出来共享一下 先是图片转换为二进制的: Bitmap bitmap = BitmapFactory.DecodeRe ...

  3. 加速传感器(CoreMotion) swift

    // // ViewController.swift // UILabelTest // // Created by mac on 15/6/23. // Copyright (c) 2015年 fa ...

  4. ABAP文本编辑框操作

    * 1.创建文本框 DATA: g_container TYPE REF TO cl_gui_custom_container, g_editor TYPE REF TO cl_gui_textedi ...

  5. iOS UIView的简单渐变效果

    这里主要用到了ios4.0以后 UIView的类方法 animateWithDuration: 函数原型包括以下类方法 + (void)animateWithDuration:(NSTimeInter ...

  6. [shell实例]——用脚本实现向多台服务器批量复制文件(nmap、scp)

    练习环境: (1)所有服务器将防火墙和selinux关闭 (2)所有服务器的root密码设置为aixocm (3)所有服务器都为10.0.100.*网段,并保证能够和其它主机通信 (4)所有服务器确保 ...

  7. eclipse格式化代码末班修改

    在窗口->首选项->输入format(格式)搜索,或者找Java->代码样式->格式化程序: 几个内置的不能调格式化代码风格,但是可以根据内置的新建一个,出来很多选项,开始调吧 ...

  8. c语言编程之双向循环链表

    双向循环链表就是形成两个环,注意每个环的首尾相连基本就可以了. 程序中采用尾插法进行添加节点. #include<stdio.h> #include<stdlib.h> #de ...

  9. Grails 对象关联映射 (GORM) 一

    转自:http://justjavac.iteye.com/blog/701445 Domain 类是任何商业应用的核心. 他们保存事务处理的状态,也处理预期的行为. 他们通过关联联系在一起, one ...

  10. 【Python】代码调试(pdb与logging使用)

    一.pdb使用 pdb 是 python 自带的一个包,为 python 程序提供了一种交互的源代码调试功能,主要特性包括设置断点.单步调试.进入函数调试.查看当前代码.查看栈片段.动态改变变量的值等 ...