|
@@ -69,6 +69,7 @@ import org.apache.hadoop.mapreduce.v2.app.job.event.JobMapTaskRescheduledEvent;
|
|
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.JobTaskEvent;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.event.JobTaskEvent;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.event.TaskAttemptEvent;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.event.TaskAttemptEvent;
|
|
|
|
+import org.apache.hadoop.mapreduce.v2.app.job.event.TaskAttemptKillEvent;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.event.TaskAttemptEventType;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.event.TaskAttemptEventType;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.event.TaskAttemptRecoverEvent;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.event.TaskAttemptRecoverEvent;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.event.TaskEvent;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.event.TaskEvent;
|
|
@@ -100,6 +101,7 @@ import com.google.common.annotations.VisibleForTesting;
|
|
public abstract class TaskImpl implements Task, EventHandler<TaskEvent> {
|
|
public abstract class TaskImpl implements Task, EventHandler<TaskEvent> {
|
|
|
|
|
|
private static final Log LOG = LogFactory.getLog(TaskImpl.class);
|
|
private static final Log LOG = LogFactory.getLog(TaskImpl.class);
|
|
|
|
+ private static final String SPECULATION = "Speculation: ";
|
|
|
|
|
|
protected final JobConf conf;
|
|
protected final JobConf conf;
|
|
protected final Path jobFile;
|
|
protected final Path jobFile;
|
|
@@ -906,8 +908,8 @@ public abstract class TaskImpl implements Task, EventHandler<TaskEvent> {
|
|
LOG.info(task.commitAttempt
|
|
LOG.info(task.commitAttempt
|
|
+ " already given a go for committing the task output, so killing "
|
|
+ " already given a go for committing the task output, so killing "
|
|
+ attemptID);
|
|
+ attemptID);
|
|
- task.eventHandler.handle(new TaskAttemptEvent(
|
|
|
|
- attemptID, TaskAttemptEventType.TA_KILL));
|
|
|
|
|
|
+ task.eventHandler.handle(new TaskAttemptKillEvent(attemptID,
|
|
|
|
+ SPECULATION + task.commitAttempt + " committed first!"));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -932,9 +934,8 @@ public abstract class TaskImpl implements Task, EventHandler<TaskEvent> {
|
|
// other reasons.
|
|
// other reasons.
|
|
!attempt.isFinished()) {
|
|
!attempt.isFinished()) {
|
|
LOG.info("Issuing kill to other attempt " + attempt.getID());
|
|
LOG.info("Issuing kill to other attempt " + attempt.getID());
|
|
- task.eventHandler.handle(
|
|
|
|
- new TaskAttemptEvent(attempt.getID(),
|
|
|
|
- TaskAttemptEventType.TA_KILL));
|
|
|
|
|
|
+ task.eventHandler.handle(new TaskAttemptKillEvent(attempt.getID(),
|
|
|
|
+ SPECULATION + task.successfulAttempt + " succeeded first!"));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
task.finished(TaskStateInternal.SUCCEEDED);
|
|
task.finished(TaskStateInternal.SUCCEEDED);
|
|
@@ -1199,8 +1200,7 @@ public abstract class TaskImpl implements Task, EventHandler<TaskEvent> {
|
|
private void killUnfinishedAttempt(TaskAttempt attempt, String logMsg) {
|
|
private void killUnfinishedAttempt(TaskAttempt attempt, String logMsg) {
|
|
if (attempt != null && !attempt.isFinished()) {
|
|
if (attempt != null && !attempt.isFinished()) {
|
|
eventHandler.handle(
|
|
eventHandler.handle(
|
|
- new TaskAttemptEvent(attempt.getID(),
|
|
|
|
- TaskAttemptEventType.TA_KILL));
|
|
|
|
|
|
+ new TaskAttemptKillEvent(attempt.getID(), logMsg));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|