HBASE-13564 Master MBeans are not published

This commit is contained in:
Ashish Singhi 2015-04-25 16:43:27 +05:30 committed by Nick Dimiduk
parent f487dda20c
commit a725044644
3 changed files with 18 additions and 8 deletions

View File

@ -51,7 +51,8 @@ public class JMXListener implements Coprocessor {
public static final Log LOG = LogFactory.getLog(JMXListener.class); public static final Log LOG = LogFactory.getLog(JMXListener.class);
public static final String RMI_REGISTRY_PORT_CONF_KEY = ".rmi.registry.port"; public static final String RMI_REGISTRY_PORT_CONF_KEY = ".rmi.registry.port";
public static final String RMI_CONNECTOR_PORT_CONF_KEY = ".rmi.connector.port"; public static final String RMI_CONNECTOR_PORT_CONF_KEY = ".rmi.connector.port";
public static final int defRMIRegistryPort = 10102; public static final int defMasterRMIRegistryPort = 10101;
public static final int defRegionserverRMIRegistryPort = 10102;
/** /**
* workaround for HBASE-11146 * workaround for HBASE-11146
@ -163,11 +164,17 @@ public class JMXListener implements Coprocessor {
Configuration conf = env.getConfiguration(); Configuration conf = env.getConfiguration();
if (env instanceof MasterCoprocessorEnvironment) { if (env instanceof MasterCoprocessorEnvironment) {
LOG.error("JMXListener should not be loaded in Master Environment!"); // running on Master
} else if (env instanceof RegionServerCoprocessorEnvironment) {
// running on RegionServer --since 0.99 HMaster is also a HRegionServer
rmiRegistryPort = rmiRegistryPort =
conf.getInt("regionserver" + RMI_REGISTRY_PORT_CONF_KEY, defRMIRegistryPort); conf.getInt("master" + RMI_REGISTRY_PORT_CONF_KEY, defMasterRMIRegistryPort);
rmiConnectorPort = conf.getInt("master" + RMI_CONNECTOR_PORT_CONF_KEY, rmiRegistryPort);
LOG.info("Master rmiRegistryPort:" + rmiRegistryPort + ",Master rmiConnectorPort:"
+ rmiConnectorPort);
} else if (env instanceof RegionServerCoprocessorEnvironment) {
// running on RegionServer
rmiRegistryPort =
conf.getInt("regionserver" + RMI_REGISTRY_PORT_CONF_KEY,
defRegionserverRMIRegistryPort);
rmiConnectorPort = rmiConnectorPort =
conf.getInt("regionserver" + RMI_CONNECTOR_PORT_CONF_KEY, rmiRegistryPort); conf.getInt("regionserver" + RMI_CONNECTOR_PORT_CONF_KEY, rmiRegistryPort);
LOG.info("RegionServer rmiRegistryPort:" + rmiRegistryPort LOG.info("RegionServer rmiRegistryPort:" + rmiRegistryPort
@ -175,6 +182,7 @@ public class JMXListener implements Coprocessor {
} else if (env instanceof RegionCoprocessorEnvironment) { } else if (env instanceof RegionCoprocessorEnvironment) {
LOG.error("JMXListener should not be loaded in Region Environment!"); LOG.error("JMXListener should not be loaded in Region Environment!");
return;
} }
synchronized(JMXListener.class) { synchronized(JMXListener.class) {

View File

@ -54,6 +54,9 @@ public class TestJMXListener {
JMXListener.class.getName()); JMXListener.class.getName());
conf.setInt("regionserver.rmi.registry.port", connectorPort); conf.setInt("regionserver.rmi.registry.port", connectorPort);
conf.set(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY, JMXListener.class.getName());
conf.setInt("master.rmi.registry.port", connectorPort - 1);
UTIL.startMiniCluster(); UTIL.startMiniCluster();
} }

View File

@ -994,8 +994,7 @@ To enable it in 0.99 or above, add below property in _hbase-site.xml_:
NOTE: DO NOT set `com.sun.management.jmxremote.port` for Java VM at the same time. NOTE: DO NOT set `com.sun.management.jmxremote.port` for Java VM at the same time.
Currently it supports Master and RegionServer Java VM. Currently it supports Master and RegionServer Java VM.
The reason why you only configure coprocessor for 'regionserver' is that, starting from HBase 0.99, a Master IS also a RegionServer. By default, the JMX listens on TCP port 10102, you can further configure the port using below properties:
(See link:https://issues.apache.org/jira/browse/HBASE-10569[HBASE-10569] for more information.) By default, the JMX listens on TCP port 10102, you can further configure the port using below properties:
[source,xml] [source,xml]
---- ----
@ -1062,7 +1061,7 @@ Finally start `jconsole` on the client using the key store:
jconsole -J-Djavax.net.ssl.trustStore=/home/tianq/jconsoleKeyStore jconsole -J-Djavax.net.ssl.trustStore=/home/tianq/jconsoleKeyStore
---- ----
NOTE: for HBase 0.98, To enable the HBase JMX implementation on Master, you also need to add below property in _hbase-site.xml_: NOTE: To enable the HBase JMX implementation on Master, you also need to add below property in _hbase-site.xml_:
[source,xml] [source,xml]
---- ----