JobID.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. import java.text.NumberFormat;
  23. import org.apache.hadoop.io.Text;
  24. /**
  25.  * JobID represents the immutable and unique identifier for 
  26.  * the job. JobID consists of two parts. First part 
  27.  * represents the jobtracker identifier, so that jobID to jobtracker map 
  28.  * is defined. For cluster setup this string is the jobtracker 
  29.  * start time, for local setting, it is "local".
  30.  * Second part of the JobID is the job number. <br> 
  31.  * An example JobID is : 
  32.  * <code>job_200707121733_0003</code> , which represents the third job 
  33.  * running at the jobtracker started at <code>200707121733</code>. 
  34.  * <p>
  35.  * Applications should never construct or parse JobID strings, but rather 
  36.  * use appropriate constructors or {@link #forName(String)} method. 
  37.  * 
  38.  * @see TaskID
  39.  * @see TaskAttemptID
  40.  * @see org.apache.hadoop.mapred.JobTracker#getNewJobId()
  41.  * @see org.apache.hadoop.mapred.JobTracker#getStartTime()
  42.  */
  43. public class JobID extends org.apache.hadoop.mapred.ID 
  44.                    implements Comparable<ID> {
  45.   protected static final String JOB = "job";
  46.   private final Text jtIdentifier;
  47.   
  48.   protected static final NumberFormat idFormat = NumberFormat.getInstance();
  49.   static {
  50.     idFormat.setGroupingUsed(false);
  51.     idFormat.setMinimumIntegerDigits(4);
  52.   }
  53.   
  54.   /**
  55.    * Constructs a JobID object 
  56.    * @param jtIdentifier jobTracker identifier
  57.    * @param id job number
  58.    */
  59.   public JobID(String jtIdentifier, int id) {
  60.     super(id);
  61.     this.jtIdentifier = new Text(jtIdentifier);
  62.   }
  63.   
  64.   public JobID() { 
  65.     jtIdentifier = new Text();
  66.   }
  67.   
  68.   public String getJtIdentifier() {
  69.     return jtIdentifier.toString();
  70.   }
  71.   
  72.   @Override
  73.   public boolean equals(Object o) {
  74.     if (!super.equals(o))
  75.       return false;
  76.     JobID that = (JobID)o;
  77.     return this.jtIdentifier.equals(that.jtIdentifier);
  78.   }
  79.   
  80.   /**Compare JobIds by first jtIdentifiers, then by job numbers*/
  81.   @Override
  82.   public int compareTo(ID o) {
  83.     JobID that = (JobID)o;
  84.     int jtComp = this.jtIdentifier.compareTo(that.jtIdentifier);
  85.     if(jtComp == 0) {
  86.       return this.id - that.id;
  87.     }
  88.     else return jtComp;
  89.   }
  90.   
  91.   /**
  92.    * Add the stuff after the "job" prefix to the given builder. This is useful,
  93.    * because the sub-ids use this substring at the start of their string.
  94.    * @param builder the builder to append to
  95.    * @return the builder that was passed in
  96.    */
  97.   public StringBuilder appendTo(StringBuilder builder) {
  98.     builder.append(SEPARATOR);
  99.     builder.append(jtIdentifier);
  100.     builder.append(SEPARATOR);
  101.     builder.append(idFormat.format(id));
  102.     return builder;
  103.   }
  104.   @Override
  105.   public int hashCode() {
  106.     return jtIdentifier.hashCode() + id;
  107.   }
  108.   @Override
  109.   public String toString() {
  110.     return appendTo(new StringBuilder(JOB)).toString();
  111.   }
  112.   @Override
  113.   public void readFields(DataInput in) throws IOException {
  114.     super.readFields(in);
  115.     this.jtIdentifier.readFields(in);
  116.   }
  117.   @Override
  118.   public void write(DataOutput out) throws IOException {
  119.     super.write(out);
  120.     jtIdentifier.write(out);
  121.   }
  122.   
  123.   /** Construct a JobId object from given string 
  124.    * @return constructed JobId object or null if the given String is null
  125.    * @throws IllegalArgumentException if the given string is malformed
  126.    */
  127.   public static JobID forName(String str) throws IllegalArgumentException {
  128.     if(str == null)
  129.       return null;
  130.     try {
  131.       String[] parts = str.split("_");
  132.       if(parts.length == 3) {
  133.         if(parts[0].equals(JOB)) {
  134.           return new org.apache.hadoop.mapred.JobID(parts[1], 
  135.                                                     Integer.parseInt(parts[2]));
  136.         }
  137.       }
  138.     }catch (Exception ex) {//fall below
  139.     }
  140.     throw new IllegalArgumentException("JobId string : " + str 
  141.         + " is not properly formed");
  142.   }
  143.   
  144. }