001    /**
002     * Licensed to the Apache Software Foundation (ASF) under one
003     * or more contributor license agreements.  See the NOTICE file
004     * distributed with this work for additional information
005     * regarding copyright ownership.  The ASF licenses this file
006     * to you under the Apache License, Version 2.0 (the
007     * "License"); you may not use this file except in compliance
008     * with the License.  You may obtain a copy of the License at
009     *
010     *     http://www.apache.org/licenses/LICENSE-2.0
011     *
012     * Unless required by applicable law or agreed to in writing, software
013     * distributed under the License is distributed on an "AS IS" BASIS,
014     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015     * See the License for the specific language governing permissions and
016     * limitations under the License.
017     */
018    
019    package org.apache.hadoop.mapred.jobcontrol;
020    
021    
022    import java.io.IOException;
023    import java.util.ArrayList;
024    import java.util.List;
025    
026    import org.apache.commons.logging.Log;
027    import org.apache.commons.logging.LogFactory;
028    import org.apache.hadoop.classification.InterfaceAudience;
029    import org.apache.hadoop.classification.InterfaceStability;
030    import org.apache.hadoop.mapred.JobClient;
031    import org.apache.hadoop.mapred.JobConf;
032    import org.apache.hadoop.mapred.JobID;
033    import org.apache.hadoop.mapreduce.lib.jobcontrol.ControlledJob;
034    
035    @InterfaceAudience.Public
036    @InterfaceStability.Stable
037    public class Job extends ControlledJob {
038      static final Log LOG = LogFactory.getLog(Job.class);
039    
040      final public static int SUCCESS = 0;
041      final public static int WAITING = 1;
042      final public static int RUNNING = 2;
043      final public static int READY = 3;
044      final public static int FAILED = 4;
045      final public static int DEPENDENT_FAILED = 5;
046    
047      /** 
048       * Construct a job.
049       * @param jobConf a mapred job configuration representing a job to be executed.
050       * @param dependingJobs an array of jobs the current job depends on
051       */
052      @SuppressWarnings("unchecked")
053      public Job(JobConf jobConf, ArrayList<?> dependingJobs) throws IOException {
054        super(new org.apache.hadoop.mapreduce.Job(jobConf), 
055              (List<ControlledJob>) dependingJobs);
056      }
057    
058      public Job(JobConf conf) throws IOException {
059        super(conf);
060      }
061    
062      /**
063       * @return the mapred ID of this job as assigned by the 
064       * mapred framework.
065       */
066      public JobID getAssignedJobID() {
067        org.apache.hadoop.mapreduce.JobID temp = super.getMapredJobID();
068        if(temp == null) {
069          return null;
070        }
071        return JobID.downgrade(temp);
072      }
073    
074      /**
075       * @deprecated setAssignedJobID should not be called.
076       * JOBID is set by the framework.
077       */
078      @Deprecated
079      public void setAssignedJobID(JobID mapredJobID) {
080        // do nothing
081      }
082    
083      /**
084       * @return the mapred job conf of this job
085       */
086      public synchronized JobConf getJobConf() {
087        return new JobConf(super.getJob().getConfiguration());
088      }
089    
090    
091      /**
092       * Set the mapred job conf for this job.
093       * @param jobConf the mapred job conf for this job.
094       */
095      public synchronized void setJobConf(JobConf jobConf) {
096        try {
097          super.setJob(new org.apache.hadoop.mapreduce.Job(jobConf));
098        } catch (IOException ioe) { 
099          LOG.info("Exception" + ioe);
100        }
101      }
102    
103      /**
104       * @return the state of this job
105       */
106      public synchronized int getState() {
107        State state = super.getJobState();
108        if (state == State.SUCCESS) {
109          return SUCCESS;
110        } 
111        if (state == State.WAITING) {
112          return WAITING;
113        }
114        if (state == State.RUNNING) {
115          return RUNNING;
116        }
117        if (state == State.READY) {
118          return READY;
119        }
120        if (state == State.FAILED ) {
121          return FAILED;
122        }
123        if (state == State.DEPENDENT_FAILED ) {
124          return DEPENDENT_FAILED;
125        }
126        return -1;
127      }
128      
129      /**
130       * @return the job client of this job
131       */
132      public JobClient getJobClient() {
133        try {
134          return new JobClient(super.getJob().getConfiguration());
135        } catch (IOException ioe) {
136          return null;
137        }
138      }
139    
140      /**
141       * @return the depending jobs of this job
142       */
143      public ArrayList<Job> getDependingJobs() {
144        return JobControl.castToJobList(super.getDependentJobs());
145      }
146    
147    }