diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/RMHAUtils.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/RMHAUtils.java new file mode 100644 index 0000000..dab9f28 --- /dev/null +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/RMHAUtils.java @@ -0,0 +1,70 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.yarn.util; + +import java.util.Collection; + +import org.apache.hadoop.classification.InterfaceAudience.Private; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.fs.CommonConfigurationKeys; +import org.apache.hadoop.ha.HAServiceProtocol; +import org.apache.hadoop.ha.HAServiceProtocol.HAServiceState; +import org.apache.hadoop.ha.HAServiceTarget; +import org.apache.hadoop.yarn.client.RMHAServiceTarget; +import org.apache.hadoop.yarn.conf.YarnConfiguration; + +@Private +@Unstable +public class RMHAUtils { + + public static String findActiveRMHAId(YarnConfiguration conf) { + YarnConfiguration yarnConf = new YarnConfiguration(conf); + Collection rmIds = + yarnConf.getStringCollection(YarnConfiguration.RM_HA_IDS); + for (String currentId : rmIds) { + yarnConf.set(YarnConfiguration.RM_HA_ID, currentId); + try { + HAServiceState haState = getHAState(yarnConf); + if (haState.equals(HAServiceState.ACTIVE)) { + return currentId; + } + } catch (Exception e) { + // Couldn't check if this RM is active. Do nothing. Worst case, + // we wouldn't find an Active RM and return null. + } + } + return null; // Couldn't find an Active RM + } + + private static HAServiceState getHAState(YarnConfiguration yarnConf) + throws Exception { + HAServiceTarget haServiceTarget; + int rpcTimeoutForChecks = + yarnConf.getInt(CommonConfigurationKeys.HA_FC_CLI_CHECK_TIMEOUT_KEY, + CommonConfigurationKeys.HA_FC_CLI_CHECK_TIMEOUT_DEFAULT); + + yarnConf.set(CommonConfigurationKeys.HADOOP_SECURITY_SERVICE_USER_NAME_KEY, + yarnConf.get(YarnConfiguration.RM_PRINCIPAL, "")); + haServiceTarget = new RMHAServiceTarget(yarnConf); + HAServiceProtocol proto = + haServiceTarget.getProxy(yarnConf, rpcTimeoutForChecks); + HAServiceState haState = proto.getServiceStatus().getState(); + return haState; + } +} \ No newline at end of file diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/util/WebAppUtils.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/util/WebAppUtils.java index 61ac708..1d90be9 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/util/WebAppUtils.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/util/WebAppUtils.java @@ -30,8 +30,10 @@ import org.apache.hadoop.http.HttpServer2; import org.apache.hadoop.net.NetUtils; import org.apache.hadoop.yarn.api.records.ContainerId; +import org.apache.hadoop.yarn.conf.HAUtil; import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.util.ConverterUtils; +import org.apache.hadoop.yarn.util.RMHAUtils; @Private @Evolving @@ -85,6 +87,14 @@ public static String getRMWebAppURLWithoutScheme(Configuration conf) { public static String getProxyHostAndPort(Configuration conf) { String addr = conf.get(YarnConfiguration.PROXY_ADDRESS); if(addr == null || addr.isEmpty()) { + // Resolve when using RM HA + if (HAUtil.isHAEnabled(conf)) { + conf = new YarnConfiguration(conf); + String activeRMId = RMHAUtils.findActiveRMHAId((YarnConfiguration)conf); + if (activeRMId != null) { + conf.set(YarnConfiguration.RM_HA_ID, activeRMId); + } + } addr = getResolvedRMWebAppURLWithoutScheme(conf); } return addr; diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMHAUtils.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMHAUtils.java deleted file mode 100644 index a964875..0000000 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMHAUtils.java +++ /dev/null @@ -1,70 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.hadoop.yarn.server.resourcemanager; - -import java.util.Collection; - -import org.apache.hadoop.classification.InterfaceAudience.Private; -import org.apache.hadoop.classification.InterfaceStability.Unstable; -import org.apache.hadoop.fs.CommonConfigurationKeys; -import org.apache.hadoop.ha.HAServiceProtocol; -import org.apache.hadoop.ha.HAServiceProtocol.HAServiceState; -import org.apache.hadoop.ha.HAServiceTarget; -import org.apache.hadoop.yarn.client.RMHAServiceTarget; -import org.apache.hadoop.yarn.conf.YarnConfiguration; - -@Private -@Unstable -public class RMHAUtils { - - public static String findActiveRMHAId(YarnConfiguration conf) { - YarnConfiguration yarnConf = new YarnConfiguration(conf); - Collection rmIds = - yarnConf.getStringCollection(YarnConfiguration.RM_HA_IDS); - for (String currentId : rmIds) { - yarnConf.set(YarnConfiguration.RM_HA_ID, currentId); - try { - HAServiceState haState = getHAState(yarnConf); - if (haState.equals(HAServiceState.ACTIVE)) { - return currentId; - } - } catch (Exception e) { - // Couldn't check if this RM is active. Do nothing. Worst case, - // we wouldn't find an Active RM and return null. - } - } - return null; // Couldn't find an Active RM - } - - private static HAServiceState getHAState(YarnConfiguration yarnConf) - throws Exception { - HAServiceTarget haServiceTarget; - int rpcTimeoutForChecks = - yarnConf.getInt(CommonConfigurationKeys.HA_FC_CLI_CHECK_TIMEOUT_KEY, - CommonConfigurationKeys.HA_FC_CLI_CHECK_TIMEOUT_DEFAULT); - - yarnConf.set(CommonConfigurationKeys.HADOOP_SECURITY_SERVICE_USER_NAME_KEY, - yarnConf.get(YarnConfiguration.RM_PRINCIPAL, "")); - haServiceTarget = new RMHAServiceTarget(yarnConf); - HAServiceProtocol proto = - haServiceTarget.getProxy(yarnConf, rpcTimeoutForChecks); - HAServiceState haState = proto.getServiceStatus().getState(); - return haState; - } -} \ No newline at end of file diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebApp.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebApp.java index fe4a592..c46b033 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebApp.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebApp.java @@ -25,10 +25,10 @@ import org.apache.hadoop.ha.HAServiceProtocol.HAServiceState; import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.server.resourcemanager.RMContext; -import org.apache.hadoop.yarn.server.resourcemanager.RMHAUtils; import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager; import org.apache.hadoop.yarn.server.resourcemanager.security.QueueACLsManager; import org.apache.hadoop.yarn.server.security.ApplicationACLsManager; +import org.apache.hadoop.yarn.util.RMHAUtils; import org.apache.hadoop.yarn.webapp.Dispatcher; import org.apache.hadoop.yarn.webapp.GenericExceptionHandler; import org.apache.hadoop.yarn.webapp.WebApp;