yarn状态机库

来源:互联网 发布:思迅天店软件 编辑:程序博客网 时间:2024/05/16 17:52

      状态机由一组状态组成,这些状态分为三类 :初始状态、中间状态和最终状态。状态
机从初始状态开始运行,经过一系列中间状态后,到达最终状态并退出。在一个状态机中,
每个状态都可以接收一组特定事件,并根据具体的事件类型转换到另一个状态。当状态机
转换到最终状态时,则退出。

      YARN 提供了一个状态机可视化工具graphviz。

      源代码位于目录中 org.apache.hadoop.yarn.state 包中。

 使用方法

 

Java代码
  1. package com.test.hadoop.state;  
  2.   
  3. import java.util.UUID;  
  4.   
  5. import org.apache.hadoop.conf.Configuration;  
  6. import org.apache.hadoop.service.CompositeService;  
  7. import org.apache.hadoop.yarn.event.AbstractEvent;  
  8. import org.apache.hadoop.yarn.event.AsyncDispatcher;  
  9. import org.apache.hadoop.yarn.event.EventHandler;  
  10. import org.apache.hadoop.yarn.state.SingleArcTransition;  
  11. import org.apache.hadoop.yarn.state.StateMachine;  
  12. import org.apache.hadoop.yarn.state.StateMachineFactory;  
  13.   
  14. public class StateTest {  
  15.     private static enum TaskEventType {  
  16.         T_NEW, T_START, T_SUCCESS  
  17.     }  
  18.   
  19.     public enum TaskState {  
  20.         NEW, START, SUCCESS  
  21.     }  
  22.   
  23.     private static class TaskEvent extends AbstractEvent<TaskEventType> {  
  24.         private String taskID; //Task ID  
  25.   
  26.         public TaskEvent(String taskID, TaskEventType type) {  
  27.             super(type);  
  28.             this.taskID = taskID;  
  29.         }  
  30.   
  31.         public String getTaskID() {  
  32.             return taskID;  
  33.         }  
  34.     }  
  35.   
  36.     private static class Task extends CompositeService implements EventHandler<TaskEvent> {  
  37.         private AsyncDispatcher dispatcher = new AsyncDispatcher();// 定义一个中央异步调度器  
  38.   
  39.         private final StateMachine<TaskState, TaskEventType, TaskEvent> stateMachine = new StateMachineFactory<Task, TaskState, TaskEventType, TaskEvent>(  
  40.                 TaskState.NEW)  
  41.                 .addTransition(TaskState.NEW, TaskState.NEW, TaskEventType.T_NEW, new NewTaskTransition())  
  42.                 .addTransition(TaskState.NEW, TaskState.START, TaskEventType.T_START, new StartTaskTransition())  
  43.                 .addTransition(TaskState.START, TaskState.SUCCESS, TaskEventType.T_SUCCESS, new SuccessTaskTransition())  
  44.                 .installTopology().make(this);  
  45.   
  46.         private String taskID;  
  47.   
  48.         public Task(String taskID, String name) {  
  49.             super(name);  
  50.             this.taskID = taskID;  
  51.         }  
  52.   
  53.         @Override  
  54.         public void handle(TaskEvent event) {  
  55.             System.out.println("current status:" + stateMachine.getCurrentState());  
  56.             stateMachine.doTransition(event.getType(), event);  
  57.             System.out.println("current status:" + stateMachine.getCurrentState());  
  58.         }  
  59.   
  60.         private class NewTaskTransition implements SingleArcTransition<Task, TaskEvent> {  
  61.             @SuppressWarnings("unchecked")  
  62.             @Override  
  63.             public void transition(Task task, TaskEvent event) {  
  64.                 System.out.println("Receive T_NEW event of task " + event.getTaskID());  
  65.                 dispatcher.getEventHandler().handle(new TaskEvent(event.getTaskID(), TaskEventType.T_START));  
  66.             }  
  67.         }  
  68.   
  69.         private class StartTaskTransition implements SingleArcTransition<Task, TaskEvent> {  
  70.             @SuppressWarnings("unchecked")  
  71.             @Override  
  72.             public void transition(Task task, TaskEvent event) {  
  73.                 System.out.println("Receive T_START event of task " + event.getTaskID());  
  74.                 dispatcher.getEventHandler().handle(new TaskEvent(event.getTaskID(), TaskEventType.T_SUCCESS));  
  75.             }  
  76.         }  
  77.   
  78.         private class SuccessTaskTransition implements SingleArcTransition<Task, TaskEvent> {  
  79.             @Override  
  80.             public void transition(Task task, TaskEvent event) {  
  81.                 System.out.println("Receive T_SUCCESS event of task " + event.getTaskID());  
  82.             }  
  83.         }  
  84.   
  85.         protected void serviceInit(Configuration conf) throws Exception {  
  86.             dispatcher.register(TaskEventType.classthis);  
  87.             addService(dispatcher);  
  88.             super.serviceInit(conf);  
  89.         }  
  90.   
  91.         @SuppressWarnings("unchecked")  
  92.         protected void serviceStart() throws Exception {  
  93.             dispatcher.getEventHandler().handle(new TaskEvent(taskID, TaskEventType.T_NEW));  
  94.             super.serviceStart();  
  95.         }  
  96.     }  
  97.   
  98.     @SuppressWarnings("resource")  
  99.     public static void main(String[] args) {  
  100.         Task task = new Task(UUID.randomUUID().toString(), "test");  
  101.         task.init(new Configuration());  
  102.         task.start();  
  103.     }  

0 0
原创粉丝点击