diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/RMHAUtils.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/RMHAUtils.java index a7e1ce9..68a5658 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/RMHAUtils.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/RMHAUtils.java @@ -73,23 +73,27 @@ private static HAServiceState getHAState(YarnConfiguration yarnConf) final YarnConfiguration conf) { Collection rmIds = conf.getStringCollection(YarnConfiguration.RM_HA_IDS); - List addrs = new ArrayList(); + String prefix; + String port; if (YarnConfiguration.useHttps(conf)) { - for (String id : rmIds) { - String addr = conf.get( - YarnConfiguration.RM_WEBAPP_HTTPS_ADDRESS + "." + id); - if (addr != null) { - addrs.add(addr); - } - } + prefix = YarnConfiguration.RM_WEBAPP_HTTPS_ADDRESS + "."; + port = ":" + YarnConfiguration.DEFAULT_RM_WEBAPP_HTTPS_PORT; } else { - for (String id : rmIds) { - String addr = conf.get(YarnConfiguration.RM_WEBAPP_ADDRESS + "." + id); - if (addr != null) { - addrs.add(addr); + prefix = YarnConfiguration.RM_WEBAPP_ADDRESS + "."; + port = ":" + YarnConfiguration.DEFAULT_RM_WEBAPP_PORT; + } + List addrs = new ArrayList(); + for (String id : rmIds) { + String addr = conf.get(prefix + id); + if (addr != null) { + addrs.add(addr); + } else { + String host = conf.get(YarnConfiguration.RM_HOSTNAME + "." + id); + if (host != null) { + addrs.add(host + port); } } } return addrs; } -} \ No newline at end of file +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/test/java/org/apache/hadoop/yarn/server/webproxy/amfilter/TestAmFilterInitializer.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/test/java/org/apache/hadoop/yarn/server/webproxy/amfilter/TestAmFilterInitializer.java index bec62ce..4de03cf 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/test/java/org/apache/hadoop/yarn/server/webproxy/amfilter/TestAmFilterInitializer.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/test/java/org/apache/hadoop/yarn/server/webproxy/amfilter/TestAmFilterInitializer.java @@ -135,6 +135,15 @@ public void testGetProxyHostsAndPortsForAmFilter() { assertEquals(WebAppUtils.getResolvedRMWebAppURLWithoutScheme(conf), proxyHosts.get(0)); + // Check conf in which only RM hostname is set + conf = new Configuration(false); + conf.set(YarnConfiguration.RM_WEBAPP_ADDRESS, + "${yarn.resourcemanager.hostname}:8088"); // default in yarn-default.xml + conf.set(YarnConfiguration.RM_HOSTNAME, "host1"); + proxyHosts = WebAppUtils.getProxyHostsAndPortsForAmFilter(conf); + assertEquals(1, proxyHosts.size()); + assertEquals("host1:8088", proxyHosts.get(0)); + // Check PROXY_ADDRESS has priority conf = new Configuration(false); conf.set(YarnConfiguration.PROXY_ADDRESS, "host1:1000"); @@ -188,6 +197,44 @@ public void testGetProxyHostsAndPortsForAmFilter() { Collections.sort(proxyHosts); assertEquals("host5:5000", proxyHosts.get(0)); assertEquals("host6:6000", proxyHosts.get(1)); + + // Check config without explicit RM_WEBAPP_ADDRESS settings (RM HA) + conf = new Configuration(false); + conf.setBoolean(YarnConfiguration.RM_HA_ENABLED, true); + conf.set(YarnConfiguration.RM_HA_IDS, "rm1,rm2,rm3"); + conf.set(YarnConfiguration.RM_HOSTNAME + ".rm1", "host2"); + conf.set(YarnConfiguration.RM_HOSTNAME + ".rm2", "host3"); + conf.set(YarnConfiguration.RM_HOSTNAME + ".rm3", "host4"); + conf.set(YarnConfiguration.RM_HOSTNAME + ".rm4", "dummy"); + proxyHosts = WebAppUtils.getProxyHostsAndPortsForAmFilter(conf); + assertEquals(3, proxyHosts.size()); + Collections.sort(proxyHosts); + assertEquals("host2:" + YarnConfiguration.DEFAULT_RM_WEBAPP_PORT, + proxyHosts.get(0)); + assertEquals("host3:" + YarnConfiguration.DEFAULT_RM_WEBAPP_PORT, + proxyHosts.get(1)); + assertEquals("host4:" + YarnConfiguration.DEFAULT_RM_WEBAPP_PORT, + proxyHosts.get(2)); + + // Check config without explicit RM_WEBAPP_HTTPS_ADDRESS settings (RM HA) + conf = new Configuration(false); + conf.set(YarnConfiguration.YARN_HTTP_POLICY_KEY, + HttpConfig.Policy.HTTPS_ONLY.toString()); + conf.setBoolean(YarnConfiguration.RM_HA_ENABLED, true); + conf.set(YarnConfiguration.RM_HA_IDS, "rm1,rm2,rm3"); + conf.set(YarnConfiguration.RM_HOSTNAME + ".rm1", "host2"); + conf.set(YarnConfiguration.RM_HOSTNAME + ".rm2", "host3"); + conf.set(YarnConfiguration.RM_HOSTNAME + ".rm3", "host4"); + conf.set(YarnConfiguration.RM_HOSTNAME + ".rm4", "dummy"); + proxyHosts = WebAppUtils.getProxyHostsAndPortsForAmFilter(conf); + assertEquals(3, proxyHosts.size()); + Collections.sort(proxyHosts); + assertEquals("host2:" + YarnConfiguration.DEFAULT_RM_WEBAPP_HTTPS_PORT, + proxyHosts.get(0)); + assertEquals("host3:" + YarnConfiguration.DEFAULT_RM_WEBAPP_HTTPS_PORT, + proxyHosts.get(1)); + assertEquals("host4:" + YarnConfiguration.DEFAULT_RM_WEBAPP_HTTPS_PORT, + proxyHosts.get(2)); } class MockAmFilterInitializer extends AmFilterInitializer {