This is an automated email from the ASF dual-hosted git repository. abmodi pushed a commit to branch trunk in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/trunk by this push: new ed45c13 YARN-2442. ResourceManager JMX UI does not give HA State. Contributed by Rohith Sharma and Cyrus Jackson. ed45c13 is described below commit ed45c13f67da06befcd4a70acb16fcf6d844ef2b Author: Abhishek Modi <abm...@apache.org> AuthorDate: Tue Oct 29 15:54:55 2019 +0530 YARN-2442. ResourceManager JMX UI does not give HA State. Contributed by Rohith Sharma and Cyrus Jackson. --- .../hadoop/yarn/server/resourcemanager/RMInfo.java | 76 ++++++++++++++++++++++ .../yarn/server/resourcemanager/RMInfoMXBean.java | 42 ++++++++++++ .../server/resourcemanager/ResourceManager.java | 9 ++- .../server/resourcemanager/TestRMHAMetrics.java | 24 +++++++ 4 files changed, 149 insertions(+), 2 deletions(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMInfo.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMInfo.java new file mode 100644 index 0000000..84d49cd --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMInfo.java @@ -0,0 +1,76 @@ +/** + * 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 + * <p> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p> + * 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 org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.hadoop.metrics2.util.MBeans; +import org.apache.hadoop.net.NetUtils; +import org.apache.hadoop.security.UserGroupInformation; + +import javax.management.NotCompliantMBeanException; +import javax.management.ObjectName; +import javax.management.StandardMBean; + +/** + * JMX bean for RM info. + */ +public class RMInfo implements RMInfoMXBean { + private static final Log LOG = LogFactory.getLog(RMNMInfo.class); + private ResourceManager resourceManager; + private ObjectName rmStatusBeanName; + + /** + * Constructor for RMInfo registers the bean with JMX. + * + * @param resourceManager resource manager's context object + */ + RMInfo(ResourceManager resourceManager) { + this.resourceManager = resourceManager; + } + + public void register() { + StandardMBean bean; + try { + bean = new StandardMBean(this, RMInfoMXBean.class); + rmStatusBeanName = MBeans.register("ResourceManager", "RMInfo", bean); + } catch (NotCompliantMBeanException e) { + LOG.warn("Error registering RMInfo MBean", e); + } + LOG.info("Registered RMInfo MBean"); + } + + public void unregister() { + if (rmStatusBeanName != null) { + MBeans.unregister(rmStatusBeanName); + } + } + + @Override public String getState() { + return this.resourceManager.getRMContext().getHAServiceState().toString(); + } + + @Override public String getHostAndPort() { + return NetUtils.getHostPortString(ResourceManager.getBindAddress( + this.resourceManager.getRMContext().getYarnConfiguration())); + } + + @Override public boolean isSecurityEnabled() { + return UserGroupInformation.isSecurityEnabled(); + } +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMInfoMXBean.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMInfoMXBean.java new file mode 100644 index 0000000..a6db870 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMInfoMXBean.java @@ -0,0 +1,42 @@ +/** + * 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; + +/** + * Interface for RMInfo class. + */ +public interface RMInfoMXBean { + + /** + * Gets the ResourceManager state. + * @return the ResourceManager state. + */ + String getState(); + + /** + * Gets the host and port colon separated. + * @return host and port colon separated. + */ + String getHostAndPort(); + + /** + * Gets if security is enabled. + * @return true, if security is enabled. + */ + boolean isSecurityEnabled(); +} \ No newline at end of file diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java index 228c1b5..9ba8f32 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java @@ -256,6 +256,8 @@ public class ResourceManager extends CompositeService return rmLoginUGI.getShortUserName(); } + private RMInfo rmStatusInfoBean; + @VisibleForTesting protected static void setClusterTimeStamp(long timestamp) { clusterTimeStamp = timestamp; @@ -279,6 +281,10 @@ public class ResourceManager extends CompositeService UserGroupInformation.setConfiguration(conf); this.rmContext = new RMContextImpl(); rmContext.setResourceManager(this); + rmContext.setYarnConfiguration(conf); + + rmStatusInfoBean = new RMInfo(this); + rmStatusInfoBean.register(); // Set HA configuration should be done before login this.rmContext.setHAEnabled(HAUtil.isHAEnabled(this.conf)); @@ -341,8 +347,6 @@ public class ResourceManager extends CompositeService } } - rmContext.setYarnConfiguration(conf); - createAndInitActiveServices(false); webAppAddress = WebAppUtils.getWebAppBindURL(this.conf, @@ -1422,6 +1426,7 @@ public class ResourceManager extends CompositeService } transitionToStandby(false); rmContext.setHAServiceState(HAServiceState.STOPPING); + rmStatusInfoBean.unregister(); } protected ResourceTrackerService createResourceTrackerService() { diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMHAMetrics.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMHAMetrics.java index 9f57cb1..b55cee6 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMHAMetrics.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMHAMetrics.java @@ -23,9 +23,14 @@ import org.apache.hadoop.security.UserGroupInformation; import org.apache.hadoop.yarn.conf.HAUtil; import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.QueueMetrics; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import javax.management.MBeanServer; +import javax.management.ObjectName; +import java.lang.management.ManagementFactory; + import static junit.framework.TestCase.assertNotNull; /** @@ -66,11 +71,30 @@ public class TestRMHAMetrics { Configuration conf = new YarnConfiguration(configuration); MockRM rm = new MockRM(conf); rm.init(conf); + + MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); + ObjectName mxbeanName = + new ObjectName("Hadoop:service=ResourceManager,name=RMInfo"); + + Assert.assertEquals("initializing", + (String) mbs.getAttribute(mxbeanName, "State")); + rm.start(); + Assert.assertEquals("standby", + (String) mbs.getAttribute(mxbeanName, "State")); + rm.transitionToActive(); + Assert + .assertEquals("active", + (String) mbs.getAttribute(mxbeanName, "State")); + rm.transitionToStandby(true); + Assert.assertEquals("standby", + (String) mbs.getAttribute(mxbeanName, "State")); + assertNotNull(DefaultMetricsSystem.instance().getSource("JvmMetrics")); assertNotNull(DefaultMetricsSystem.instance().getSource("UgiMetrics")); + rm.stop(); } } --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org