[ 
https://issues.apache.org/jira/browse/HBASE-19804?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16335183#comment-16335183
 ] 

stack edited comment on HBASE-19804 at 1/23/18 12:01 AM:
---------------------------------------------------------

Punting from beta-2 since a workaround. We register a bunch of mbeans when we 
come up. We'd have to add sub=PORT_NO to all beans so you could register 
multiple RegionServers in same context.

 

Here's a search for MBean names in codebase. Would go through and add port as 
qualifier and then make sure comes up nice in the MBeanServer...

 
{code:java}
hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/io/MetricsIOSource.java:
 String METRICS_JMX_CONTEXT = "RegionServer,sub=" + METRICS_NAME;
hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactory.java:
 static final String METRICS_JMX_CONTEXT_SUFFIX = ",sub=" + METRICS_NAME;
hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/master/balancer/MetricsBalancerSource.java:
 String METRICS_JMX_CONTEXT = "Master,sub=" + METRICS_NAME;
hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsAssignmentManagerSource.java:
 String METRICS_JMX_CONTEXT = "Master,sub=" + METRICS_NAME;
hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsMasterFileSystemSource.java:
 String METRICS_JMX_CONTEXT = "Master,sub=" + METRICS_NAME;
hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsMasterProcSource.java:
 String METRICS_JMX_CONTEXT = "Master,sub=" + METRICS_NAME;
hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsMasterQuotaSource.java:
 String METRICS_JMX_CONTEXT = "Master,sub=" + METRICS_NAME;
hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsMasterSource.java:
 String METRICS_JMX_CONTEXT = "Master,sub=" + METRICS_NAME;
hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsSnapshotSource.java:
 String METRICS_JMX_CONTEXT = "Master,sub=" + METRICS_NAME;
hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsHeapMemoryManagerSource.java:
 String METRICS_JMX_CONTEXT = "RegionServer,sub=" + METRICS_NAME;
hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionAggregateSource.java:
 String METRICS_JMX_CONTEXT = "RegionServer,sub=" + METRICS_NAME;
hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerQuotaSource.java:
 String METRICS_JMX_CONTEXT = "RegionServer,sub=" + METRICS_NAME;
hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java:
 String METRICS_JMX_CONTEXT = "RegionServer,sub=" + METRICS_NAME;
hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableAggregateSource.java:
 String METRICS_JMX_CONTEXT = "RegionServer,sub=" + METRICS_NAME;
hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableLatencies.java:
 String METRICS_JMX_CONTEXT = "RegionServer,sub=" + METRICS_NAME;
hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.java:
 String METRICS_JMX_CONTEXT = "RegionServer,sub=" + METRICS_NAME;
hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSource.java:
 String METRICS_JMX_CONTEXT = "RegionServer,sub=" + METRICS_NAME;
hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceFactory.java:
 String THRIFT_ONE_JMX_CONTEXT = "Thrift,sub=ThriftOne";
hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceFactory.java:
 String THRIFT_TWO_JMX_CONTEXT = "Thrift,sub=ThriftTwo";
hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/zookeeper/MetricsZooKeeperSource.java:
 String METRICS_JMX_CONTEXT = "ZooKeeper,sub=" + METRICS_NAME;
hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/MetricsCoprocessor.java:
 = "Master,sub=" + MASTER_COPROC_METRICS_NAME;
hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/MetricsCoprocessor.java:
 private static final String RS_COPROC_METRICS_JMX_CONTEXT = "RegionServer,sub="
hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/MetricsCoprocessor.java:
 = "RegionServer,sub=" + REGION_COPROC_METRICS_NAME;
hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/MetricsCoprocessor.java:
 = "RegionServer,sub=" + WAL_COPROC_METRICS_NAME;
hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/DumpRegionServerMetrics.java:
 new ObjectName("Hadoop:service=HBase,name=RegionServer,sub=IPC"), null, false);
hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/DumpRegionServerMetrics.java:
 new ObjectName("Hadoop:service=HBase,name=RegionServer,sub=Replication"), 
null, false);
hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/DumpRegionServerMetrics.java:
 new ObjectName("Hadoop:service=HBase,name=RegionServer,sub=Server"), null, 
false);{code}


was (Author: stack):
Punting from beta-2 since a workaround. We register a bunch of mbeans when we 
come up. We'd have to add sub=PORT_NO to all beans so you could register 
multiple RegionServers in same context.

> [hbase-indexer] Metrics source RegionServer,sub=Server already exists!
> ----------------------------------------------------------------------
>
>                 Key: HBASE-19804
>                 URL: https://issues.apache.org/jira/browse/HBASE-19804
>             Project: HBase
>          Issue Type: Improvement
>          Components: hbase-indexer
>    Affects Versions: 2.0.0-beta-1
>            Reporter: stack
>            Assignee: stack
>            Priority: Major
>             Fix For: 2.0.0
>
>
> In the past, the hbase-indexer runs multiple RegionServers per JVM. In old 
> days, they had their own cut-down "RegionServer". In 2.0.0, we made it so 
> they could run an actual RegionServer but with services disabled. The latter 
> has an issue if you run more than one instance per JVM and it is NOT a 
> minihbasecluster instance. It fails with:
> {code:java}
> 1:09:13.371 PM  ERROR  HRegionServer  
> Failed init
> org.apache.hadoop.metrics2.MetricsException: Metrics source 
> RegionServer,sub=Server already exists!
>   at 
> org.apache.hadoop.metrics2.lib.DefaultMetricsSystem.newSourceName(DefaultMetricsSystem.java:152)
>   at 
> org.apache.hadoop.metrics2.lib.DefaultMetricsSystem.sourceName(DefaultMetricsSystem.java:125)
>   at 
> org.apache.hadoop.metrics2.impl.MetricsSystemImpl.register(MetricsSystemImpl.java:229)
>   at 
> org.apache.hadoop.hbase.metrics.BaseSourceImpl.<init>(BaseSourceImpl.java:115)
>   at 
> org.apache.hadoop.hbase.regionserver.MetricsRegionServerSourceImpl.<init>(MetricsRegionServerSourceImpl.java:101)
>   at 
> org.apache.hadoop.hbase.regionserver.MetricsRegionServerSourceImpl.<init>(MetricsRegionServerSourceImpl.java:93)
>   at 
> org.apache.hadoop.hbase.regionserver.MetricsRegionServerSourceFactoryImpl.createServer(MetricsRegionServerSourceFactoryImpl.java:69)
>   at 
> org.apache.hadoop.hbase.regionserver.MetricsRegionServer.<init>(MetricsRegionServer.java:56)
>   at 
> org.apache.hadoop.hbase.regionserver.HRegionServer.handleReportForDutyResponse(HRegionServer.java:1519)
>   at 
> org.apache.hadoop.hbase.regionserver.HRegionServer.run(HRegionServer.java:954)
>   at com.ngdata.sep.impl.SepConsumer$1.run(SepConsumer.java:203){code}
>  
> If you look in [10:26 AM] Wolfgang Hoschek: DefaultMetricsSystem code (found 
> by [~whoschek]), you'll see this:
> {code:java}
> synchronized ObjectName newObjectName(String name) {
>     try {
>       if (mBeanNames.map.containsKey(name) && !miniClusterMode) {
>         throw new MetricsException(name +" already exists!");
>       }
>       return new ObjectName(mBeanNames.uniqueName(name));
>     } catch (Exception e) {
>       throw new MetricsException(e);
>     }
>   }{code}
> i.e. if we are in a mini cluster context, we will not fail registering the 
> second bean instance.
>  
> If you look in master startup in HMasterCommandLine, you will see:
>  
> {code:java}
> // If 'local', defer to LocalHBaseCluster instance.  Starts master
> // and regionserver both in the one JVM.
> if (LocalHBaseCluster.isLocal(conf)) {
>   DefaultMetricsSystem.setMiniClusterMode(true);
> ....{code}
> ... will ensure we don't get the above exception in minihbasecluster context.
>  
> So, the idea here is to make it so being able to run more than one RS per JVM 
> is cleaner than doing the above hack. It needs to be a config too.... a 
> config. which says don't fail startup if second mbean registration just 
> because two RS in the one context (A later issue will be the accounting of 
> metrics per RS... If more than one RS, then we should make a unique mbean per 
> RS in the JVM).



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to