You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by ep...@apache.org on 2020/06/09 20:11:54 UTC
[hadoop] branch branch-3.3 updated: YARN-10300: appMasterHost not
set in RM ApplicationSummary when AM fails before first heartbeat.
Contributed by Eric Badger (ebadger).
This is an automated email from the ASF dual-hosted git repository.
epayne pushed a commit to branch branch-3.3
in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/branch-3.3 by this push:
new a7526ba YARN-10300: appMasterHost not set in RM ApplicationSummary when AM fails before first heartbeat. Contributed by Eric Badger (ebadger).
a7526ba is described below
commit a7526ba9f781e27658c2184513cd448c83b239af
Author: Eric E Payne <er...@verizonmedia.com>
AuthorDate: Tue Jun 9 18:43:16 2020 +0000
YARN-10300: appMasterHost not set in RM ApplicationSummary when AM fails before first heartbeat. Contributed by Eric Badger (ebadger).
(cherry picked from commit 56247db3022705635580c4d2f8b0abde109f954f)
---
.../yarn/server/resourcemanager/RMAppManager.java | 13 +++++++-
.../server/resourcemanager/TestAppManager.java | 15 ++++++++++
.../TestApplicationMasterLauncher.java | 35 ++++++++++++++++++++++
3 files changed, 62 insertions(+), 1 deletion(-)
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMAppManager.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMAppManager.java
index debd4d9..440b0ea 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMAppManager.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMAppManager.java
@@ -26,6 +26,8 @@ import java.util.TreeSet;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
+import org.apache.hadoop.yarn.api.records.Container;
+import org.apache.hadoop.yarn.api.records.NodeId;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.hadoop.conf.Configuration;
@@ -190,7 +192,16 @@ public class RMAppManager implements EventHandler<RMAppManagerEvent>,
RMAppAttempt attempt = app.getCurrentAppAttempt();
if (attempt != null) {
trackingUrl = attempt.getTrackingUrl();
- host = attempt.getHost();
+ Container masterContainer = attempt.getMasterContainer();
+ if (masterContainer != null) {
+ NodeId nodeId = masterContainer.getNodeId();
+ if (nodeId != null) {
+ String amHost = nodeId.getHost();
+ if (amHost != null) {
+ host = amHost;
+ }
+ }
+ }
}
RMAppMetrics metrics = app.getRMAppMetrics();
SummaryBuilder summary = new SummaryBuilder()
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestAppManager.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestAppManager.java
index 5f5c3f2..15a31bc 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestAppManager.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestAppManager.java
@@ -22,7 +22,10 @@ package org.apache.hadoop.yarn.server.resourcemanager;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
+import org.apache.hadoop.yarn.api.records.Container;
+import org.apache.hadoop.yarn.api.records.NodeId;
import org.apache.hadoop.yarn.api.records.QueueACL;
+import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttempt;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.hadoop.conf.Configuration;
@@ -972,6 +975,17 @@ public class TestAppManager extends AppManagerTestBase{
when(app.getSubmitTime()).thenReturn(1000L);
when(app.getLaunchTime()).thenReturn(2000L);
when(app.getApplicationTags()).thenReturn(Sets.newHashSet("tag2", "tag1"));
+
+ RMAppAttempt mockRMAppAttempt = mock(RMAppAttempt.class);
+ Container mockContainer = mock(Container.class);
+ NodeId mockNodeId = mock(NodeId.class);
+ String host = "127.0.0.1";
+
+ when(mockNodeId.getHost()).thenReturn(host);
+ when(mockContainer.getNodeId()).thenReturn(mockNodeId);
+ when(mockRMAppAttempt.getMasterContainer()).thenReturn(mockContainer);
+ when(app.getCurrentAppAttempt()).thenReturn(mockRMAppAttempt);
+
Map<String, Long> resourceSecondsMap = new HashMap<>();
resourceSecondsMap.put(ResourceInformation.MEMORY_MB.getName(), 16384L);
resourceSecondsMap.put(ResourceInformation.VCORES.getName(), 64L);
@@ -993,6 +1007,7 @@ public class TestAppManager extends AppManagerTestBase{
assertTrue(msg.contains("Multiline" + escaped +"AppName"));
assertTrue(msg.contains("Multiline" + escaped +"UserName"));
assertTrue(msg.contains("Multiline" + escaped +"QueueName"));
+ assertTrue(msg.contains("appMasterHost=" + host));
assertTrue(msg.contains("submitTime=1000"));
assertTrue(msg.contains("launchTime=2000"));
assertTrue(msg.contains("memorySeconds=16384"));
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestApplicationMasterLauncher.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestApplicationMasterLauncher.java
index 3cf809d..7b3c2f0 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestApplicationMasterLauncher.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestApplicationMasterLauncher.java
@@ -453,6 +453,41 @@ public class TestApplicationMasterLauncher {
testSetupTokens(true, conf);
}
+ @Test
+ public void testAMMasterContainerHost() throws Exception {
+ //Test that masterContainer and its associated host are
+ //set before the AM is even launched.
+ MockRM rm = new MockRM();
+ rm.start();
+ String host = "127.0.0.1";
+ String port = "1234";
+ MockNM nm1 = rm.registerNode(host + ":" + port, 5120);
+ RMApp app = MockRMAppSubmitter.submitWithMemory(2000, rm);
+ // kick the scheduling
+ nm1.nodeHeartbeat(true);
+ RMAppAttempt attempt = app.getCurrentAppAttempt();
+
+ try {
+ GenericTestUtils.waitFor(new Supplier<Boolean>() {
+ @Override public Boolean get() {
+ return attempt.getMasterContainer() != null;
+ }
+ }, 10, 200 * 100);
+ } catch (TimeoutException e) {
+ fail("timed out while waiting for AM Launch to happen.");
+ }
+
+ Assert.assertEquals(
+ app.getCurrentAppAttempt().getMasterContainer().getNodeId().getHost(),
+ host);
+
+ //send kill before launch
+ rm.killApp(app.getApplicationId());
+ rm.waitForState(app.getApplicationId(), RMAppState.KILLED);
+
+ rm.stop();
+ }
+
private void testSetupTokens(boolean https, YarnConfiguration conf)
throws Exception {
MockRM rm = new MockRM(conf);
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org