YARN服务库和事件库的使用方法(1)

来源:互联网 发布:安吉丽娜朱莉离婚 知乎 编辑:程序博客网 时间:2024/05/29 02:35

为了说明YARN服务库和事件库的使用方法,本小节介绍一个简单的实例,该实例可看做MapReduce ApplicationMaster(MRAppMaster)的简化版。该例子涉及任务和作业两种对象的事件以及一个中央异步调度器。步骤如下。

1)定义Task事件。
 

  1. public class TaskEvent extends AbstractEvent<TaskEventType> {  
  2.   private String taskID; //Task ID  
  3.   public TaskEvent(String taskID, TaskEventType type) {  
  4.     super(type);  
  5.     this.taskID = taskID;  
  6.   }  
  7.  
  8.   public String getTaskID() {  
  9.     return taskID;  
  10.   } 

其中,Task事件类型定义如下:
 

  1. public enum TaskEventType {  
  2.   T_KILL,  
  3.   T_SCHEDULE  

2)定义Job事件。
 

  1. public class JobEvent extends AbstractEvent<JobEventType> {  
  2.   private String jobID;  
  3.   public JobEvent(String jobID, JobEventType type) {  
  4.     super(type);  
  5.     this.jobID = jobID;  
  6.   }  
  7.  
  8.   public String getJobId() {  
  9.     return jobID;  
  10.   }  

其中,Job事件类型定义如下:
 

  1. public enum JobEventType {  
  2.   JOB_KILL,  
  3.   JOB_INIT,  
  4.   JOB_START  

3)事件调度器。

接下来定义一个中央异步调度器,它接收Job和Task两种类型事件,并交给对应的事件处理器处理,代码如下:
 

  1. @SuppressWarnings("unchecked")  
  2. public class SimpleMRAppMaster extends CompositeService {  
  3.   private Dispatcher dispatcher;    //中央异步调度器  
  4.   private String jobID;  
  5.   private int taskNumber;   //该作业包含的任务数目  
  6.   private String[] taskIDs;     //该作业内部包含的所有任务  
  7.  
  8.   public SimpleMRAppMaster(String name, String jobID, int taskNumber) {  
  9.     super(name);  
  10.     this.jobID = jobID;  
  11.     this.taskNumber = taskNumber;  
  12.     taskIDs = new String[taskNumber];  
  13.     for(int i = 0; i < taskNumber; i++) {  
  14.       taskIDs[i] = new String(jobID + "_task_" + i);  
  15.     }  
  16.   }  
  17.  
  18.   public void serviceInit(final Configuration conf) throws Exception {  
  19.     dispatcher = new AsyncDispatcher();//定义一个中央异步调度器  
  20.     //分别注册Job和Task事件调度器  
  21.     dispatcher.register(JobEventType.class, new JobEventDispatcher());  
  22.     dispatcher.register(TaskEventType.class, new TaskEventDispatcher());  
  23.     addService((Service) dispatcher);  
  24.     super.serviceInit(conf);  
  25.   }  
  26.  
  27.   public Dispatcher getDispatcher() {  
  28.     return dispatcher;  
  29.   }  
  30.  
  31.   private class JobEventDispatcher implements EventHandler<JobEvent> {  
  32.       @Override  
  33.   public void handle(JobEvent event) {  
  34.       if(event.getType() == JobEventType.JOB_KILL) {  
  35.         System.out.println("Receive JOB_KILL event, killing all the tasks");  
  36.         for(int i = 0; i < taskNumber; i++) {  
  37.            dispatcher.getEventHandler().handle(new TaskEvent(taskIDs[i],  
  38.               TaskEventType.T_KILL));  
  39.         }  
  40.       } else if(event.getType() == JobEventType.JOB_INIT) {  
  41.         System.out.println("Receive JOB_INIT event, scheduling tasks");  
  42.         for(int i = 0; i < taskNumber; i++) {  
  43.             dispatcher.getEventHandler().handle(new TaskEvent(taskIDs[i],  
  44.                TaskEventType.T_SCHEDULE));  
  45.          }  
  46.       }  
  47.     }  
  48.   }  
  49.   private class TaskEventDispatcher implements EventHandler<TaskEvent> {  
  50.     @Override  
  51.     public void handle(TaskEvent event) {  
  52.       if(event.getType() == TaskEventType.T_KILL) {  
  53.         System.out.println("Receive T_KILL event of task " + event.getTaskID());  
  54.       } else if(event.getType() == TaskEventType.T_SCHEDULE) {  
  55.         System.out.println("Receive T_SCHEDULE event of task " + event.getTaskID());  
  56.       }  
  57.     }  
  58.   }  
  59. 4)测试程序。
  60.  @SuppressWarnings("unchecked")  
    1. public class SimpleMRAppMasterTest {  
    2.   public static void main(String[] args) throws Exception {  
    3.     String jobID = "job_20131215_12";  
    4.     SimpleMRAppMaster appMaster = new SimpleMRAppMaster("Simple MRAppMaster", jobID, 5);  
    5.     YarnConfiguration conf = new YarnConfiguration(new Configuration());  
    6.     appMaster.serviceInit(conf);  
    7.     appMaster.serviceStart();  
    8.     appMaster.getDispatcher().getEventHandler().handle(new JobEvent(jobID,  
    9.             JobEventType.JOB_KILL));  
    10.     appMaster.getDispatcher().getEventHandler().handle(new JobEvent(jobID,  
    11.             JobEventType.JOB_INIT));  
    12.   } 

0 0
原创粉丝点击