|
@@ -43,7 +43,6 @@ import org.apache.hadoop.fs.Path;
|
|
import org.apache.hadoop.io.DataOutputBuffer;
|
|
import org.apache.hadoop.io.DataOutputBuffer;
|
|
import org.apache.hadoop.mapred.JobConf;
|
|
import org.apache.hadoop.mapred.JobConf;
|
|
import org.apache.hadoop.mapred.MapReduceChildJVM;
|
|
import org.apache.hadoop.mapred.MapReduceChildJVM;
|
|
-import org.apache.hadoop.mapred.ProgressSplitsBlock;
|
|
|
|
import org.apache.hadoop.mapred.ShuffleHandler;
|
|
import org.apache.hadoop.mapred.ShuffleHandler;
|
|
import org.apache.hadoop.mapred.Task;
|
|
import org.apache.hadoop.mapred.Task;
|
|
import org.apache.hadoop.mapred.TaskAttemptContextImpl;
|
|
import org.apache.hadoop.mapred.TaskAttemptContextImpl;
|
|
@@ -65,7 +64,6 @@ import org.apache.hadoop.mapreduce.security.TokenCache;
|
|
import org.apache.hadoop.mapreduce.security.token.JobTokenIdentifier;
|
|
import org.apache.hadoop.mapreduce.security.token.JobTokenIdentifier;
|
|
import org.apache.hadoop.mapreduce.v2.MRConstants;
|
|
import org.apache.hadoop.mapreduce.v2.MRConstants;
|
|
import org.apache.hadoop.mapreduce.v2.api.records.Counter;
|
|
import org.apache.hadoop.mapreduce.v2.api.records.Counter;
|
|
-import org.apache.hadoop.mapreduce.v2.api.records.CounterGroup;
|
|
|
|
import org.apache.hadoop.mapreduce.v2.api.records.Counters;
|
|
import org.apache.hadoop.mapreduce.v2.api.records.Counters;
|
|
import org.apache.hadoop.mapreduce.v2.api.records.Phase;
|
|
import org.apache.hadoop.mapreduce.v2.api.records.Phase;
|
|
import org.apache.hadoop.mapreduce.v2.api.records.TaskAttemptId;
|
|
import org.apache.hadoop.mapreduce.v2.api.records.TaskAttemptId;
|
|
@@ -80,6 +78,7 @@ 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.JobTaskAttemptFetchFailureEvent;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.event.JobTaskAttemptFetchFailureEvent;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.event.TaskAttemptContainerAssignedEvent;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.event.TaskAttemptContainerAssignedEvent;
|
|
|
|
+import org.apache.hadoop.mapreduce.v2.app.job.event.TaskAttemptContainerLaunchedEvent;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.event.TaskAttemptDiagnosticsUpdateEvent;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.event.TaskAttemptDiagnosticsUpdateEvent;
|
|
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.TaskAttemptEventType;
|
|
import org.apache.hadoop.mapreduce.v2.app.job.event.TaskAttemptEventType;
|
|
@@ -126,7 +125,6 @@ import org.apache.hadoop.yarn.util.RackResolver;
|
|
/**
|
|
/**
|
|
* Implementation of TaskAttempt interface.
|
|
* Implementation of TaskAttempt interface.
|
|
*/
|
|
*/
|
|
-@SuppressWarnings("all")
|
|
|
|
public abstract class TaskAttemptImpl implements
|
|
public abstract class TaskAttemptImpl implements
|
|
org.apache.hadoop.mapreduce.v2.app.job.TaskAttempt,
|
|
org.apache.hadoop.mapreduce.v2.app.job.TaskAttempt,
|
|
EventHandler<TaskAttemptEvent> {
|
|
EventHandler<TaskAttemptEvent> {
|
|
@@ -159,6 +157,7 @@ public abstract class TaskAttemptImpl implements
|
|
private long launchTime;
|
|
private long launchTime;
|
|
private long finishTime;
|
|
private long finishTime;
|
|
private WrappedProgressSplitsBlock progressSplitBlock;
|
|
private WrappedProgressSplitsBlock progressSplitBlock;
|
|
|
|
+ private int shufflePort = -1;
|
|
|
|
|
|
private static final CleanupContainerTransition CLEANUP_CONTAINER_TRANSITION =
|
|
private static final CleanupContainerTransition CLEANUP_CONTAINER_TRANSITION =
|
|
new CleanupContainerTransition();
|
|
new CleanupContainerTransition();
|
|
@@ -596,13 +595,10 @@ public abstract class TaskAttemptImpl implements
|
|
|
|
|
|
// Add shuffle token
|
|
// Add shuffle token
|
|
LOG.info("Putting shuffle token in serviceData");
|
|
LOG.info("Putting shuffle token in serviceData");
|
|
- DataOutputBuffer jobToken_dob = new DataOutputBuffer();
|
|
|
|
- jobToken.write(jobToken_dob);
|
|
|
|
container
|
|
container
|
|
.setServiceData(
|
|
.setServiceData(
|
|
ShuffleHandler.MAPREDUCE_SHUFFLE_SERVICEID,
|
|
ShuffleHandler.MAPREDUCE_SHUFFLE_SERVICEID,
|
|
- ByteBuffer.wrap(jobToken_dob.getData(), 0,
|
|
|
|
- jobToken_dob.getLength()));
|
|
|
|
|
|
+ ShuffleHandler.serializeServiceData(jobToken));
|
|
|
|
|
|
MRApps.addToClassPath(container.getAllEnv(), getInitialClasspath());
|
|
MRApps.addToClassPath(container.getAllEnv(), getInitialClasspath());
|
|
} catch (IOException e) {
|
|
} catch (IOException e) {
|
|
@@ -784,6 +780,17 @@ public abstract class TaskAttemptImpl implements
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public int getShufflePort() {
|
|
|
|
+ readLock.lock();
|
|
|
|
+ try {
|
|
|
|
+ return shufflePort;
|
|
|
|
+ } finally {
|
|
|
|
+ readLock.unlock();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
/**If container Assigned then return the node's address, otherwise null.
|
|
/**If container Assigned then return the node's address, otherwise null.
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
@@ -1153,7 +1160,11 @@ public abstract class TaskAttemptImpl implements
|
|
SingleArcTransition<TaskAttemptImpl, TaskAttemptEvent> {
|
|
SingleArcTransition<TaskAttemptImpl, TaskAttemptEvent> {
|
|
@Override
|
|
@Override
|
|
public void transition(TaskAttemptImpl taskAttempt,
|
|
public void transition(TaskAttemptImpl taskAttempt,
|
|
- TaskAttemptEvent event) {
|
|
|
|
|
|
+ TaskAttemptEvent evnt) {
|
|
|
|
+
|
|
|
|
+ TaskAttemptContainerLaunchedEvent event =
|
|
|
|
+ (TaskAttemptContainerLaunchedEvent) evnt;
|
|
|
|
+
|
|
//set the launch time
|
|
//set the launch time
|
|
taskAttempt.launchTime = taskAttempt.clock.getTime();
|
|
taskAttempt.launchTime = taskAttempt.clock.getTime();
|
|
// register it to TaskAttemptListener so that it start listening
|
|
// register it to TaskAttemptListener so that it start listening
|
|
@@ -1186,6 +1197,7 @@ public abstract class TaskAttemptImpl implements
|
|
//make remoteTask reference as null as it is no more needed
|
|
//make remoteTask reference as null as it is no more needed
|
|
//and free up the memory
|
|
//and free up the memory
|
|
taskAttempt.remoteTask = null;
|
|
taskAttempt.remoteTask = null;
|
|
|
|
+ taskAttempt.shufflePort = event.getShufflePort();
|
|
|
|
|
|
//tell the Task that attempt has started
|
|
//tell the Task that attempt has started
|
|
taskAttempt.eventHandler.handle(new TaskTAttemptEvent(
|
|
taskAttempt.eventHandler.handle(new TaskTAttemptEvent(
|