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 @Deprecated
082 public JobStatus(JobID jobid, float mapProgress, float reduceProgress,
083 float cleanupProgress, int runState) {
084 this(jobid, mapProgress, reduceProgress, cleanupProgress, runState, null,
085 null, null, null);
086 }
087
088 /**
089 * Create a job status object for a given jobid.
090 * @param jobid The jobid of the job
091 * @param mapProgress The progress made on the maps
092 * @param reduceProgress The progress made on the reduces
093 * @param runState The current state of the job
094 */
095 @Deprecated
096 public JobStatus(JobID jobid, float mapProgress, float reduceProgress,
097 int runState) {
098 this (jobid, mapProgress, reduceProgress, runState, null, null, null, null);
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 jp Priority of the job.
108 */
109 @Deprecated
110 public JobStatus(JobID jobid, float mapProgress, float reduceProgress,
111 float cleanupProgress, int runState, JobPriority jp) {
112 this(jobid, mapProgress, reduceProgress, cleanupProgress, runState, jp,
113 null, null, null, null);
114 }
115
116 /**
117 * Create a job status object for a given jobid.
118 * @param jobid The jobid of the job
119 * @param setupProgress The progress made on the setup
120 * @param mapProgress The progress made on the maps
121 * @param reduceProgress The progress made on the reduces
122 * @param cleanupProgress The progress made on the cleanup
123 * @param runState The current state of the job
124 * @param jp Priority of the job.
125 */
126 @Deprecated
127 public JobStatus(JobID jobid, float setupProgress, float mapProgress,
128 float reduceProgress, float cleanupProgress,
129 int runState, JobPriority jp) {
130 this(jobid, setupProgress, mapProgress, reduceProgress, cleanupProgress,
131 runState, jp, null, null, null, null);
132 }
133
134 /**
135 * Create a job status object for a given jobid.
136 * @param jobid The jobid of the job
137 * @param mapProgress The progress made on the maps
138 * @param reduceProgress The progress made on the reduces
139 * @param cleanupProgress The progress made on cleanup
140 * @param runState The current state of the job
141 * @param user userid of the person who submitted the job.
142 * @param jobName user-specified job name.
143 * @param jobFile job configuration file.
144 * @param trackingUrl link to the web-ui for details of the job.
145 */
146 public JobStatus(JobID jobid, float mapProgress, float reduceProgress,
147 float cleanupProgress, int runState,
148 String user, String jobName,
149 String jobFile, String trackingUrl) {
150 this(jobid, mapProgress, reduceProgress, cleanupProgress, runState,
151 JobPriority.NORMAL, user, jobName, jobFile, trackingUrl);
152 }
153
154 /**
155 * Create a job status object for a given jobid.
156 * @param jobid The jobid of the job
157 * @param mapProgress The progress made on the maps
158 * @param reduceProgress The progress made on the reduces
159 * @param runState The current state of the job
160 * @param user userid of the person who submitted the job.
161 * @param jobName user-specified job name.
162 * @param jobFile job configuration file.
163 * @param trackingUrl link to the web-ui for details of the job.
164 */
165 public JobStatus(JobID jobid, float mapProgress, float reduceProgress,
166 int runState, String user, String jobName,
167 String jobFile, String trackingUrl) {
168 this(jobid, mapProgress, reduceProgress, 0.0f, runState, user, jobName,
169 jobFile, trackingUrl);
170 }
171
172 /**
173 * Create a job status object for a given jobid.
174 * @param jobid The jobid of the job
175 * @param mapProgress The progress made on the maps
176 * @param reduceProgress The progress made on the reduces
177 * @param runState The current state of the job
178 * @param jp Priority of the job.
179 * @param user userid of the person who submitted the job.
180 * @param jobName user-specified job name.
181 * @param jobFile job configuration file.
182 * @param trackingUrl link to the web-ui for details of the job.
183 */
184 public JobStatus(JobID jobid, float mapProgress, float reduceProgress,
185 float cleanupProgress, int runState, JobPriority jp,
186 String user, String jobName, String jobFile,
187 String trackingUrl) {
188 this(jobid, 0.0f, mapProgress, reduceProgress,
189 cleanupProgress, runState, jp, user, jobName, jobFile,
190 trackingUrl);
191 }
192
193 /**
194 * Create a job status object for a given jobid.
195 * @param jobid The jobid of the job
196 * @param setupProgress The progress made on the setup
197 * @param mapProgress The progress made on the maps
198 * @param reduceProgress The progress made on the reduces
199 * @param cleanupProgress The progress made on the cleanup
200 * @param runState The current state of the job
201 * @param jp Priority of the job.
202 * @param user userid of the person who submitted the job.
203 * @param jobName user-specified job name.
204 * @param jobFile job configuration file.
205 * @param trackingUrl link to the web-ui for details of the job.
206 */
207 public JobStatus(JobID jobid, float setupProgress, float mapProgress,
208 float reduceProgress, float cleanupProgress,
209 int runState, JobPriority jp, String user, String jobName,
210 String jobFile, String trackingUrl) {
211 this(jobid, setupProgress, mapProgress, reduceProgress, cleanupProgress,
212 runState, jp, user, jobName, "default", jobFile, trackingUrl);
213 }
214
215 /**
216 * Create a job status object for a given jobid.
217 * @param jobid The jobid of the job
218 * @param setupProgress The progress made on the setup
219 * @param mapProgress The progress made on the maps
220 * @param reduceProgress The progress made on the reduces
221 * @param cleanupProgress The progress made on the cleanup
222 * @param runState The current state of the job
223 * @param jp Priority of the job.
224 * @param user userid of the person who submitted the job.
225 * @param jobName user-specified job name.
226 * @param jobFile job configuration file.
227 * @param trackingUrl link to the web-ui for details of the job.
228 * @param isUber Whether job running in uber mode
229 */
230 public JobStatus(JobID jobid, float setupProgress, float mapProgress,
231 float reduceProgress, float cleanupProgress,
232 int runState, JobPriority jp, String user, String jobName,
233 String jobFile, String trackingUrl, boolean isUber) {
234 this(jobid, setupProgress, mapProgress, reduceProgress, cleanupProgress,
235 runState, jp, user, jobName, "default", jobFile, trackingUrl, isUber);
236 }
237
238 /**
239 * Create a job status object for a given jobid.
240 * @param jobid The jobid of the job
241 * @param setupProgress The progress made on the setup
242 * @param mapProgress The progress made on the maps
243 * @param reduceProgress The progress made on the reduces
244 * @param cleanupProgress The progress made on the cleanup
245 * @param runState The current state of the job
246 * @param jp Priority of the job.
247 * @param user userid of the person who submitted the job.
248 * @param jobName user-specified job name.
249 * @param queue job queue name.
250 * @param jobFile job configuration file.
251 * @param trackingUrl link to the web-ui for details of the job.
252 */
253 public JobStatus(JobID jobid, float setupProgress, float mapProgress,
254 float reduceProgress, float cleanupProgress,
255 int runState, JobPriority jp,
256 String user, String jobName, String queue,
257 String jobFile, String trackingUrl) {
258 this(jobid, setupProgress, mapProgress, reduceProgress, cleanupProgress,
259 runState, jp,
260 user, jobName, queue, jobFile, trackingUrl, false);
261 }
262
263 /**
264 * Create a job status object for a given jobid.
265 * @param jobid The jobid of the job
266 * @param setupProgress The progress made on the setup
267 * @param mapProgress The progress made on the maps
268 * @param reduceProgress The progress made on the reduces
269 * @param cleanupProgress The progress made on the cleanup
270 * @param runState The current state of the job
271 * @param jp Priority of the job.
272 * @param user userid of the person who submitted the job.
273 * @param jobName user-specified job name.
274 * @param queue job queue name.
275 * @param jobFile job configuration file.
276 * @param trackingUrl link to the web-ui for details of the job.
277 * @param isUber Whether job running in uber mode
278 */
279 public JobStatus(JobID jobid, float setupProgress, float mapProgress,
280 float reduceProgress, float cleanupProgress,
281 int runState, JobPriority jp,
282 String user, String jobName, String queue,
283 String jobFile, String trackingUrl, boolean isUber) {
284 super(jobid, setupProgress, mapProgress, reduceProgress, cleanupProgress,
285 getEnum(runState), org.apache.hadoop.mapreduce.JobPriority.valueOf(jp.name()),
286 user, jobName, queue, jobFile, trackingUrl, isUber);
287 }
288
289 public static JobStatus downgrade(org.apache.hadoop.mapreduce.JobStatus stat){
290 JobStatus old = new JobStatus(JobID.downgrade(stat.getJobID()),
291 stat.getSetupProgress(), stat.getMapProgress(), stat.getReduceProgress(),
292 stat.getCleanupProgress(), stat.getState().getValue(),
293 JobPriority.valueOf(stat.getPriority().name()),
294 stat.getUsername(), stat.getJobName(), stat.getQueue(), stat.getJobFile(),
295 stat.getTrackingUrl(), stat.isUber());
296 old.setStartTime(stat.getStartTime());
297 old.setFinishTime(stat.getFinishTime());
298 old.setSchedulingInfo(stat.getSchedulingInfo());
299 old.setHistoryFile(stat.getHistoryFile());
300 return old;
301 }
302 /**
303 * @deprecated use getJobID instead
304 */
305 @Deprecated
306 public String getJobId() { return getJobID().toString(); }
307
308 /**
309 * @return The jobid of the Job
310 */
311 public JobID getJobID() { return JobID.downgrade(super.getJobID()); }
312
313 /**
314 * Return the priority of the job
315 * @return job priority
316 */
317 public synchronized JobPriority getJobPriority() {
318 return JobPriority.valueOf(super.getPriority().name());
319 }
320
321 /**
322 * Sets the map progress of this job
323 * @param p The value of map progress to set to
324 */
325 protected synchronized void setMapProgress(float p) {
326 super.setMapProgress(p);
327 }
328
329 /**
330 * Sets the cleanup progress of this job
331 * @param p The value of cleanup progress to set to
332 */
333 protected synchronized void setCleanupProgress(float p) {
334 super.setCleanupProgress(p);
335 }
336
337 /**
338 * Sets the setup progress of this job
339 * @param p The value of setup progress to set to
340 */
341 protected synchronized void setSetupProgress(float p) {
342 super.setSetupProgress(p);
343 }
344
345 /**
346 * Sets the reduce progress of this Job
347 * @param p The value of reduce progress to set to
348 */
349 protected synchronized void setReduceProgress(float p) {
350 super.setReduceProgress(p);
351 }
352
353 /**
354 * Set the finish time of the job
355 * @param finishTime The finishTime of the job
356 */
357 protected synchronized void setFinishTime(long finishTime) {
358 super.setFinishTime(finishTime);
359 }
360
361 /**
362 * Set the job history file url for a completed job
363 */
364 protected synchronized void setHistoryFile(String historyFile) {
365 super.setHistoryFile(historyFile);
366 }
367
368 /**
369 * Set the link to the web-ui for details of the job.
370 */
371 protected synchronized void setTrackingUrl(String trackingUrl) {
372 super.setTrackingUrl(trackingUrl);
373 }
374
375 /**
376 * Set the job retire flag to true.
377 */
378 protected synchronized void setRetired() {
379 super.setRetired();
380 }
381
382 /**
383 * Change the current run state of the job.
384 *
385 * The setter is public to be compatible with M/R 1.x, however, it should be
386 * used internally.
387 *
388 * @param state the state of the job
389 */
390 @InterfaceAudience.Private
391 public synchronized void setRunState(int state) {
392 super.setState(getEnum(state));
393 }
394
395 /**
396 * @return running state of the job
397 */
398 public synchronized int getRunState() { return super.getState().getValue(); }
399
400
401 /**
402 * Set the start time of the job
403 * @param startTime The startTime of the job
404 */
405 protected synchronized void setStartTime(long startTime) {
406 super.setStartTime(startTime);
407 }
408
409 /**
410 * @param userName The username of the job
411 */
412 protected synchronized void setUsername(String userName) {
413 super.setUsername(userName);
414 }
415
416 /**
417 * Used to set the scheduling information associated to a particular Job.
418 *
419 * The setter is public to be compatible with M/R 1.x, however, it should be
420 * used internally.
421 *
422 * @param schedulingInfo Scheduling information of the job
423 */
424 @InterfaceAudience.Private
425 public synchronized void setSchedulingInfo(String schedulingInfo) {
426 super.setSchedulingInfo(schedulingInfo);
427 }
428
429 protected synchronized void setJobACLs(Map<JobACL, AccessControlList> acls) {
430 super.setJobACLs(acls);
431 }
432
433 public synchronized void setFailureInfo(String failureInfo) {
434 super.setFailureInfo(failureInfo);
435 }
436
437 /**
438 * Set the priority of the job, defaulting to NORMAL.
439 * @param jp new job priority
440 */
441 public synchronized void setJobPriority(JobPriority jp) {
442 super.setPriority(
443 org.apache.hadoop.mapreduce.JobPriority.valueOf(jp.name()));
444 }
445
446 /**
447 * @return Percentage of progress in maps
448 */
449 public synchronized float mapProgress() { return super.getMapProgress(); }
450
451 /**
452 * @return Percentage of progress in cleanup
453 */
454 public synchronized float cleanupProgress() {
455 return super.getCleanupProgress();
456 }
457
458 /**
459 * @return Percentage of progress in setup
460 */
461 public synchronized float setupProgress() {
462 return super.getSetupProgress();
463 }
464
465 /**
466 * @return Percentage of progress in reduce
467 */
468 public synchronized float reduceProgress() {
469 return super.getReduceProgress();
470 }
471
472 // A utility to convert new job runstates to the old ones.
473 static int getOldNewJobRunState(
474 org.apache.hadoop.mapreduce.JobStatus.State state) {
475 return state.getValue();
476 }
477 }