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