From 4e44259cbda1d5c5e923f979c6f6f8bdb3056198 Mon Sep 17 00:00:00 2001 From: Thomas Graves Date: Wed, 4 Apr 2012 15:08:39 +0000 Subject: [PATCH] MAPREDUCE-3682 Tracker URL says AM tasks run on localhost. (Ravi Prakash via tgraves) git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1309440 13f79535-47bb-0310-9956-ffa450edef68 --- hadoop-mapreduce-project/CHANGES.txt | 3 +++ .../hadoop/mapreduce/v2/app/MRAppMaster.java | 3 ++- .../v2/app/local/LocalContainerAllocator.java | 21 +++++++++++++------ 3 files changed, 20 insertions(+), 7 deletions(-) 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) {