source: proiecte/HadoopJUnit/hadoop-0.20.1/src/mapred/org/apache/hadoop/mapreduce/TaskID.java @ 120

Last change on this file since 120 was 120, checked in by (none), 14 years ago

Added the mail files for the Hadoop JUNit Project

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