diff --git a/hadoop-mapreduce-project/CHANGES.txt b/hadoop-mapreduce-project/CHANGES.txt index 4759953c86..b84f64b5bf 100644 --- a/hadoop-mapreduce-project/CHANGES.txt +++ b/hadoop-mapreduce-project/CHANGES.txt @@ -245,6 +245,9 @@ Release 0.23.3 - UNRELEASED MAPREDUCE-3672. Killed maps shouldn't be counted towards JobCounter.NUM_FAILED_MAPS. (Anupam Seth via tgraves) + MAPREDUCE-3682 Tracker URL says AM tasks run on localhost. + (Ravi Prakash via tgraves) + Release 0.23.2 - UNRELEASED INCOMPATIBLE CHANGES diff --git a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/MRAppMaster.java b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/MRAppMaster.java index 02c088e5f4..6fc8fab10f 100644 --- a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/MRAppMaster.java +++ b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/MRAppMaster.java @@ -643,7 +643,8 @@ private final class ContainerAllocatorRouter extends AbstractService public synchronized void start() { if (job.isUber()) { this.containerAllocator = new LocalContainerAllocator( - this.clientService, this.context); + this.clientService, this.context, nmHost, nmPort, nmHttpPort + , containerID); } else { this.containerAllocator = new RMContainerAllocator( this.clientService, this.context); diff --git a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/local/LocalContainerAllocator.java b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/local/LocalContainerAllocator.java index 646320ba62..b65d0f68cb 100644 --- a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/local/LocalContainerAllocator.java +++ b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/local/LocalContainerAllocator.java @@ -65,14 +65,23 @@ public class LocalContainerAllocator extends RMCommunicator private AtomicInteger containerCount = new AtomicInteger(); private long retryInterval; private long retrystartTime; + private String nmHost; + private int nmPort; + private int nmHttpPort; + private ContainerId containerId; private final RecordFactory recordFactory = RecordFactoryProvider.getRecordFactory(null); public LocalContainerAllocator(ClientService clientService, - AppContext context) { + AppContext context, String nmHost, int nmPort, int nmHttpPort + , ContainerId cId) { super(clientService, context); this.eventHandler = context.getEventHandler(); + this.nmHost = nmHost; + this.nmPort = nmPort; + this.nmHttpPort = nmHttpPort; + this.containerId = cId; } @Override @@ -131,17 +140,17 @@ public void handle(ContainerAllocatorEvent event) { LOG.info("Processing the event " + event.toString()); ContainerId cID = recordFactory.newRecordInstance(ContainerId.class); cID.setApplicationAttemptId(applicationAttemptId); - // use negative ids to denote that these are local. Need a better way ?? - cID.setId((-1) * containerCount.getAndIncrement()); + // Assign the same container ID as the AM + cID.setId(this.containerId.getId()); Container container = recordFactory.newRecordInstance(Container.class); container.setId(cID); NodeId nodeId = Records.newRecord(NodeId.class); - nodeId.setHost("localhost"); - nodeId.setPort(1234); + nodeId.setHost(this.nmHost); + nodeId.setPort(this.nmPort); container.setNodeId(nodeId); container.setContainerToken(null); - container.setNodeHttpAddress("localhost:8042"); + container.setNodeHttpAddress(this.nmHost + ":" + this.nmHttpPort); // send the container-assigned event to task attempt if (event.getAttemptID().getTaskId().getTaskType() == TaskType.MAP) {