一 服务库
对于生命周期较长的对象,YARN采用基于服务的对象管理模型对其管理,特点如下:
>每一个被服务化的对象分为四个状态:NOTINITED(被创建,还未初始化),INITED(已初始化),SATRTED(已启动),STOPPED(已停止)
>任何服务状态的变化,都可以触发一些动作
>可通过组合方式对任意服务进行组合
总接口:Service
抽象服务类:AbstractService实现了部分Service接口的方法
组合服务类:CompositeService,如果是组合服务,需要继承CompositeService,比如ResourceManager是一个组合服务,他组合了各种服务对象,比如ClientRMService,ApplicationMasterLauncher,
ApplicationMasterService等
二 事件库
YARN采用了基于事件的并发模型,该模型能够大大增强并发性,从而提高系统的整体性能。
YARN将各种处理逻辑抽象成事件和对应事件调度器,并将每类事件处理过程分割成多个步骤,用有限状态机表示
处理请求作为事件进入系统
中央异步调度器AsyncDipatcher负责传递给相应的事件调度器Event
Handler,这个事件调度器可能将该事件转发给另外一个事件调度器,也可能交给一个带有有限状态机的事件处理器
YANR中,所有核心服务实际上都是由一个中央异步调度器。包括
ResourceManager, Node Manager, MR Application Master等,他们维护了事先注册的事件和事件处理器,并根据接收的事件类型驱动服务的运行
当使用YARN事件库的时候步骤
1、定义一个中央异步调度器AsyncDispatcher,负责事件的处理和转发
2、根据实际业务需求定义一系列的事件Event与事件处理器EventHandler,并注册到中央异步调度器AsyncDispatcher,以实现事件统一管理和调度
举个例子:MRAppMaster
内部包含一个中央异步调度器ASyncDispatcher,并注册TaskAttemptEvent/TaskAttemptImpl、TaskEvent/TaskImpl、JobEvent/
JobImpl等一系列事件、事件处理器
三 状态机库
状态机由一组状态组成,这些状态分为三类:初始状态、中间状态、和最终状态。
从初始状态开始运行,经过一系列中间状态,达到最终状态并退出。
在一个状态机中,每一个状态都可以接受一组特定的事件,并根据具体的事件类型转换到另一个状态。
YARN中,每一种状态由四个元素组成:
转换前状态preState:
转换后状态:postState
事件:event
回调函数:hook
三种状态转换方式:
表示:状态机在preState状态下,接受到Event事件后,执行函数状态转移函数hook,执行完后,将当前的状态转换为postState
2、一个初始状态,一个事件,然后多种状态
表示状态在preState状态下,接受到Event事件后,执行函数hook
返回多种状态
3、一个初始状态,多个事件,一个最终状态
表示:在preState状态下,接收到多个事件后,执行状态转移函数hook,返回一个最终状态