TaskCompletionEvent.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:6k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.mapred;
  19. import java.io.DataInput;
  20. import java.io.DataOutput;
  21. import java.io.IOException;
  22. import org.apache.hadoop.io.Writable;
  23. import org.apache.hadoop.io.WritableUtils;
  24. /**
  25.  * This is used to track task completion events on 
  26.  * job tracker. 
  27.  */
  28. public class TaskCompletionEvent implements Writable{
  29.   static public enum Status {FAILED, KILLED, SUCCEEDED, OBSOLETE, TIPFAILED};
  30.     
  31.   private int eventId; 
  32.   private String taskTrackerHttp;
  33.   private int taskRunTime; // using int since runtime is the time difference
  34.   private TaskAttemptID taskId;
  35.   Status status; 
  36.   boolean isMap = false;
  37.   private int idWithinJob;
  38.   public static final TaskCompletionEvent[] EMPTY_ARRAY = 
  39.     new TaskCompletionEvent[0];
  40.   /**
  41.    * Default constructor for Writable.
  42.    *
  43.    */
  44.   public TaskCompletionEvent(){
  45.     taskId = new TaskAttemptID();
  46.   }
  47.   /**
  48.    * Constructor. eventId should be created externally and incremented
  49.    * per event for each job. 
  50.    * @param eventId event id, event id should be unique and assigned in
  51.    *  incrementally, starting from 0. 
  52.    * @param taskId task id
  53.    * @param status task's status 
  54.    * @param taskTrackerHttp task tracker's host:port for http. 
  55.    */
  56.   public TaskCompletionEvent(int eventId, 
  57.                              TaskAttemptID taskId,
  58.                              int idWithinJob,
  59.                              boolean isMap,
  60.                              Status status, 
  61.                              String taskTrackerHttp){
  62.       
  63.     this.taskId = taskId;
  64.     this.idWithinJob = idWithinJob;
  65.     this.isMap = isMap;
  66.     this.eventId = eventId; 
  67.     this.status =status; 
  68.     this.taskTrackerHttp = taskTrackerHttp;
  69.   }
  70.   /**
  71.    * Returns event Id. 
  72.    * @return event id
  73.    */
  74.   public int getEventId() {
  75.     return eventId;
  76.   }
  77.   /**
  78.    * Returns task id. 
  79.    * @return task id
  80.    * @deprecated use {@link #getTaskAttemptId()} instead.
  81.    */
  82.   @Deprecated
  83.   public String getTaskId() {
  84.     return taskId.toString();
  85.   }
  86.   
  87.   /**
  88.    * Returns task id. 
  89.    * @return task id
  90.    */
  91.   public TaskAttemptID getTaskAttemptId() {
  92.     return taskId;
  93.   }
  94.   
  95.   /**
  96.    * Returns enum Status.SUCESS or Status.FAILURE.
  97.    * @return task tracker status
  98.    */
  99.   public Status getTaskStatus() {
  100.     return status;
  101.   }
  102.   /**
  103.    * http location of the tasktracker where this task ran. 
  104.    * @return http location of tasktracker user logs
  105.    */
  106.   public String getTaskTrackerHttp() {
  107.     return taskTrackerHttp;
  108.   }
  109.   /**
  110.    * Returns time (in millisec) the task took to complete. 
  111.    */
  112.   public int getTaskRunTime() {
  113.     return taskRunTime;
  114.   }
  115.   /**
  116.    * Set the task completion time
  117.    * @param taskCompletionTime time (in millisec) the task took to complete
  118.    */
  119.   public void setTaskRunTime(int taskCompletionTime) {
  120.     this.taskRunTime = taskCompletionTime;
  121.   }
  122.   /**
  123.    * set event Id. should be assigned incrementally starting from 0. 
  124.    * @param eventId
  125.    */
  126.   public void setEventId(
  127.                          int eventId) {
  128.     this.eventId = eventId;
  129.   }
  130.   /**
  131.    * Sets task id. 
  132.    * @param taskId
  133.    * @deprecated use {@link #setTaskID(TaskAttemptID)} instead.
  134.    */
  135.   @Deprecated
  136.   public void setTaskId(String taskId) {
  137.     this.taskId = TaskAttemptID.forName(taskId);
  138.   }
  139.   
  140.   /**
  141.    * Sets task id. 
  142.    * @param taskId
  143.    */
  144.   public void setTaskID(TaskAttemptID taskId) {
  145.     this.taskId = taskId;
  146.   }
  147.   
  148.   /**
  149.    * Set task status. 
  150.    * @param status
  151.    */
  152.   public void setTaskStatus(
  153.                             Status status) {
  154.     this.status = status;
  155.   }
  156.   /**
  157.    * Set task tracker http location. 
  158.    * @param taskTrackerHttp
  159.    */
  160.   public void setTaskTrackerHttp(
  161.                                  String taskTrackerHttp) {
  162.     this.taskTrackerHttp = taskTrackerHttp;
  163.   }
  164.     
  165.   @Override
  166.   public String toString(){
  167.     StringBuffer buf = new StringBuffer(); 
  168.     buf.append("Task Id : "); 
  169.     buf.append(taskId); 
  170.     buf.append(", Status : ");  
  171.     buf.append(status.name());
  172.     return buf.toString();
  173.   }
  174.     
  175.   @Override
  176.   public boolean equals(Object o) {
  177.     if(o == null)
  178.       return false;
  179.     if(o.getClass().equals(TaskCompletionEvent.class)) {
  180.       TaskCompletionEvent event = (TaskCompletionEvent) o;
  181.       return this.isMap == event.isMapTask() 
  182.              && this.eventId == event.getEventId()
  183.              && this.idWithinJob == event.idWithinJob() 
  184.              && this.status.equals(event.getTaskStatus())
  185.              && this.taskId.equals(event.getTaskAttemptId()) 
  186.              && this.taskRunTime == event.getTaskRunTime()
  187.              && this.taskTrackerHttp.equals(event.getTaskTrackerHttp());
  188.     }
  189.     return false;
  190.   }
  191.   @Override
  192.   public int hashCode() {
  193.     return toString().hashCode(); 
  194.   }
  195.   public boolean isMapTask() {
  196.     return isMap;
  197.   }
  198.     
  199.   public int idWithinJob() {
  200.     return idWithinJob;
  201.   }
  202.   //////////////////////////////////////////////
  203.   // Writable
  204.   //////////////////////////////////////////////
  205.   public void write(DataOutput out) throws IOException {
  206.     taskId.write(out); 
  207.     WritableUtils.writeVInt(out, idWithinJob);
  208.     out.writeBoolean(isMap);
  209.     WritableUtils.writeEnum(out, status); 
  210.     WritableUtils.writeString(out, taskTrackerHttp);
  211.     WritableUtils.writeVInt(out, taskRunTime);
  212.     WritableUtils.writeVInt(out, eventId);
  213.   }
  214.   
  215.   public void readFields(DataInput in) throws IOException {
  216.     taskId.readFields(in); 
  217.     idWithinJob = WritableUtils.readVInt(in);
  218.     isMap = in.readBoolean();
  219.     status = WritableUtils.readEnum(in, Status.class);
  220.     taskTrackerHttp = WritableUtils.readString(in);
  221.     taskRunTime = WritableUtils.readVInt(in);
  222.     eventId = WritableUtils.readVInt(in);
  223.   }
  224. }