You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2009/09/10 07:03:35 UTC

svn commit: r813229 - in /hadoop/hbase/trunk: ./ src/docs/src/documentation/content/xdocs/ src/java/org/apache/hadoop/hbase/ipc/ src/java/org/apache/hadoop/hbase/master/metrics/ src/java/org/apache/hadoop/hbase/regionserver/metrics/

Author: stack
Date: Thu Sep 10 05:03:35 2009
New Revision: 813229

URL: http://svn.apache.org/viewvc?rev=813229&view=rev
Log:
HBASE-1722 Add support for exporting HBase metrics via JMX

Modified:
    hadoop/hbase/trunk/CHANGES.txt
    hadoop/hbase/trunk/src/docs/src/documentation/content/xdocs/metrics.xml
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/ipc/HBaseRpcMetrics.java
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/metrics/MasterMetrics.java
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/metrics/RegionServerMetrics.java

Modified: hadoop/hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/CHANGES.txt?rev=813229&r1=813228&r2=813229&view=diff
==============================================================================
--- hadoop/hbase/trunk/CHANGES.txt (original)
+++ hadoop/hbase/trunk/CHANGES.txt Thu Sep 10 05:03:35 2009
@@ -34,6 +34,7 @@
    HBASE-1800  Too many ZK connections
    HBASE-1819  Update to 0.20.1 hadoop and zk 3.2.1
    HBASE-1820  Update jruby from 1.2 to 1.3.1
+   HBASE-1722  Add support for exporting HBase metrics via JMX
 
   OPTIMIZATIONS
    HBASE-1765  Delay Result deserialization until asked for and permit

Modified: hadoop/hbase/trunk/src/docs/src/documentation/content/xdocs/metrics.xml
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/docs/src/documentation/content/xdocs/metrics.xml?rev=813229&r1=813228&r2=813229&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/docs/src/documentation/content/xdocs/metrics.xml (original)
+++ hadoop/hbase/trunk/src/docs/src/documentation/content/xdocs/metrics.xml Thu Sep 10 05:03:35 2009
@@ -63,5 +63,118 @@
       in ganglia, the stats are aggregated rather than reported per instance.
       </p>
     </section>
+
+    <section>
+      <title> Using with JMX </title>
+      <p>
+      In addition to the standard output contexts supported by the Hadoop 
+      metrics package, you can also export HBase metrics via Java Management 
+      Extensions (JMX).  This will allow viewing HBase stats in JConsole or 
+      any other JMX client.
+      </p>
+      <section>
+      <title>Enable HBase stats collection</title>
+      <p>
+      To enable JMX support in HBase, first edit 
+      <code>$HBASE_HOME/conf/hadoop-metrics.properties</code> to support 
+      metrics refreshing. (If you've already configured 
+      <code>hadoop-metrics.properties</code> for another output context, 
+      you can skip this step).
+      </p>
+      <source>
+# Configuration of the "hbase" context for null
+hbase.class=org.apache.hadoop.metrics.spi.NullContextWithUpdateThread
+hbase.period=60
+
+# Configuration of the "jvm" context for null
+jvm.class=org.apache.hadoop.metrics.spi.NullContextWithUpdateThread
+jvm.period=60
+
+# Configuration of the "rpc" context for null
+rpc.class=org.apache.hadoop.metrics.spi.NullContextWithUpdateThread
+rpc.period=60
+      </source>
+      </section>
+      <section>
+      <title>Setup JMX remote access</title>
+      <p>
+      For remote access, you will need to configure JMX remote passwords 
+      and access profiles.  Create the files:
+      </p>
+      <dl>
+        <dt><code>$HBASE_HOME/conf/jmxremote.passwd</code> (set permissions 
+        to 600)</dt>
+        <dd>
+        <source>
+monitorRole monitorpass
+controlRole controlpass
+        </source>
+        </dd>
+        
+        <dt><code>$HBASE_HOME/conf/jmxremote.access</code></dt>
+        <dd>
+        <source>
+monitorRole readonly
+controlRole readwrite
+        </source>
+        </dd>
+      </dl>
+      </section>
+      <section>
+      <title>Configure JMX in HBase startup</title>
+      <p>
+      Finally, edit the <code>$HBASE_HOME/conf/hbase-env.sh</code> and 
+      <code>$HBASE_HOME/bin/hbase</code> scripts for JMX support: 
+      </p>
+      <dl>
+        <dt><code>$HBASE_HOME/conf/hbase-env.sh</code></dt>
+        <dd>
+        <p>Add the lines:</p>
+        <source>
+JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false"
+JMX_OPTS="$JMX_OPTS -Dcom.sun.management.jmxremote.password.file=$HBASE_HOME/conf/jmxremote.passwd"
+JMX_OPTS="$JMX_OPTS -Dcom.sun.management.jmxremote.access.file=$HBASE_HOME/conf/jmxremote.access"
+
+export HBASE_MASTER_OPTS="$JMX_OPTS -Dcom.sun.management.jmxremote.port=10101"
+export HBASE_REGIONSERVER_OPTS="$JMX_OPTS -Dcom.sun.management.jmxremote.port=10102"
+        </source>
+        </dd>
+        <dt><code>$HBASE_HOME/bin/hbase</code></dt>
+        <dd>
+        <p>Towards the end of the script, replace the lines:</p>
+        <source>
+ # figure out which class to run
+if [ "$COMMAND" = "shell" ] ; then
+  CLASS="org.jruby.Main ${HBASE_HOME}/bin/hirb.rb"
+elif [ "$COMMAND" = "master" ] ; then
+  CLASS='org.apache.hadoop.hbase.master.HMaster'
+elif [ "$COMMAND" = "regionserver" ] ; then
+  CLASS='org.apache.hadoop.hbase.regionserver.HRegionServer'
+        </source>
+        <p>
+        with the lines: (adding the "HBASE_OPTS=..." lines for "master" and
+        "regionserver" commands)
+        </p>
+        <source>
+ # figure out which class to run
+if [ "$COMMAND" = "shell" ] ; then
+  CLASS="org.jruby.Main ${HBASE_HOME}/bin/hirb.rb"
+elif [ "$COMMAND" = "master" ] ; then
+  CLASS='org.apache.hadoop.hbase.master.HMaster'
+  HBASE_OPTS="$HBASE_OPTS $HBASE_MASTER_OPTS"
+elif [ "$COMMAND" = "regionserver" ] ; then
+  CLASS='org.apache.hadoop.hbase.regionserver.HRegionServer'
+  HBASE_OPTS="$HBASE_OPTS $HBASE_REGIONSERVER_OPTS"
+        </source>
+        </dd>
+      </dl>
+      <p>
+      After restarting the processes you want to monitor, you should now be 
+      able to run JConsole (included with the JDK since JDK 5.0) to view 
+      the statistics via JMX.  HBase MBeans are exported under the 
+      <strong><code>hadoop</code></strong> domain in JMX.
+      </p>
+      </section>
+    </section>
   </body>
 </document>

Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/ipc/HBaseRpcMetrics.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/ipc/HBaseRpcMetrics.java?rev=813229&r1=813228&r2=813229&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/ipc/HBaseRpcMetrics.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/ipc/HBaseRpcMetrics.java Thu Sep 10 05:03:35 2009
@@ -47,6 +47,7 @@
 public class HBaseRpcMetrics implements Updater {
   private MetricsRecord metricsRecord;
   private static Log LOG = LogFactory.getLog(HBaseRpcMetrics.class);
+  private final HBaseRPCStatistics rpcStatistics;
   
   public HBaseRpcMetrics(String hostName, String port) {
     MetricsContext context = MetricsUtil.getContext("rpc");
@@ -58,6 +59,8 @@
         + hostName + ", port=" + port);
 
     context.registerUpdater(this);
+    
+    rpcStatistics = new HBaseRPCStatistics(this.registry, hostName, port);
   }
   
   
@@ -110,6 +113,7 @@
   }
 
   public void shutdown() {
-    // Nothing to do
+    if (rpcStatistics != null)
+      rpcStatistics.shutdown();
   }
 }
\ No newline at end of file

Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/metrics/MasterMetrics.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/metrics/MasterMetrics.java?rev=813229&r1=813228&r2=813229&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/metrics/MasterMetrics.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/metrics/MasterMetrics.java Thu Sep 10 05:03:35 2009
@@ -39,6 +39,7 @@
   private final Log LOG = LogFactory.getLog(this.getClass());
   private final MetricsRecord metricsRecord;
   private final MetricsRegistry registry = new MetricsRegistry();
+  private final MasterStatistics masterStatistics;
   /*
    * Count of requests to the cluster since last call to metrics update
    */
@@ -52,11 +53,16 @@
     metricsRecord.setTag("Master", name);
     context.registerUpdater(this);
     JvmMetrics.init("Master", name);
+
+    // expose the MBean for metrics
+    masterStatistics = new MasterStatistics(this.registry);
+
     LOG.info("Initialized");
   }
   
   public void shutdown() {
-    // nought to do.
+    if (masterStatistics != null)
+      masterStatistics.shutdown();
   }
     
   /**

Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/metrics/RegionServerMetrics.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/metrics/RegionServerMetrics.java?rev=813229&r1=813228&r2=813229&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/metrics/RegionServerMetrics.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/metrics/RegionServerMetrics.java Thu Sep 10 05:03:35 2009
@@ -47,6 +47,7 @@
   private long lastUpdate = System.currentTimeMillis();
   private static final int MB = 1024*1024;
   private MetricsRegistry registry = new MetricsRegistry();
+  private final RegionServerStatistics statistics;
     
   public final MetricsTimeVaryingRate atomicIncrementTime =
       new MetricsTimeVaryingRate("atomicIncrementTime", registry);
@@ -112,13 +113,18 @@
     context.registerUpdater(this);
     // Add jvmmetrics.
     JvmMetrics.init("RegionServer", name);
+
+    // export for JMX
+    statistics = new RegionServerStatistics(this.registry, name);
+
     LOG.info("Initialized");
   }
-  
+
   public void shutdown() {
-    // nought to do.
+    if (statistics != null)
+      statistics.shutdown();
   }
-    
+
   /**
    * Since this object is a registered updater, this method will be called
    * periodically, e.g. every 5 seconds.
@@ -141,7 +147,7 @@
     this.metricsRecord.update();
     this.lastUpdate = System.currentTimeMillis();
   }
-  
+
   public void resetAllMinMax() {
     // Nothing to do
   }