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 package org.apache.hadoop.mapred;
019
020 import java.util.Map;
021
022 import org.apache.hadoop.classification.InterfaceAudience;
023 import org.apache.hadoop.classification.InterfaceStability;
024 import org.apache.hadoop.mapreduce.JobACL;
025 import org.apache.hadoop.security.authorize.AccessControlList;
026
027 /**************************************************
028 * Describes the current status of a job. This is
029 * not intended to be a comprehensive piece of data.
030 * For that, look at JobProfile.
031 *************************************************
032 **/
033 @InterfaceAudience.Public
034 @InterfaceStability.Stable
035 public class JobStatus extends org.apache.hadoop.mapreduce.JobStatus {
036
037 public static final int RUNNING =
038 org.apache.hadoop.mapreduce.JobStatus.State.RUNNING.getValue();
039 public static final int SUCCEEDED =
040 org.apache.hadoop.mapreduce.JobStatus.State.SUCCEEDED.getValue();
041 public static final int FAILED =
042 org.apache.hadoop.mapreduce.JobStatus.State.FAILED.getValue();
043 public static final int PREP =
044 org.apache.hadoop.mapreduce.JobStatus.State.PREP.getValue();
045 public static final int KILLED =
046 org.apache.hadoop.mapreduce.JobStatus.State.KILLED.getValue();
047
048 private static final String UNKNOWN = "UNKNOWN";
049
050 private static final String[] runStates =
051 {UNKNOWN, "RUNNING", "SUCCEEDED", "FAILED", "PREP", "KILLED"};
052
053 /**
054 * Helper method to get human-readable state of the job.
055 * @param state job state
056 * @return human-readable state of the job
057 */
058 public static String getJobRunState(int state) {
059 if (state < 1 || state >= runStates.length) {
060 return UNKNOWN;
061 }
062 return runStates[state];
063 }
064
065 static org.apache.hadoop.mapreduce.JobStatus.State getEnum(int state) {
066 switch (state) {
067 case 1: return org.apache.hadoop.mapreduce.JobStatus.State.RUNNING;
068 case 2: return org.apache.hadoop.mapreduce.JobStatus.State.SUCCEEDED;
069 case 3: return org.apache.hadoop.mapreduce.JobStatus.State.FAILED;
070 case 4: return org.apache.hadoop.mapreduce.JobStatus.State.PREP;
071 case 5: return org.apache.hadoop.mapreduce.JobStatus.State.KILLED;
072 }
073 return null;
074 }
075
076 /**
077 */
078 public JobStatus() {
079 }
080
081 /**
082 * Create a job status object for a given jobid.
083 * @param jobid The jobid of the job
084 * @param mapProgress The progress made on the maps
085 * @param reduceProgress The progress made on the reduces
086 * @param cleanupProgress The progress made on cleanup
087 * @param runState The current state of the job
088 * @param user userid of the person who submitted the job.
089 * @param jobName user-specified job name.
090 * @param jobFile job configuration file.
091 * @param trackingUrl link to the web-ui for details of the job.
092 */
093 public JobStatus(JobID jobid, float mapProgress, float reduceProgress,
094 float cleanupProgress, int runState,
095 String user, String jobName,
096 String jobFile, String trackingUrl) {
097 this(jobid, mapProgress, reduceProgress, cleanupProgress, runState,
098 JobPriority.NORMAL, user, jobName, jobFile, trackingUrl);
099 }
100
101 /**
102 * Create a job status object for a given jobid.
103 * @param jobid The jobid of the job
104 * @param mapProgress The progress made on the maps
105 * @param reduceProgress The progress made on the reduces
106 * @param runState The current state of the job
107 * @param user userid of the person who submitted the job.
108 * @param jobName user-specified job name.
109 * @param jobFile job configuration file.
110 * @param trackingUrl link to the web-ui for details of the job.
111 */
112 public JobStatus(JobID jobid, float mapProgress, float reduceProgress,
113 int runState, String user, String jobName,
114 String jobFile, String trackingUrl) {
115 this(jobid, mapProgress, reduceProgress, 0.0f, runState, user, jobName,
116 jobFile, trackingUrl);
117 }
118
119 /**
120 * Create a job status object for a given jobid.
121 * @param jobid The jobid of the job
122 * @param mapProgress The progress made on the maps
123 * @param reduceProgress The progress made on the reduces
124 * @param runState The current state of the job
125 * @param jp Priority of the job.
126 * @param user userid of the person who submitted the job.
127 * @param jobName user-specified job name.
128 * @param jobFile job configuration file.
129 * @param trackingUrl link to the web-ui for details of the job.
130 */
131 public JobStatus(JobID jobid, float mapProgress, float reduceProgress,
132 float cleanupProgress, int runState, JobPriority jp,
133 String user, String jobName, String jobFile,
134 String trackingUrl) {
135 this(jobid, 0.0f, mapProgress, reduceProgress,
136 cleanupProgress, runState, jp, user, jobName, jobFile,
137 trackingUrl);
138 }
139
140 /**
141 * Create a job status object for a given jobid.
142 * @param jobid The jobid of the job
143 * @param setupProgress The progress made on the setup
144 * @param mapProgress The progress made on the maps
145 * @param reduceProgress The progress made on the reduces
146 * @param cleanupProgress The progress made on the cleanup
147 * @param runState The current state of the job
148 * @param jp Priority of the job.
149 * @param user userid of the person who submitted the job.
150 * @param jobName user-specified job name.
151 * @param jobFile job configuration file.
152 * @param trackingUrl link to the web-ui for details of the job.
153 */
154 public JobStatus(JobID jobid, float setupProgress, float mapProgress,
155 float reduceProgress, float cleanupProgress,
156 int runState, JobPriority jp, String user, String jobName,
157 String jobFile, String trackingUrl) {
158 this(jobid, setupProgress, mapProgress, reduceProgress, cleanupProgress,
159 runState, jp, user, jobName, "default", jobFile, trackingUrl);
160 }
161
162 /**
163 * Create a job status object for a given jobid.
164 * @param jobid The jobid of the job
165 * @param setupProgress The progress made on the setup
166 * @param mapProgress The progress made on the maps
167 * @param reduceProgress The progress made on the reduces
168 * @param cleanupProgress The progress made on the cleanup
169 * @param runState The current state of the job
170 * @param jp Priority of the job.
171 * @param user userid of the person who submitted the job.
172 * @param jobName user-specified job name.
173 * @param jobFile job configuration file.
174 * @param trackingUrl link to the web-ui for details of the job.
175 * @param isUber Whether job running in uber mode
176 */
177 public JobStatus(JobID jobid, float setupProgress, float mapProgress,
178 float reduceProgress, float cleanupProgress,
179 int runState, JobPriority jp, String user, String jobName,
180 String jobFile, String trackingUrl, boolean isUber) {
181 this(jobid, setupProgress, mapProgress, reduceProgress, cleanupProgress,
182 runState, jp, user, jobName, "default", jobFile, trackingUrl, isUber);
183 }
184
185 /**
186 * Create a job status object for a given jobid.
187 * @param jobid The jobid of the job
188 * @param setupProgress The progress made on the setup
189 * @param mapProgress The progress made on the maps
190 * @param reduceProgress The progress made on the reduces
191 * @param cleanupProgress The progress made on the cleanup
192 * @param runState The current state of the job
193 * @param jp Priority of the job.
194 * @param user userid of the person who submitted the job.
195 * @param jobName user-specified job name.
196 * @param queue job queue name.
197 * @param jobFile job configuration file.
198 * @param trackingUrl link to the web-ui for details of the job.
199 */
200 public JobStatus(JobID jobid, float setupProgress, float mapProgress,
201 float reduceProgress, float cleanupProgress,
202 int runState, JobPriority jp,
203 String user, String jobName, String queue,
204 String jobFile, String trackingUrl) {
205 this(jobid, setupProgress, mapProgress, reduceProgress, cleanupProgress,
206 runState, jp,
207 user, jobName, queue, jobFile, trackingUrl, false);
208 }
209
210 /**
211 * Create a job status object for a given jobid.
212 * @param jobid The jobid of the job
213 * @param setupProgress The progress made on the setup
214 * @param mapProgress The progress made on the maps
215 * @param reduceProgress The progress made on the reduces
216 * @param cleanupProgress The progress made on the cleanup
217 * @param runState The current state of the job
218 * @param jp Priority of the job.
219 * @param user userid of the person who submitted the job.
220 * @param jobName user-specified job name.
221 * @param queue job queue name.
222 * @param jobFile job configuration file.
223 * @param trackingUrl link to the web-ui for details of the job.
224 * @param isUber Whether job running in uber mode
225 */
226 public JobStatus(JobID jobid, float setupProgress, float mapProgress,
227 float reduceProgress, float cleanupProgress,
228 int runState, JobPriority jp,
229 String user, String jobName, String queue,
230 String jobFile, String trackingUrl, boolean isUber) {
231 super(jobid, setupProgress, mapProgress, reduceProgress, cleanupProgress,
232 getEnum(runState), org.apache.hadoop.mapreduce.JobPriority.valueOf(jp.name()),
233 user, jobName, queue, jobFile, trackingUrl, isUber);
234 }
235
236 public static JobStatus downgrade(org.apache.hadoop.mapreduce.JobStatus stat){
237 JobStatus old = new JobStatus(JobID.downgrade(stat.getJobID()),
238 stat.getSetupProgress(), stat.getMapProgress(), stat.getReduceProgress(),
239 stat.getCleanupProgress(), stat.getState().getValue(),
240 JobPriority.valueOf(stat.getPriority().name()),
241 stat.getUsername(), stat.getJobName(), stat.getJobFile(),
242 stat.getTrackingUrl(), stat.isUber());
243 old.setStartTime(stat.getStartTime());
244 old.setFinishTime(stat.getFinishTime());
245 old.setSchedulingInfo(stat.getSchedulingInfo());
246 old.setHistoryFile(stat.getHistoryFile());
247 return old;
248 }
249 /**
250 * @deprecated use getJobID instead
251 */
252 @Deprecated
253 public String getJobId() { return getJobID().toString(); }
254
255 /**
256 * @return The jobid of the Job
257 */
258 public JobID getJobID() { return JobID.downgrade(super.getJobID()); }
259
260 /**
261 * Return the priority of the job
262 * @return job priority
263 */
264 public synchronized JobPriority getJobPriority() {
265 return JobPriority.valueOf(super.getPriority().name());
266 }
267
268 /**
269 * Sets the map progress of this job
270 * @param p The value of map progress to set to
271 */
272 protected synchronized void setMapProgress(float p) {
273 super.setMapProgress(p);
274 }
275
276 /**
277 * Sets the cleanup progress of this job
278 * @param p The value of cleanup progress to set to
279 */
280 protected synchronized void setCleanupProgress(float p) {
281 super.setCleanupProgress(p);
282 }
283
284 /**
285 * Sets the setup progress of this job
286 * @param p The value of setup progress to set to
287 */
288 protected synchronized void setSetupProgress(float p) {
289 super.setSetupProgress(p);
290 }
291
292 /**
293 * Sets the reduce progress of this Job
294 * @param p The value of reduce progress to set to
295 */
296 protected synchronized void setReduceProgress(float p) {
297 super.setReduceProgress(p);
298 }
299
300 /**
301 * Set the finish time of the job
302 * @param finishTime The finishTime of the job
303 */
304 protected synchronized void setFinishTime(long finishTime) {
305 super.setFinishTime(finishTime);
306 }
307
308 /**
309 * Set the job history file url for a completed job
310 */
311 protected synchronized void setHistoryFile(String historyFile) {
312 super.setHistoryFile(historyFile);
313 }
314
315 /**
316 * Set the link to the web-ui for details of the job.
317 */
318 protected synchronized void setTrackingUrl(String trackingUrl) {
319 super.setTrackingUrl(trackingUrl);
320 }
321
322 /**
323 * Set the job retire flag to true.
324 */
325 protected synchronized void setRetired() {
326 super.setRetired();
327 }
328
329 /**
330 * Change the current run state of the job.
331 */
332 protected synchronized void setRunState(int state) {
333 super.setState(getEnum(state));
334 }
335
336 /**
337 * @return running state of the job
338 */
339 public synchronized int getRunState() { return super.getState().getValue(); }
340
341
342 /**
343 * Set the start time of the job
344 * @param startTime The startTime of the job
345 */
346 protected synchronized void setStartTime(long startTime) {
347 super.setStartTime(startTime);
348 }
349
350 /**
351 * @param userName The username of the job
352 */
353 protected synchronized void setUsername(String userName) {
354 super.setUsername(userName);
355 }
356
357 /**
358 * Used to set the scheduling information associated to a particular Job.
359 *
360 * @param schedulingInfo Scheduling information of the job
361 */
362 protected synchronized void setSchedulingInfo(String schedulingInfo) {
363 super.setSchedulingInfo(schedulingInfo);
364 }
365
366 protected synchronized void setJobACLs(Map<JobACL, AccessControlList> acls) {
367 super.setJobACLs(acls);
368 }
369
370 public synchronized void setFailureInfo(String failureInfo) {
371 super.setFailureInfo(failureInfo);
372 }
373
374 /**
375 * Set the priority of the job, defaulting to NORMAL.
376 * @param jp new job priority
377 */
378 public synchronized void setJobPriority(JobPriority jp) {
379 super.setPriority(
380 org.apache.hadoop.mapreduce.JobPriority.valueOf(jp.name()));
381 }
382
383 /**
384 * @return Percentage of progress in maps
385 */
386 public synchronized float mapProgress() { return super.getMapProgress(); }
387
388 /**
389 * @return Percentage of progress in cleanup
390 */
391 public synchronized float cleanupProgress() {
392 return super.getCleanupProgress();
393 }
394
395 /**
396 * @return Percentage of progress in setup
397 */
398 public synchronized float setupProgress() {
399 return super.getSetupProgress();
400 }
401
402 /**
403 * @return Percentage of progress in reduce
404 */
405 public synchronized float reduceProgress() {
406 return super.getReduceProgress();
407 }
408
409 // A utility to convert new job runstates to the old ones.
410 static int getOldNewJobRunState(
411 org.apache.hadoop.mapreduce.JobStatus.State state) {
412 return state.getValue();
413 }
414 }