|
@@ -47,7 +47,6 @@ import org.apache.hadoop.mapreduce.Counters;
|
|
import org.apache.hadoop.mapreduce.JobACL;
|
|
import org.apache.hadoop.mapreduce.JobACL;
|
|
import org.apache.hadoop.mapreduce.JobContext;
|
|
import org.apache.hadoop.mapreduce.JobContext;
|
|
import org.apache.hadoop.mapreduce.MRJobConfig;
|
|
import org.apache.hadoop.mapreduce.MRJobConfig;
|
|
-import org.apache.hadoop.mapreduce.OutputCommitter;
|
|
|
|
import org.apache.hadoop.mapreduce.TypeConverter;
|
|
import org.apache.hadoop.mapreduce.TypeConverter;
|
|
import org.apache.hadoop.mapreduce.jobhistory.JobFinishedEvent;
|
|
import org.apache.hadoop.mapreduce.jobhistory.JobFinishedEvent;
|
|
import org.apache.hadoop.mapreduce.jobhistory.JobHistoryEvent;
|
|
import org.apache.hadoop.mapreduce.jobhistory.JobHistoryEvent;
|
|
@@ -77,14 +76,20 @@ import org.apache.hadoop.mapreduce.v2.api.records.TaskState;
|
|
import org.apache.hadoop.mapreduce.v2.api.records.TaskType;
|
|
import org.apache.hadoop.mapreduce.v2.api.records.TaskType;
|
|
import org.apache.hadoop.mapreduce.v2.app.AppContext;
|
|
import org.apache.hadoop.mapreduce.v2.app.AppContext;
|
|
import org.apache.hadoop.mapreduce.v2.app.TaskAttemptListener;
|
|
import org.apache.hadoop.mapreduce.v2.app.TaskAttemptListener;
|
|
|
|
+import org.apache.hadoop.mapreduce.v2.app.commit.CommitterJobAbortEvent;
|
|
|
|
+import org.apache.hadoop.mapreduce.v2.app.commit.CommitterJobCommitEvent;
|
|
|
|
+import org.apache.hadoop.mapreduce.v2.app.commit.CommitterJobSetupEvent;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.JobStateInternal;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.JobStateInternal;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.Task;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.Task;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.TaskAttempt;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.TaskAttempt;
|
|
|
|
+import org.apache.hadoop.mapreduce.v2.app.job.event.JobAbortCompletedEvent;
|
|
|
|
+import org.apache.hadoop.mapreduce.v2.app.job.event.JobCommitFailedEvent;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.event.JobCounterUpdateEvent;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.event.JobCounterUpdateEvent;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.event.JobDiagnosticsUpdateEvent;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.event.JobDiagnosticsUpdateEvent;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.event.JobEvent;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.event.JobEvent;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.event.JobEventType;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.event.JobEventType;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.event.JobFinishEvent;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.event.JobFinishEvent;
|
|
|
|
+import org.apache.hadoop.mapreduce.v2.app.job.event.JobSetupFailedEvent;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.event.JobTaskAttemptCompletedEvent;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.event.JobTaskAttemptCompletedEvent;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.event.JobTaskAttemptFetchFailureEvent;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.event.JobTaskAttemptFetchFailureEvent;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.event.JobTaskEvent;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.event.JobTaskEvent;
|
|
@@ -138,7 +143,6 @@ public class JobImpl implements org.apache.hadoop.mapreduce.v2.app.job.Job,
|
|
private final Clock clock;
|
|
private final Clock clock;
|
|
private final JobACLsManager aclsManager;
|
|
private final JobACLsManager aclsManager;
|
|
private final String username;
|
|
private final String username;
|
|
- private final OutputCommitter committer;
|
|
|
|
private final Map<JobACL, AccessControlList> jobACLs;
|
|
private final Map<JobACL, AccessControlList> jobACLs;
|
|
private float setupWeight = 0.05f;
|
|
private float setupWeight = 0.05f;
|
|
private float cleanupWeight = 0.05f;
|
|
private float cleanupWeight = 0.05f;
|
|
@@ -176,6 +180,7 @@ public class JobImpl implements org.apache.hadoop.mapreduce.v2.app.job.Job,
|
|
private Counters fullCounters = null;
|
|
private Counters fullCounters = null;
|
|
private Counters finalMapCounters = null;
|
|
private Counters finalMapCounters = null;
|
|
private Counters finalReduceCounters = null;
|
|
private Counters finalReduceCounters = null;
|
|
|
|
+
|
|
// FIXME:
|
|
// FIXME:
|
|
//
|
|
//
|
|
// Can then replace task-level uber counters (MR-2424) with job-level ones
|
|
// Can then replace task-level uber counters (MR-2424) with job-level ones
|
|
@@ -245,7 +250,7 @@ public class JobImpl implements org.apache.hadoop.mapreduce.v2.app.job.Job,
|
|
DIAGNOSTIC_UPDATE_TRANSITION)
|
|
DIAGNOSTIC_UPDATE_TRANSITION)
|
|
.addTransition(JobStateInternal.INITED, JobStateInternal.INITED,
|
|
.addTransition(JobStateInternal.INITED, JobStateInternal.INITED,
|
|
JobEventType.JOB_COUNTER_UPDATE, COUNTER_UPDATE_TRANSITION)
|
|
JobEventType.JOB_COUNTER_UPDATE, COUNTER_UPDATE_TRANSITION)
|
|
- .addTransition(JobStateInternal.INITED, JobStateInternal.RUNNING,
|
|
|
|
|
|
+ .addTransition(JobStateInternal.INITED, JobStateInternal.SETUP,
|
|
JobEventType.JOB_START,
|
|
JobEventType.JOB_START,
|
|
new StartTransition())
|
|
new StartTransition())
|
|
.addTransition(JobStateInternal.INITED, JobStateInternal.KILLED,
|
|
.addTransition(JobStateInternal.INITED, JobStateInternal.KILLED,
|
|
@@ -257,19 +262,43 @@ public class JobImpl implements org.apache.hadoop.mapreduce.v2.app.job.Job,
|
|
// Ignore-able events
|
|
// Ignore-able events
|
|
.addTransition(JobStateInternal.INITED, JobStateInternal.INITED,
|
|
.addTransition(JobStateInternal.INITED, JobStateInternal.INITED,
|
|
JobEventType.JOB_UPDATED_NODES)
|
|
JobEventType.JOB_UPDATED_NODES)
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+ // Transitions from SETUP state
|
|
|
|
+ .addTransition(JobStateInternal.SETUP, JobStateInternal.SETUP,
|
|
|
|
+ JobEventType.JOB_DIAGNOSTIC_UPDATE,
|
|
|
|
+ DIAGNOSTIC_UPDATE_TRANSITION)
|
|
|
|
+ .addTransition(JobStateInternal.SETUP, JobStateInternal.SETUP,
|
|
|
|
+ JobEventType.JOB_COUNTER_UPDATE, COUNTER_UPDATE_TRANSITION)
|
|
|
|
+ .addTransition(JobStateInternal.SETUP, JobStateInternal.RUNNING,
|
|
|
|
+ JobEventType.JOB_SETUP_COMPLETED,
|
|
|
|
+ new SetupCompletedTransition())
|
|
|
|
+ .addTransition(JobStateInternal.SETUP, JobStateInternal.FAIL_ABORT,
|
|
|
|
+ JobEventType.JOB_SETUP_FAILED,
|
|
|
|
+ new SetupFailedTransition())
|
|
|
|
+ .addTransition(JobStateInternal.SETUP, JobStateInternal.KILL_ABORT,
|
|
|
|
+ JobEventType.JOB_KILL,
|
|
|
|
+ new KilledDuringSetupTransition())
|
|
|
|
+ .addTransition(JobStateInternal.SETUP, JobStateInternal.ERROR,
|
|
|
|
+ JobEventType.INTERNAL_ERROR,
|
|
|
|
+ INTERNAL_ERROR_TRANSITION)
|
|
|
|
+ // Ignore-able events
|
|
|
|
+ .addTransition(JobStateInternal.SETUP, JobStateInternal.SETUP,
|
|
|
|
+ JobEventType.JOB_UPDATED_NODES)
|
|
|
|
+
|
|
// Transitions from RUNNING state
|
|
// Transitions from RUNNING state
|
|
.addTransition(JobStateInternal.RUNNING, JobStateInternal.RUNNING,
|
|
.addTransition(JobStateInternal.RUNNING, JobStateInternal.RUNNING,
|
|
JobEventType.JOB_TASK_ATTEMPT_COMPLETED,
|
|
JobEventType.JOB_TASK_ATTEMPT_COMPLETED,
|
|
TASK_ATTEMPT_COMPLETED_EVENT_TRANSITION)
|
|
TASK_ATTEMPT_COMPLETED_EVENT_TRANSITION)
|
|
.addTransition
|
|
.addTransition
|
|
(JobStateInternal.RUNNING,
|
|
(JobStateInternal.RUNNING,
|
|
- EnumSet.of(JobStateInternal.RUNNING, JobStateInternal.SUCCEEDED, JobStateInternal.FAILED),
|
|
|
|
|
|
+ EnumSet.of(JobStateInternal.RUNNING,
|
|
|
|
+ JobStateInternal.COMMITTING, JobStateInternal.FAIL_ABORT),
|
|
JobEventType.JOB_TASK_COMPLETED,
|
|
JobEventType.JOB_TASK_COMPLETED,
|
|
new TaskCompletedTransition())
|
|
new TaskCompletedTransition())
|
|
.addTransition
|
|
.addTransition
|
|
(JobStateInternal.RUNNING,
|
|
(JobStateInternal.RUNNING,
|
|
- EnumSet.of(JobStateInternal.RUNNING, JobStateInternal.SUCCEEDED, JobStateInternal.FAILED),
|
|
|
|
|
|
+ EnumSet.of(JobStateInternal.RUNNING,
|
|
|
|
+ JobStateInternal.COMMITTING),
|
|
JobEventType.JOB_COMPLETED,
|
|
JobEventType.JOB_COMPLETED,
|
|
new JobNoTasksCompletedTransition())
|
|
new JobNoTasksCompletedTransition())
|
|
.addTransition(JobStateInternal.RUNNING, JobStateInternal.KILL_WAIT,
|
|
.addTransition(JobStateInternal.RUNNING, JobStateInternal.KILL_WAIT,
|
|
@@ -296,7 +325,8 @@ public class JobImpl implements org.apache.hadoop.mapreduce.v2.app.job.Job,
|
|
// Transitions from KILL_WAIT state.
|
|
// Transitions from KILL_WAIT state.
|
|
.addTransition
|
|
.addTransition
|
|
(JobStateInternal.KILL_WAIT,
|
|
(JobStateInternal.KILL_WAIT,
|
|
- EnumSet.of(JobStateInternal.KILL_WAIT, JobStateInternal.KILLED),
|
|
|
|
|
|
+ EnumSet.of(JobStateInternal.KILL_WAIT,
|
|
|
|
+ JobStateInternal.KILL_ABORT),
|
|
JobEventType.JOB_TASK_COMPLETED,
|
|
JobEventType.JOB_TASK_COMPLETED,
|
|
new KillWaitTaskCompletedTransition())
|
|
new KillWaitTaskCompletedTransition())
|
|
.addTransition(JobStateInternal.KILL_WAIT, JobStateInternal.KILL_WAIT,
|
|
.addTransition(JobStateInternal.KILL_WAIT, JobStateInternal.KILL_WAIT,
|
|
@@ -318,6 +348,35 @@ public class JobImpl implements org.apache.hadoop.mapreduce.v2.app.job.Job,
|
|
JobEventType.JOB_MAP_TASK_RESCHEDULED,
|
|
JobEventType.JOB_MAP_TASK_RESCHEDULED,
|
|
JobEventType.JOB_TASK_ATTEMPT_FETCH_FAILURE))
|
|
JobEventType.JOB_TASK_ATTEMPT_FETCH_FAILURE))
|
|
|
|
|
|
|
|
+ // Transitions from COMMITTING state
|
|
|
|
+ .addTransition(JobStateInternal.COMMITTING,
|
|
|
|
+ JobStateInternal.SUCCEEDED,
|
|
|
|
+ JobEventType.JOB_COMMIT_COMPLETED,
|
|
|
|
+ new CommitSucceededTransition())
|
|
|
|
+ .addTransition(JobStateInternal.COMMITTING,
|
|
|
|
+ JobStateInternal.FAIL_ABORT,
|
|
|
|
+ JobEventType.JOB_COMMIT_FAILED,
|
|
|
|
+ new CommitFailedTransition())
|
|
|
|
+ .addTransition(JobStateInternal.COMMITTING,
|
|
|
|
+ JobStateInternal.KILL_ABORT,
|
|
|
|
+ JobEventType.JOB_KILL,
|
|
|
|
+ new KilledDuringCommitTransition())
|
|
|
|
+ .addTransition(JobStateInternal.COMMITTING,
|
|
|
|
+ JobStateInternal.COMMITTING,
|
|
|
|
+ JobEventType.JOB_DIAGNOSTIC_UPDATE,
|
|
|
|
+ DIAGNOSTIC_UPDATE_TRANSITION)
|
|
|
|
+ .addTransition(JobStateInternal.COMMITTING,
|
|
|
|
+ JobStateInternal.COMMITTING,
|
|
|
|
+ JobEventType.JOB_COUNTER_UPDATE, COUNTER_UPDATE_TRANSITION)
|
|
|
|
+ .addTransition(JobStateInternal.COMMITTING,
|
|
|
|
+ JobStateInternal.ERROR, JobEventType.INTERNAL_ERROR,
|
|
|
|
+ INTERNAL_ERROR_TRANSITION)
|
|
|
|
+ // Ignore-able events
|
|
|
|
+ .addTransition(JobStateInternal.COMMITTING,
|
|
|
|
+ JobStateInternal.COMMITTING,
|
|
|
|
+ EnumSet.of(JobEventType.JOB_UPDATED_NODES,
|
|
|
|
+ JobEventType.JOB_TASK_ATTEMPT_FETCH_FAILURE))
|
|
|
|
+
|
|
// Transitions from SUCCEEDED state
|
|
// Transitions from SUCCEEDED state
|
|
.addTransition(JobStateInternal.SUCCEEDED, JobStateInternal.SUCCEEDED,
|
|
.addTransition(JobStateInternal.SUCCEEDED, JobStateInternal.SUCCEEDED,
|
|
JobEventType.JOB_DIAGNOSTIC_UPDATE,
|
|
JobEventType.JOB_DIAGNOSTIC_UPDATE,
|
|
@@ -334,6 +393,61 @@ public class JobImpl implements org.apache.hadoop.mapreduce.v2.app.job.Job,
|
|
JobEventType.JOB_UPDATED_NODES,
|
|
JobEventType.JOB_UPDATED_NODES,
|
|
JobEventType.JOB_TASK_ATTEMPT_FETCH_FAILURE))
|
|
JobEventType.JOB_TASK_ATTEMPT_FETCH_FAILURE))
|
|
|
|
|
|
|
|
+ // Transitions from FAIL_ABORT state
|
|
|
|
+ .addTransition(JobStateInternal.FAIL_ABORT,
|
|
|
|
+ JobStateInternal.FAIL_ABORT,
|
|
|
|
+ JobEventType.JOB_DIAGNOSTIC_UPDATE,
|
|
|
|
+ DIAGNOSTIC_UPDATE_TRANSITION)
|
|
|
|
+ .addTransition(JobStateInternal.FAIL_ABORT,
|
|
|
|
+ JobStateInternal.FAIL_ABORT,
|
|
|
|
+ JobEventType.JOB_COUNTER_UPDATE, COUNTER_UPDATE_TRANSITION)
|
|
|
|
+ .addTransition(JobStateInternal.FAIL_ABORT, JobStateInternal.FAILED,
|
|
|
|
+ JobEventType.JOB_ABORT_COMPLETED,
|
|
|
|
+ new JobAbortCompletedTransition())
|
|
|
|
+ .addTransition(JobStateInternal.FAIL_ABORT, JobStateInternal.KILLED,
|
|
|
|
+ JobEventType.JOB_KILL,
|
|
|
|
+ new KilledDuringAbortTransition())
|
|
|
|
+ .addTransition(JobStateInternal.FAIL_ABORT,
|
|
|
|
+ JobStateInternal.ERROR, JobEventType.INTERNAL_ERROR,
|
|
|
|
+ INTERNAL_ERROR_TRANSITION)
|
|
|
|
+ // Ignore-able events
|
|
|
|
+ .addTransition(JobStateInternal.FAIL_ABORT,
|
|
|
|
+ JobStateInternal.FAIL_ABORT,
|
|
|
|
+ EnumSet.of(JobEventType.JOB_UPDATED_NODES,
|
|
|
|
+ JobEventType.JOB_TASK_COMPLETED,
|
|
|
|
+ JobEventType.JOB_TASK_ATTEMPT_COMPLETED,
|
|
|
|
+ JobEventType.JOB_MAP_TASK_RESCHEDULED,
|
|
|
|
+ JobEventType.JOB_TASK_ATTEMPT_FETCH_FAILURE,
|
|
|
|
+ JobEventType.JOB_COMMIT_COMPLETED,
|
|
|
|
+ JobEventType.JOB_COMMIT_FAILED))
|
|
|
|
+
|
|
|
|
+ // Transitions from KILL_ABORT state
|
|
|
|
+ .addTransition(JobStateInternal.KILL_ABORT,
|
|
|
|
+ JobStateInternal.KILL_ABORT,
|
|
|
|
+ JobEventType.JOB_DIAGNOSTIC_UPDATE,
|
|
|
|
+ DIAGNOSTIC_UPDATE_TRANSITION)
|
|
|
|
+ .addTransition(JobStateInternal.KILL_ABORT,
|
|
|
|
+ JobStateInternal.KILL_ABORT,
|
|
|
|
+ JobEventType.JOB_COUNTER_UPDATE, COUNTER_UPDATE_TRANSITION)
|
|
|
|
+ .addTransition(JobStateInternal.KILL_ABORT, JobStateInternal.KILLED,
|
|
|
|
+ JobEventType.JOB_ABORT_COMPLETED,
|
|
|
|
+ new JobAbortCompletedTransition())
|
|
|
|
+ .addTransition(JobStateInternal.KILL_ABORT, JobStateInternal.KILLED,
|
|
|
|
+ JobEventType.JOB_KILL,
|
|
|
|
+ new KilledDuringAbortTransition())
|
|
|
|
+ .addTransition(JobStateInternal.KILL_ABORT,
|
|
|
|
+ JobStateInternal.ERROR, JobEventType.INTERNAL_ERROR,
|
|
|
|
+ INTERNAL_ERROR_TRANSITION)
|
|
|
|
+ // Ignore-able events
|
|
|
|
+ .addTransition(JobStateInternal.KILL_ABORT,
|
|
|
|
+ JobStateInternal.KILL_ABORT,
|
|
|
|
+ EnumSet.of(JobEventType.JOB_UPDATED_NODES,
|
|
|
|
+ JobEventType.JOB_TASK_ATTEMPT_FETCH_FAILURE,
|
|
|
|
+ JobEventType.JOB_SETUP_COMPLETED,
|
|
|
|
+ JobEventType.JOB_SETUP_FAILED,
|
|
|
|
+ JobEventType.JOB_COMMIT_COMPLETED,
|
|
|
|
+ JobEventType.JOB_COMMIT_FAILED))
|
|
|
|
+
|
|
// Transitions from FAILED state
|
|
// Transitions from FAILED state
|
|
.addTransition(JobStateInternal.FAILED, JobStateInternal.FAILED,
|
|
.addTransition(JobStateInternal.FAILED, JobStateInternal.FAILED,
|
|
JobEventType.JOB_DIAGNOSTIC_UPDATE,
|
|
JobEventType.JOB_DIAGNOSTIC_UPDATE,
|
|
@@ -351,7 +465,12 @@ public class JobImpl implements org.apache.hadoop.mapreduce.v2.app.job.Job,
|
|
JobEventType.JOB_TASK_COMPLETED,
|
|
JobEventType.JOB_TASK_COMPLETED,
|
|
JobEventType.JOB_TASK_ATTEMPT_COMPLETED,
|
|
JobEventType.JOB_TASK_ATTEMPT_COMPLETED,
|
|
JobEventType.JOB_MAP_TASK_RESCHEDULED,
|
|
JobEventType.JOB_MAP_TASK_RESCHEDULED,
|
|
- JobEventType.JOB_TASK_ATTEMPT_FETCH_FAILURE))
|
|
|
|
|
|
+ JobEventType.JOB_TASK_ATTEMPT_FETCH_FAILURE,
|
|
|
|
+ JobEventType.JOB_SETUP_COMPLETED,
|
|
|
|
+ JobEventType.JOB_SETUP_FAILED,
|
|
|
|
+ JobEventType.JOB_COMMIT_COMPLETED,
|
|
|
|
+ JobEventType.JOB_COMMIT_FAILED,
|
|
|
|
+ JobEventType.JOB_ABORT_COMPLETED))
|
|
|
|
|
|
// Transitions from KILLED state
|
|
// Transitions from KILLED state
|
|
.addTransition(JobStateInternal.KILLED, JobStateInternal.KILLED,
|
|
.addTransition(JobStateInternal.KILLED, JobStateInternal.KILLED,
|
|
@@ -366,8 +485,14 @@ public class JobImpl implements org.apache.hadoop.mapreduce.v2.app.job.Job,
|
|
// Ignore-able events
|
|
// Ignore-able events
|
|
.addTransition(JobStateInternal.KILLED, JobStateInternal.KILLED,
|
|
.addTransition(JobStateInternal.KILLED, JobStateInternal.KILLED,
|
|
EnumSet.of(JobEventType.JOB_KILL,
|
|
EnumSet.of(JobEventType.JOB_KILL,
|
|
|
|
+ JobEventType.JOB_START,
|
|
JobEventType.JOB_UPDATED_NODES,
|
|
JobEventType.JOB_UPDATED_NODES,
|
|
- JobEventType.JOB_TASK_ATTEMPT_FETCH_FAILURE))
|
|
|
|
|
|
+ JobEventType.JOB_TASK_ATTEMPT_FETCH_FAILURE,
|
|
|
|
+ JobEventType.JOB_SETUP_COMPLETED,
|
|
|
|
+ JobEventType.JOB_SETUP_FAILED,
|
|
|
|
+ JobEventType.JOB_COMMIT_COMPLETED,
|
|
|
|
+ JobEventType.JOB_COMMIT_FAILED,
|
|
|
|
+ JobEventType.JOB_ABORT_COMPLETED))
|
|
|
|
|
|
// No transitions from INTERNAL_ERROR state. Ignore all.
|
|
// No transitions from INTERNAL_ERROR state. Ignore all.
|
|
.addTransition(
|
|
.addTransition(
|
|
@@ -381,6 +506,11 @@ public class JobImpl implements org.apache.hadoop.mapreduce.v2.app.job.Job,
|
|
JobEventType.JOB_DIAGNOSTIC_UPDATE,
|
|
JobEventType.JOB_DIAGNOSTIC_UPDATE,
|
|
JobEventType.JOB_UPDATED_NODES,
|
|
JobEventType.JOB_UPDATED_NODES,
|
|
JobEventType.JOB_TASK_ATTEMPT_FETCH_FAILURE,
|
|
JobEventType.JOB_TASK_ATTEMPT_FETCH_FAILURE,
|
|
|
|
+ JobEventType.JOB_SETUP_COMPLETED,
|
|
|
|
+ JobEventType.JOB_SETUP_FAILED,
|
|
|
|
+ JobEventType.JOB_COMMIT_COMPLETED,
|
|
|
|
+ JobEventType.JOB_COMMIT_FAILED,
|
|
|
|
+ JobEventType.JOB_ABORT_COMPLETED,
|
|
JobEventType.INTERNAL_ERROR))
|
|
JobEventType.INTERNAL_ERROR))
|
|
.addTransition(JobStateInternal.ERROR, JobStateInternal.ERROR,
|
|
.addTransition(JobStateInternal.ERROR, JobStateInternal.ERROR,
|
|
JobEventType.JOB_COUNTER_UPDATE, COUNTER_UPDATE_TRANSITION)
|
|
JobEventType.JOB_COUNTER_UPDATE, COUNTER_UPDATE_TRANSITION)
|
|
@@ -417,7 +547,7 @@ public class JobImpl implements org.apache.hadoop.mapreduce.v2.app.job.Job,
|
|
JobTokenSecretManager jobTokenSecretManager,
|
|
JobTokenSecretManager jobTokenSecretManager,
|
|
Credentials fsTokenCredentials, Clock clock,
|
|
Credentials fsTokenCredentials, Clock clock,
|
|
Map<TaskId, TaskInfo> completedTasksFromPreviousRun, MRAppMetrics metrics,
|
|
Map<TaskId, TaskInfo> completedTasksFromPreviousRun, MRAppMetrics metrics,
|
|
- OutputCommitter committer, boolean newApiCommitter, String userName,
|
|
|
|
|
|
+ boolean newApiCommitter, String userName,
|
|
long appSubmitTime, List<AMInfo> amInfos, AppContext appContext) {
|
|
long appSubmitTime, List<AMInfo> amInfos, AppContext appContext) {
|
|
this.applicationAttemptId = applicationAttemptId;
|
|
this.applicationAttemptId = applicationAttemptId;
|
|
this.jobId = jobId;
|
|
this.jobId = jobId;
|
|
@@ -442,7 +572,6 @@ public class JobImpl implements org.apache.hadoop.mapreduce.v2.app.job.Job,
|
|
|
|
|
|
this.fsTokens = fsTokenCredentials;
|
|
this.fsTokens = fsTokenCredentials;
|
|
this.jobTokenSecretManager = jobTokenSecretManager;
|
|
this.jobTokenSecretManager = jobTokenSecretManager;
|
|
- this.committer = committer;
|
|
|
|
|
|
|
|
this.aclsManager = new JobACLsManager(conf);
|
|
this.aclsManager = new JobACLsManager(conf);
|
|
this.username = System.getProperty("user.name");
|
|
this.username = System.getProperty("user.name");
|
|
@@ -461,11 +590,6 @@ public class JobImpl implements org.apache.hadoop.mapreduce.v2.app.job.Job,
|
|
return jobId;
|
|
return jobId;
|
|
}
|
|
}
|
|
|
|
|
|
- // Getter methods that make unit testing easier (package-scoped)
|
|
|
|
- OutputCommitter getCommitter() {
|
|
|
|
- return this.committer;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
EventHandler getEventHandler() {
|
|
EventHandler getEventHandler() {
|
|
return this.eventHandler;
|
|
return this.eventHandler;
|
|
}
|
|
}
|
|
@@ -751,9 +875,16 @@ public class JobImpl implements org.apache.hadoop.mapreduce.v2.app.job.Job,
|
|
}
|
|
}
|
|
|
|
|
|
private static JobState getExternalState(JobStateInternal smState) {
|
|
private static JobState getExternalState(JobStateInternal smState) {
|
|
- if (smState == JobStateInternal.KILL_WAIT) {
|
|
|
|
|
|
+ switch (smState) {
|
|
|
|
+ case KILL_WAIT:
|
|
|
|
+ case KILL_ABORT:
|
|
return JobState.KILLED;
|
|
return JobState.KILLED;
|
|
- } else {
|
|
|
|
|
|
+ case SETUP:
|
|
|
|
+ case COMMITTING:
|
|
|
|
+ return JobState.RUNNING;
|
|
|
|
+ case FAIL_ABORT:
|
|
|
|
+ return JobState.FAILED;
|
|
|
|
+ default:
|
|
return JobState.valueOf(smState.name());
|
|
return JobState.valueOf(smState.name());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -799,22 +930,15 @@ public class JobImpl implements org.apache.hadoop.mapreduce.v2.app.job.Job,
|
|
return FileSystem.get(conf);
|
|
return FileSystem.get(conf);
|
|
}
|
|
}
|
|
|
|
|
|
- static JobStateInternal checkJobCompleteSuccess(JobImpl job) {
|
|
|
|
- // check for Job success
|
|
|
|
- if (job.completedTaskCount == job.tasks.size()) {
|
|
|
|
- try {
|
|
|
|
- // Commit job & do cleanup
|
|
|
|
- job.getCommitter().commitJob(job.getJobContext());
|
|
|
|
- } catch (IOException e) {
|
|
|
|
- LOG.error("Could not do commit for Job", e);
|
|
|
|
- job.addDiagnostic("Job commit failed: " + e.getMessage());
|
|
|
|
- job.abortJob(org.apache.hadoop.mapreduce.JobStatus.State.FAILED);
|
|
|
|
- return job.finished(JobStateInternal.FAILED);
|
|
|
|
- }
|
|
|
|
- job.logJobHistoryFinishedEvent();
|
|
|
|
- return job.finished(JobStateInternal.SUCCEEDED);
|
|
|
|
|
|
+ protected JobStateInternal checkReadyForCommit() {
|
|
|
|
+ JobStateInternal currentState = getInternalState();
|
|
|
|
+ if (completedTaskCount == tasks.size()
|
|
|
|
+ && currentState == JobStateInternal.RUNNING) {
|
|
|
|
+ eventHandler.handle(new CommitterJobCommitEvent(jobId, getJobContext()));
|
|
|
|
+ return JobStateInternal.COMMITTING;
|
|
}
|
|
}
|
|
- return null;
|
|
|
|
|
|
+ // return the current state as job not ready to commit yet
|
|
|
|
+ return getInternalState();
|
|
}
|
|
}
|
|
|
|
|
|
JobStateInternal finished(JobStateInternal finalState) {
|
|
JobStateInternal finished(JobStateInternal finalState) {
|
|
@@ -1104,25 +1228,21 @@ public class JobImpl implements org.apache.hadoop.mapreduce.v2.app.job.Job,
|
|
job.allowedReduceFailuresPercent =
|
|
job.allowedReduceFailuresPercent =
|
|
job.conf.getInt(MRJobConfig.REDUCE_FAILURES_MAXPERCENT, 0);
|
|
job.conf.getInt(MRJobConfig.REDUCE_FAILURES_MAXPERCENT, 0);
|
|
|
|
|
|
- // do the setup
|
|
|
|
- job.committer.setupJob(job.jobContext);
|
|
|
|
- job.setupProgress = 1.0f;
|
|
|
|
-
|
|
|
|
// create the Tasks but don't start them yet
|
|
// create the Tasks but don't start them yet
|
|
createMapTasks(job, inputLength, taskSplitMetaInfo);
|
|
createMapTasks(job, inputLength, taskSplitMetaInfo);
|
|
createReduceTasks(job);
|
|
createReduceTasks(job);
|
|
|
|
|
|
job.metrics.endPreparingJob(job);
|
|
job.metrics.endPreparingJob(job);
|
|
return JobStateInternal.INITED;
|
|
return JobStateInternal.INITED;
|
|
- //TODO XXX Should JobInitedEvent be generated here (instead of in StartTransition)
|
|
|
|
-
|
|
|
|
} catch (IOException e) {
|
|
} catch (IOException e) {
|
|
LOG.warn("Job init failed", e);
|
|
LOG.warn("Job init failed", e);
|
|
|
|
+ job.metrics.endPreparingJob(job);
|
|
job.addDiagnostic("Job init failed : "
|
|
job.addDiagnostic("Job init failed : "
|
|
+ StringUtils.stringifyException(e));
|
|
+ StringUtils.stringifyException(e));
|
|
- job.abortJob(org.apache.hadoop.mapreduce.JobStatus.State.FAILED);
|
|
|
|
- job.metrics.endPreparingJob(job);
|
|
|
|
- return job.finished(JobStateInternal.FAILED);
|
|
|
|
|
|
+ job.eventHandler.handle(new CommitterJobAbortEvent(job.jobId,
|
|
|
|
+ job.jobContext,
|
|
|
|
+ org.apache.hadoop.mapreduce.JobStatus.State.FAILED));
|
|
|
|
+ return JobStateInternal.FAILED;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1174,7 +1294,7 @@ public class JobImpl implements org.apache.hadoop.mapreduce.v2.app.job.Job,
|
|
job.remoteJobConfFile,
|
|
job.remoteJobConfFile,
|
|
job.conf, splits[i],
|
|
job.conf, splits[i],
|
|
job.taskAttemptListener,
|
|
job.taskAttemptListener,
|
|
- job.committer, job.jobToken, job.fsTokens,
|
|
|
|
|
|
+ job.jobToken, job.fsTokens,
|
|
job.clock, job.completedTasksFromPreviousRun,
|
|
job.clock, job.completedTasksFromPreviousRun,
|
|
job.applicationAttemptId.getAttemptId(),
|
|
job.applicationAttemptId.getAttemptId(),
|
|
job.metrics, job.appContext);
|
|
job.metrics, job.appContext);
|
|
@@ -1191,7 +1311,7 @@ public class JobImpl implements org.apache.hadoop.mapreduce.v2.app.job.Job,
|
|
job.eventHandler,
|
|
job.eventHandler,
|
|
job.remoteJobConfFile,
|
|
job.remoteJobConfFile,
|
|
job.conf, job.numMapTasks,
|
|
job.conf, job.numMapTasks,
|
|
- job.taskAttemptListener, job.committer, job.jobToken,
|
|
|
|
|
|
+ job.taskAttemptListener, job.jobToken,
|
|
job.fsTokens, job.clock,
|
|
job.fsTokens, job.clock,
|
|
job.completedTasksFromPreviousRun,
|
|
job.completedTasksFromPreviousRun,
|
|
job.applicationAttemptId.getAttemptId(),
|
|
job.applicationAttemptId.getAttemptId(),
|
|
@@ -1224,6 +1344,35 @@ public class JobImpl implements org.apache.hadoop.mapreduce.v2.app.job.Job,
|
|
}
|
|
}
|
|
} // end of InitTransition
|
|
} // end of InitTransition
|
|
|
|
|
|
|
|
+ private static class SetupCompletedTransition
|
|
|
|
+ implements SingleArcTransition<JobImpl, JobEvent> {
|
|
|
|
+ @Override
|
|
|
|
+ public void transition(JobImpl job, JobEvent event) {
|
|
|
|
+ job.setupProgress = 1.0f;
|
|
|
|
+ job.scheduleTasks(job.mapTasks); // schedule (i.e., start) the maps
|
|
|
|
+ job.scheduleTasks(job.reduceTasks);
|
|
|
|
+
|
|
|
|
+ // If we have no tasks, just transition to job completed
|
|
|
|
+ if (job.numReduceTasks == 0 && job.numMapTasks == 0) {
|
|
|
|
+ job.eventHandler.handle(new JobEvent(job.jobId,
|
|
|
|
+ JobEventType.JOB_COMPLETED));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private static class SetupFailedTransition
|
|
|
|
+ implements SingleArcTransition<JobImpl, JobEvent> {
|
|
|
|
+ @Override
|
|
|
|
+ public void transition(JobImpl job, JobEvent event) {
|
|
|
|
+ job.metrics.endRunningJob(job);
|
|
|
|
+ job.addDiagnostic("Job setup failed : "
|
|
|
|
+ + ((JobSetupFailedEvent) event).getMessage());
|
|
|
|
+ job.eventHandler.handle(new CommitterJobAbortEvent(job.jobId,
|
|
|
|
+ job.jobContext,
|
|
|
|
+ org.apache.hadoop.mapreduce.JobStatus.State.FAILED));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
public static class StartTransition
|
|
public static class StartTransition
|
|
implements SingleArcTransition<JobImpl, JobEvent> {
|
|
implements SingleArcTransition<JobImpl, JobEvent> {
|
|
/**
|
|
/**
|
|
@@ -1233,43 +1382,45 @@ public class JobImpl implements org.apache.hadoop.mapreduce.v2.app.job.Job,
|
|
@Override
|
|
@Override
|
|
public void transition(JobImpl job, JobEvent event) {
|
|
public void transition(JobImpl job, JobEvent event) {
|
|
job.startTime = job.clock.getTime();
|
|
job.startTime = job.clock.getTime();
|
|
- job.scheduleTasks(job.mapTasks); // schedule (i.e., start) the maps
|
|
|
|
- job.scheduleTasks(job.reduceTasks);
|
|
|
|
JobInitedEvent jie =
|
|
JobInitedEvent jie =
|
|
new JobInitedEvent(job.oldJobId,
|
|
new JobInitedEvent(job.oldJobId,
|
|
job.startTime,
|
|
job.startTime,
|
|
job.numMapTasks, job.numReduceTasks,
|
|
job.numMapTasks, job.numReduceTasks,
|
|
job.getState().toString(),
|
|
job.getState().toString(),
|
|
- job.isUber()); //Will transition to state running. Currently in INITED
|
|
|
|
|
|
+ job.isUber());
|
|
job.eventHandler.handle(new JobHistoryEvent(job.jobId, jie));
|
|
job.eventHandler.handle(new JobHistoryEvent(job.jobId, jie));
|
|
JobInfoChangeEvent jice = new JobInfoChangeEvent(job.oldJobId,
|
|
JobInfoChangeEvent jice = new JobInfoChangeEvent(job.oldJobId,
|
|
job.appSubmitTime, job.startTime);
|
|
job.appSubmitTime, job.startTime);
|
|
job.eventHandler.handle(new JobHistoryEvent(job.jobId, jice));
|
|
job.eventHandler.handle(new JobHistoryEvent(job.jobId, jice));
|
|
job.metrics.runningJob(job);
|
|
job.metrics.runningJob(job);
|
|
|
|
|
|
- // If we have no tasks, just transition to job completed
|
|
|
|
- if (job.numReduceTasks == 0 && job.numMapTasks == 0) {
|
|
|
|
- job.eventHandler.handle(new JobEvent(job.jobId, JobEventType.JOB_COMPLETED));
|
|
|
|
- }
|
|
|
|
|
|
+ job.eventHandler.handle(new CommitterJobSetupEvent(
|
|
|
|
+ job.jobId, job.jobContext));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- protected void abortJob(
|
|
|
|
- org.apache.hadoop.mapreduce.JobStatus.State finalState) {
|
|
|
|
- try {
|
|
|
|
- committer.abortJob(jobContext, finalState);
|
|
|
|
- } catch (IOException e) {
|
|
|
|
- LOG.warn("Could not abortJob", e);
|
|
|
|
|
|
+ private void unsuccessfulFinish(JobStateInternal finalState) {
|
|
|
|
+ if (finishTime == 0) setFinishTime();
|
|
|
|
+ cleanupProgress = 1.0f;
|
|
|
|
+ JobUnsuccessfulCompletionEvent unsuccessfulJobEvent =
|
|
|
|
+ new JobUnsuccessfulCompletionEvent(oldJobId,
|
|
|
|
+ finishTime,
|
|
|
|
+ succeededMapTaskCount,
|
|
|
|
+ succeededReduceTaskCount,
|
|
|
|
+ finalState.toString());
|
|
|
|
+ eventHandler.handle(new JobHistoryEvent(jobId,
|
|
|
|
+ unsuccessfulJobEvent));
|
|
|
|
+ finished(finalState);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private static class JobAbortCompletedTransition
|
|
|
|
+ implements SingleArcTransition<JobImpl, JobEvent> {
|
|
|
|
+ @Override
|
|
|
|
+ public void transition(JobImpl job, JobEvent event) {
|
|
|
|
+ JobStateInternal finalState = JobStateInternal.valueOf(
|
|
|
|
+ ((JobAbortCompletedEvent) event).getFinalState().name());
|
|
|
|
+ job.unsuccessfulFinish(finalState);
|
|
}
|
|
}
|
|
- if (finishTime == 0) setFinishTime();
|
|
|
|
- cleanupProgress = 1.0f;
|
|
|
|
- JobUnsuccessfulCompletionEvent unsuccessfulJobEvent =
|
|
|
|
- new JobUnsuccessfulCompletionEvent(oldJobId,
|
|
|
|
- finishTime,
|
|
|
|
- succeededMapTaskCount,
|
|
|
|
- succeededReduceTaskCount,
|
|
|
|
- finalState.toString());
|
|
|
|
- eventHandler.handle(new JobHistoryEvent(jobId, unsuccessfulJobEvent));
|
|
|
|
}
|
|
}
|
|
|
|
|
|
// JobFinishedEvent triggers the move of the history file out of the staging
|
|
// JobFinishedEvent triggers the move of the history file out of the staging
|
|
@@ -1343,9 +1494,22 @@ public class JobImpl implements org.apache.hadoop.mapreduce.v2.app.job.Job,
|
|
implements SingleArcTransition<JobImpl, JobEvent> {
|
|
implements SingleArcTransition<JobImpl, JobEvent> {
|
|
@Override
|
|
@Override
|
|
public void transition(JobImpl job, JobEvent event) {
|
|
public void transition(JobImpl job, JobEvent event) {
|
|
- job.abortJob(org.apache.hadoop.mapreduce.JobStatus.State.KILLED);
|
|
|
|
job.addDiagnostic("Job received Kill in INITED state.");
|
|
job.addDiagnostic("Job received Kill in INITED state.");
|
|
- job.finished(JobStateInternal.KILLED);
|
|
|
|
|
|
+ job.eventHandler.handle(new CommitterJobAbortEvent(job.jobId,
|
|
|
|
+ job.jobContext,
|
|
|
|
+ org.apache.hadoop.mapreduce.JobStatus.State.KILLED));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private static class KilledDuringSetupTransition
|
|
|
|
+ implements SingleArcTransition<JobImpl, JobEvent> {
|
|
|
|
+ @Override
|
|
|
|
+ public void transition(JobImpl job, JobEvent event) {
|
|
|
|
+ job.metrics.endRunningJob(job);
|
|
|
|
+ job.addDiagnostic("Job received kill in SETUP state.");
|
|
|
|
+ job.eventHandler.handle(new CommitterJobAbortEvent(job.jobId,
|
|
|
|
+ job.jobContext,
|
|
|
|
+ org.apache.hadoop.mapreduce.JobStatus.State.KILLED));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1470,10 +1634,10 @@ public class JobImpl implements org.apache.hadoop.mapreduce.v2.app.job.Job,
|
|
taskKilled(job, task);
|
|
taskKilled(job, task);
|
|
}
|
|
}
|
|
|
|
|
|
- return checkJobForCompletion(job);
|
|
|
|
|
|
+ return checkJobAfterTaskCompletion(job);
|
|
}
|
|
}
|
|
|
|
|
|
- protected JobStateInternal checkJobForCompletion(JobImpl job) {
|
|
|
|
|
|
+ protected JobStateInternal checkJobAfterTaskCompletion(JobImpl job) {
|
|
//check for Job failure
|
|
//check for Job failure
|
|
if (job.failedMapTaskCount*100 >
|
|
if (job.failedMapTaskCount*100 >
|
|
job.allowedMapFailuresPercent*job.numMapTasks ||
|
|
job.allowedMapFailuresPercent*job.numMapTasks ||
|
|
@@ -1486,17 +1650,13 @@ public class JobImpl implements org.apache.hadoop.mapreduce.v2.app.job.Job,
|
|
" failedReduces:" + job.failedReduceTaskCount;
|
|
" failedReduces:" + job.failedReduceTaskCount;
|
|
LOG.info(diagnosticMsg);
|
|
LOG.info(diagnosticMsg);
|
|
job.addDiagnostic(diagnosticMsg);
|
|
job.addDiagnostic(diagnosticMsg);
|
|
- job.abortJob(org.apache.hadoop.mapreduce.JobStatus.State.FAILED);
|
|
|
|
- return job.finished(JobStateInternal.FAILED);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- JobStateInternal jobCompleteSuccess = JobImpl.checkJobCompleteSuccess(job);
|
|
|
|
- if (jobCompleteSuccess != null) {
|
|
|
|
- return jobCompleteSuccess;
|
|
|
|
|
|
+ job.eventHandler.handle(new CommitterJobAbortEvent(job.jobId,
|
|
|
|
+ job.jobContext,
|
|
|
|
+ org.apache.hadoop.mapreduce.JobStatus.State.FAILED));
|
|
|
|
+ return JobStateInternal.FAIL_ABORT;
|
|
}
|
|
}
|
|
|
|
|
|
- //return the current state, Job not finished yet
|
|
|
|
- return job.getInternalState();
|
|
|
|
|
|
+ return job.checkReadyForCommit();
|
|
}
|
|
}
|
|
|
|
|
|
private void taskSucceeded(JobImpl job, Task task) {
|
|
private void taskSucceeded(JobImpl job, Task task) {
|
|
@@ -1529,18 +1689,52 @@ public class JobImpl implements org.apache.hadoop.mapreduce.v2.app.job.Job,
|
|
}
|
|
}
|
|
|
|
|
|
// Transition class for handling jobs with no tasks
|
|
// Transition class for handling jobs with no tasks
|
|
- static class JobNoTasksCompletedTransition implements
|
|
|
|
|
|
+ private static class JobNoTasksCompletedTransition implements
|
|
MultipleArcTransition<JobImpl, JobEvent, JobStateInternal> {
|
|
MultipleArcTransition<JobImpl, JobEvent, JobStateInternal> {
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public JobStateInternal transition(JobImpl job, JobEvent event) {
|
|
public JobStateInternal transition(JobImpl job, JobEvent event) {
|
|
- JobStateInternal jobCompleteSuccess = JobImpl.checkJobCompleteSuccess(job);
|
|
|
|
- if (jobCompleteSuccess != null) {
|
|
|
|
- return jobCompleteSuccess;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // Return the current state, Job not finished yet
|
|
|
|
- return job.getInternalState();
|
|
|
|
|
|
+ return job.checkReadyForCommit();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private static class CommitSucceededTransition implements
|
|
|
|
+ SingleArcTransition<JobImpl, JobEvent> {
|
|
|
|
+ @Override
|
|
|
|
+ public void transition(JobImpl job, JobEvent event) {
|
|
|
|
+ job.logJobHistoryFinishedEvent();
|
|
|
|
+ job.finished(JobStateInternal.SUCCEEDED);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private static class CommitFailedTransition implements
|
|
|
|
+ SingleArcTransition<JobImpl, JobEvent> {
|
|
|
|
+ @Override
|
|
|
|
+ public void transition(JobImpl job, JobEvent event) {
|
|
|
|
+ JobCommitFailedEvent jcfe = (JobCommitFailedEvent)event;
|
|
|
|
+ job.addDiagnostic("Job commit failed: " + jcfe.getMessage());
|
|
|
|
+ job.eventHandler.handle(new CommitterJobAbortEvent(job.jobId,
|
|
|
|
+ job.jobContext,
|
|
|
|
+ org.apache.hadoop.mapreduce.JobStatus.State.FAILED));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private static class KilledDuringCommitTransition implements
|
|
|
|
+ SingleArcTransition<JobImpl, JobEvent> {
|
|
|
|
+ @Override
|
|
|
|
+ public void transition(JobImpl job, JobEvent event) {
|
|
|
|
+ job.setFinishTime();
|
|
|
|
+ job.eventHandler.handle(new CommitterJobAbortEvent(job.jobId,
|
|
|
|
+ job.jobContext,
|
|
|
|
+ org.apache.hadoop.mapreduce.JobStatus.State.KILLED));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private static class KilledDuringAbortTransition implements
|
|
|
|
+ SingleArcTransition<JobImpl, JobEvent> {
|
|
|
|
+ @Override
|
|
|
|
+ public void transition(JobImpl job, JobEvent event) {
|
|
|
|
+ job.unsuccessfulFinish(JobStateInternal.KILLED);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1557,11 +1751,13 @@ public class JobImpl implements org.apache.hadoop.mapreduce.v2.app.job.Job,
|
|
private static class KillWaitTaskCompletedTransition extends
|
|
private static class KillWaitTaskCompletedTransition extends
|
|
TaskCompletedTransition {
|
|
TaskCompletedTransition {
|
|
@Override
|
|
@Override
|
|
- protected JobStateInternal checkJobForCompletion(JobImpl job) {
|
|
|
|
|
|
+ protected JobStateInternal checkJobAfterTaskCompletion(JobImpl job) {
|
|
if (job.completedTaskCount == job.tasks.size()) {
|
|
if (job.completedTaskCount == job.tasks.size()) {
|
|
job.setFinishTime();
|
|
job.setFinishTime();
|
|
- job.abortJob(org.apache.hadoop.mapreduce.JobStatus.State.KILLED);
|
|
|
|
- return job.finished(JobStateInternal.KILLED);
|
|
|
|
|
|
+ job.eventHandler.handle(new CommitterJobAbortEvent(job.jobId,
|
|
|
|
+ job.jobContext,
|
|
|
|
+ org.apache.hadoop.mapreduce.JobStatus.State.KILLED));
|
|
|
|
+ return JobStateInternal.KILL_ABORT;
|
|
}
|
|
}
|
|
//return the current state, Job not finished yet
|
|
//return the current state, Job not finished yet
|
|
return job.getInternalState();
|
|
return job.getInternalState();
|