yarn事件库

来源:互联网 发布:vb中borderstyle属性 编辑:程序博客网 时间:2024/05/14 16:04

     yarn采用事件驱动的并发模型增强并发,使得YARN 具有低耦合、高内聚的特点,便于维护。

     整个处理过程大致为:处理请求会作为事件进入系统,由中央异步调度器(Async-
Dispatcher)负责传递给相应事件调度器(Event Handler)。该事件调度器可能将该事件转发给
另外一个事件调度器,也可能交给一个带有有限状态机的事件处理器,其处理结果也以事
件的形式输出给中央异步调度器。而新的事件会再次被中央异步调度器转发给下一个事件
调度器,直至处理完成(达到终止条件)。

    源代码位于hadoop-yarn-project/hadoop-yarn/hadoop-yarncommon/src/main/java 下的org.apache.hadoop.yarn.event下

    

 

 

使用例子代码
  1. package com.myhadoop;  
  2.   
  3. import java.util.UUID;  
  4.   
  5. import org.apache.hadoop.conf.Configuration;  
  6. import org.apache.hadoop.yarn.event.AbstractEvent;  
  7. import org.apache.hadoop.yarn.event.AsyncDispatcher;  
  8. import org.apache.hadoop.yarn.event.EventHandler;  
  9.   
  10. public class EventTest {  
  11.     private static enum TaskEventType {  
  12.         T_NEW, T_START, T_SUCCESS  
  13.     }  
  14.   
  15.     private static class TaskEvent extends AbstractEvent<TaskEventType> {  
  16.         private String taskID; //Task ID  
  17.   
  18.         public TaskEvent(String taskID, TaskEventType type) {  
  19.             super(type);  
  20.             this.taskID = taskID;  
  21.         }  
  22.   
  23.         public String getTaskID() {  
  24.             return taskID;  
  25.         }  
  26.     }  
  27.   
  28.     private static class TaskEventDispatcher implements EventHandler<TaskEvent> {  
  29.         @SuppressWarnings("unchecked")  
  30.         @Override  
  31.         public void handle(TaskEvent event) {  
  32.             if (event.getType() == TaskEventType.T_NEW) {  
  33.                 System.out.println("Receive T_NEW event of task " + event.getTaskID());  
  34.                 dispatcher.getEventHandler().handle(new TaskEvent(event.getTaskID(), TaskEventType.T_START));  
  35.             } else if (event.getType() == TaskEventType.T_START) {  
  36.                 System.out.println("Receive T_START event of task " + event.getTaskID());  
  37.                 dispatcher.getEventHandler().handle(new TaskEvent(event.getTaskID(), TaskEventType.T_SUCCESS));  
  38.             } else if (event.getType() == TaskEventType.T_SUCCESS) {  
  39.                 System.out.println("Receive T_SUCCESS event of task " + event.getTaskID()); 
  40.                 dispatcher.stop();
  41.             }  
  42.         }  
  43.     }  
  44.   
  45.     private static AsyncDispatcher dispatcher = new AsyncDispatcher();// 定义一个中央异步调度器  
  46.     static {  
  47.         dispatcher.init(new Configuration());  
  48.         dispatcher.register(TaskEventType.class, new TaskEventDispatcher());  
  49.         dispatcher.start();  
  50.     }  
  51.   
  52.     @SuppressWarnings("unchecked")  
  53.     public static void main(String[] args) {  
  54.         dispatcher.getEventHandler().handle(new TaskEvent(UUID.randomUUID().toString(), TaskEventType.T_NEW));  
  55.     }  

0 0
原创粉丝点击