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

网格计算

开发平台:

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.mapreduce;
  19. import java.io.DataInput;
  20. import java.io.DataOutput;
  21. import java.io.IOException;
  22. /**
  23.  * TaskAttemptID represents the immutable and unique identifier for 
  24.  * a task attempt. Each task attempt is one particular instance of a Map or
  25.  * Reduce Task identified by its TaskID. 
  26.  * 
  27.  * TaskAttemptID consists of 2 parts. First part is the 
  28.  * {@link TaskID}, that this TaskAttemptID belongs to.
  29.  * Second part is the task attempt number. <br> 
  30.  * An example TaskAttemptID is : 
  31.  * <code>attempt_200707121733_0003_m_000005_0</code> , which represents the
  32.  * zeroth task attempt for the fifth map task in the third job 
  33.  * running at the jobtracker started at <code>200707121733</code>.
  34.  * <p>
  35.  * Applications should never construct or parse TaskAttemptID strings
  36.  * , but rather use appropriate constructors or {@link #forName(String)} 
  37.  * method. 
  38.  * 
  39.  * @see JobID
  40.  * @see TaskID
  41.  */
  42. public class TaskAttemptID extends org.apache.hadoop.mapred.ID {
  43.   protected static final String ATTEMPT = "attempt";
  44.   private TaskID taskId;
  45.   
  46.   /**
  47.    * Constructs a TaskAttemptID object from given {@link TaskID}.  
  48.    * @param taskId TaskID that this task belongs to  
  49.    * @param id the task attempt number
  50.    */
  51.   public TaskAttemptID(TaskID taskId, int id) {
  52.     super(id);
  53.     if(taskId == null) {
  54.       throw new IllegalArgumentException("taskId cannot be null");
  55.     }
  56.     this.taskId = taskId;
  57.   }
  58.   
  59.   /**
  60.    * Constructs a TaskId object from given parts.
  61.    * @param jtIdentifier jobTracker identifier
  62.    * @param jobId job number 
  63.    * @param isMap whether the tip is a map 
  64.    * @param taskId taskId number
  65.    * @param id the task attempt number
  66.    */
  67.   public TaskAttemptID(String jtIdentifier, int jobId, boolean isMap, 
  68.                        int taskId, int id) {
  69.     this(new TaskID(jtIdentifier, jobId, isMap, taskId), id);
  70.   }
  71.   
  72.   public TaskAttemptID() { 
  73.     taskId = new TaskID();
  74.   }
  75.   
  76.   /** Returns the {@link JobID} object that this task attempt belongs to */
  77.   public JobID getJobID() {
  78.     return taskId.getJobID();
  79.   }
  80.   
  81.   /** Returns the {@link TaskID} object that this task attempt belongs to */
  82.   public TaskID getTaskID() {
  83.     return taskId;
  84.   }
  85.   
  86.   /**Returns whether this TaskAttemptID is a map ID */
  87.   public boolean isMap() {
  88.     return taskId.isMap();
  89.   }
  90.   
  91.   @Override
  92.   public boolean equals(Object o) {
  93.     if (!super.equals(o))
  94.       return false;
  95.     TaskAttemptID that = (TaskAttemptID)o;
  96.     return this.taskId.equals(that.taskId);
  97.   }
  98.   
  99.   /**
  100.    * Add the unique string to the StringBuilder
  101.    * @param builder the builder to append ot
  102.    * @return the builder that was passed in.
  103.    */
  104.   protected StringBuilder appendTo(StringBuilder builder) {
  105.     return taskId.appendTo(builder).append(SEPARATOR).append(id);
  106.   }
  107.   
  108.   @Override
  109.   public void readFields(DataInput in) throws IOException {
  110.     super.readFields(in);
  111.     taskId.readFields(in);
  112.   }
  113.   @Override
  114.   public void write(DataOutput out) throws IOException {
  115.     super.write(out);
  116.     taskId.write(out);
  117.   }
  118.   @Override
  119.   public int hashCode() {
  120.     return taskId.hashCode() * 5 + id;
  121.   }
  122.   
  123.   /**Compare TaskIds by first tipIds, then by task numbers. */
  124.   @Override
  125.   public int compareTo(ID o) {
  126.     TaskAttemptID that = (TaskAttemptID)o;
  127.     int tipComp = this.taskId.compareTo(that.taskId);
  128.     if(tipComp == 0) {
  129.       return this.id - that.id;
  130.     }
  131.     else return tipComp;
  132.   }
  133.   @Override
  134.   public String toString() { 
  135.     return appendTo(new StringBuilder(ATTEMPT)).toString();
  136.   }
  137.   /** Construct a TaskAttemptID object from given string 
  138.    * @return constructed TaskAttemptID object or null if the given String is null
  139.    * @throws IllegalArgumentException if the given string is malformed
  140.    */
  141.   public static TaskAttemptID forName(String str
  142.                                       ) throws IllegalArgumentException {
  143.     if(str == null)
  144.       return null;
  145.     try {
  146.       String[] parts = str.split(Character.toString(SEPARATOR));
  147.       if(parts.length == 6) {
  148.         if(parts[0].equals(ATTEMPT)) {
  149.           boolean isMap = false;
  150.           if(parts[3].equals("m")) isMap = true;
  151.           else if(parts[3].equals("r")) isMap = false;
  152.           else throw new Exception();
  153.           return new org.apache.hadoop.mapred.TaskAttemptID
  154.                        (parts[1],
  155.                         Integer.parseInt(parts[2]),
  156.                         isMap, Integer.parseInt(parts[4]), 
  157.                         Integer.parseInt(parts[5]));
  158.         }
  159.       }
  160.     } catch (Exception ex) {
  161.       //fall below
  162.     }
  163.     throw new IllegalArgumentException("TaskAttemptId string : " + str 
  164.         + " is not properly formed");
  165.   }
  166. }