zoukankan      html  css  js  c++  java
  • Hadoop 0.23 状态机框架

    Hadoop 0.23中使用了基于事件驱动机制的异步编程模型。每个对象都是一个有限状态机,有相应的事件处理器(EventHandler),处理器处理对应的事件类型。事件处理后,对象将从一个状态变化到另一个状态。

    以Application对象为例,相关类分别为:

    状态类:ApplicationState

    处理器类:Application

    事件类型类:ApplicationEventType

    事件类:ApplicationEvent及子类

    其状态机如下图:

    状态机框架

    框架中的泛型

    OPERAND

    表示状态机的操作对象,如Application对象。

    STATE

    表示对象的状态,如ApplicationState代表的相关状态。

    EVENTTYPE

    表示需要处理的事件类型,如ApplicationEventType代表的相关类型。

    EVENT

    表示具体事件对象,如ApplicationEvent对象。

    StateMachine

    StateMachine<STATE extends Enum<STATE>,EVENTTYPEextends Enum<EVENTTYPE>, EVENT>

    主要方法:

    public STATEgetCurrentState();

    获取当前状态

    public STATEdoTransition(EVENTTYPE eventType, EVENT event)

    根据事件类型和事件对象进行状态迁移。

    StateMachineFactory

    StateMachineFactory <OPERAND,STATE extends Enum<STATE>, EVENTTYPEextends Enum<EVENTTYPE>, EVENT>

    状态机框架的实现基本集中在这个类里面。

    主要成员
    private finalTransitionsListNode transitionsListNode;

    所有迁移列表。

    private Map<STATE,Map<EVENTTYPE, Transition<OPERAND, STATE, EVENTTYPE, EVENT>>>stateMachineTable;

    储存状态机中每个状态和该状态相应迁移的信息。注意,这个table中储存了多个状态机,因为每个状态机的状态都是不相同的。

    private STATE defaultInitialState;

    创建状态机时默认的初始化状态。

    主要方法
    public StateMachineFactory<OPERAND, STATE, EVENTTYPE,EVENT> addTransition(STATE preState, STATE postState, EVENTTYPE eventType,SingleArcTransition<OPERAND, EVENT>hook)

    l public StateMachineFactory<OPERAND, STATE, EVENTTYPE,EVENT> addTransition(STATE preState,Set<STATE> postStates, EVENTTYPE eventType,MultipleArcTransition<OPERAND, EVENT, STATE> hook)

    将一个单箭头/多箭头迁移加入StateMachineFactory的迁移列表中。

    public StateMachine<STATE, EVENTTYPE, EVENT> make(OPERAND operand, STATE initialState)

    创建一个状态机。

    相关类
    Transition
    Transition<OPERAND, STATE extends Enum<STATE>,EVENTTYPEextends Enum<EVENTTYPE>, EVENT>

    代表了状态机状态的一次变化。

    主要方法:

    STATEdoTransition(OPERAND operand, STATE oldState,  EVENT event,EVENTTYPE eventType);

    根据事件类型和事件将状态机操作对象从旧状态迁移到新状态(返回值)。

    迁移的钩子函数接口
    迁移的具体处理是由钩子函数完成的。

    SingleArcTransition<OPERAND, EVENT>
    Hookfor Transition. This lead to state machine to move to the post state asregistered in the state machine.

    只有单箭头的迁移,即状态机图中当前状态的后继状态只有一个。

    主要方法:

    public void transition(OPERAND operand, EVENT event);

    MultipleArcTransition
    MultipleArcTransition <OPERAND, EVENT,STATE extends Enum<STATE>>

    Hookfor Transition. Post state is decided by Transition hook. Post state must beone of the valid post states registered in StateMachine.

    多箭头的迁移,状态机图中当前状态的后续状态有多个,由事件类型来决定迁移的后续状态。

    主要方法:

    public STATE transition(OPERAND operand, EVENT event);

    返回值为迁移相应事件的后续状态。

    迁移的实现类
    SingleInternalArc
    单箭头的迁移,迁移的后续状态在创建时指定。

    MultipleInternalArc
    多箭头的迁移,迁移的可能后续状态在创建时指定,完成迁移后的后续状态由MultipleArcTransition. transition方法给出。

    ApplicableTransition
    实现类ApplicableSingleOrMultipleTransition,代表一个可以加入stateMachineTable的迁移,创建时需要迁移的前置状态、事件类型和迁移本身。

    TransitionsListNode
    保存一个ApplicableTransition和下一个TransitionsListNode的指针,可以通过这个类遍历StateMachineFactory中所有的迁移。

    InternalStateMachine
    实现StateMachine,只保存一个状态机的操作对象和状态机当前的状态。 doTransition方法调用的是StateMachineFactory.doTransition方法,从stateMachineTable中 找到相应迁移,再调用Transition的doTransition。

  • 相关阅读:
    日活跃用户统计函数
    统计学习方法(五)——决策树
    统计学习方法(四)——朴素贝叶斯法
    统计学习方法(三)——K近邻法
    统计学习方法(二)——感知机
    Hive UDAF开发之同时计算最大值与最小值
    hive UDAF开发入门和运行过程详解(转)
    Linux操作系统启动流程
    Linux目录的作用
    Linux分区
  • 原文地址:https://www.cnblogs.com/zhangzhang/p/2866174.html
Copyright © 2011-2022 走看看