DataNodeMetrics.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:6k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.hdfs.server.datanode.metrics;
  19. import org.apache.hadoop.conf.Configuration;
  20. import org.apache.hadoop.metrics.MetricsContext;
  21. import org.apache.hadoop.metrics.MetricsRecord;
  22. import org.apache.hadoop.metrics.MetricsUtil;
  23. import org.apache.hadoop.metrics.Updater;
  24. import org.apache.hadoop.metrics.jvm.JvmMetrics;
  25. import org.apache.hadoop.metrics.util.MetricsBase;
  26. import org.apache.hadoop.metrics.util.MetricsRegistry;
  27. import org.apache.hadoop.metrics.util.MetricsTimeVaryingInt;
  28. import org.apache.hadoop.metrics.util.MetricsTimeVaryingLong;
  29. import org.apache.hadoop.metrics.util.MetricsTimeVaryingRate;
  30. /**
  31.  * 
  32.  * This class is for maintaining  the various DataNode statistics
  33.  * and publishing them through the metrics interfaces.
  34.  * This also registers the JMX MBean for RPC.
  35.  * <p>
  36.  * This class has a number of metrics variables that are publicly accessible;
  37.  * these variables (objects) have methods to update their values;
  38.  *  for example:
  39.  *  <p> {@link #blocksRead}.inc()
  40.  *
  41.  */
  42. public class DataNodeMetrics implements Updater {
  43.   private final MetricsRecord metricsRecord;
  44.   private DataNodeActivityMBean datanodeActivityMBean;
  45.   public MetricsRegistry registry = new MetricsRegistry();
  46.   
  47.   
  48.   public MetricsTimeVaryingLong bytesWritten = 
  49.                       new MetricsTimeVaryingLong("bytes_written", registry);
  50.   public MetricsTimeVaryingLong bytesRead = 
  51.                       new MetricsTimeVaryingLong("bytes_read", registry);
  52.   public MetricsTimeVaryingInt blocksWritten = 
  53.                       new MetricsTimeVaryingInt("blocks_written", registry);
  54.   public MetricsTimeVaryingInt blocksRead = 
  55.                       new MetricsTimeVaryingInt("blocks_read", registry);
  56.   public MetricsTimeVaryingInt blocksReplicated =
  57.                       new MetricsTimeVaryingInt("blocks_replicated", registry);
  58.   public MetricsTimeVaryingInt blocksRemoved =
  59.                        new MetricsTimeVaryingInt("blocks_removed", registry);
  60.   public MetricsTimeVaryingInt blocksVerified = 
  61.                         new MetricsTimeVaryingInt("blocks_verified", registry);
  62.   public MetricsTimeVaryingInt blockVerificationFailures =
  63.                        new MetricsTimeVaryingInt("block_verification_failures", registry);
  64.   
  65.   public MetricsTimeVaryingInt readsFromLocalClient = 
  66.                 new MetricsTimeVaryingInt("reads_from_local_client", registry);
  67.   public MetricsTimeVaryingInt readsFromRemoteClient = 
  68.                 new MetricsTimeVaryingInt("reads_from_remote_client", registry);
  69.   public MetricsTimeVaryingInt writesFromLocalClient = 
  70.               new MetricsTimeVaryingInt("writes_from_local_client", registry);
  71.   public MetricsTimeVaryingInt writesFromRemoteClient = 
  72.               new MetricsTimeVaryingInt("writes_from_remote_client", registry);
  73.   
  74.   public MetricsTimeVaryingRate readBlockOp = 
  75.                 new MetricsTimeVaryingRate("readBlockOp", registry);
  76.   public MetricsTimeVaryingRate writeBlockOp = 
  77.                 new MetricsTimeVaryingRate("writeBlockOp", registry);
  78.   public MetricsTimeVaryingRate readMetadataOp = 
  79.                 new MetricsTimeVaryingRate("readMetadataOp", registry);
  80.   public MetricsTimeVaryingRate blockChecksumOp = 
  81.                 new MetricsTimeVaryingRate("blockChecksumOp", registry);
  82.   public MetricsTimeVaryingRate copyBlockOp = 
  83.                 new MetricsTimeVaryingRate("copyBlockOp", registry);
  84.   public MetricsTimeVaryingRate replaceBlockOp = 
  85.                 new MetricsTimeVaryingRate("replaceBlockOp", registry);
  86.   public MetricsTimeVaryingRate heartbeats = 
  87.                     new MetricsTimeVaryingRate("heartBeats", registry);
  88.   public MetricsTimeVaryingRate blockReports = 
  89.                     new MetricsTimeVaryingRate("blockReports", registry);
  90.     
  91.   public DataNodeMetrics(Configuration conf, String storageId) {
  92.     String sessionId = conf.get("session.id"); 
  93.     // Initiate reporting of Java VM metrics
  94.     JvmMetrics.init("DataNode", sessionId);
  95.     
  96.     // Now the MBean for the data node
  97.     datanodeActivityMBean = new DataNodeActivityMBean(registry, storageId);
  98.     
  99.     // Create record for DataNode metrics
  100.     MetricsContext context = MetricsUtil.getContext("dfs");
  101.     metricsRecord = MetricsUtil.createRecord(context, "datanode");
  102.     metricsRecord.setTag("sessionId", sessionId);
  103.     context.registerUpdater(this);
  104.   }
  105.   
  106.   public void shutdown() {
  107.     if (datanodeActivityMBean != null) 
  108.       datanodeActivityMBean.shutdown();
  109.   }
  110.     
  111.   /**
  112.    * Since this object is a registered updater, this method will be called
  113.    * periodically, e.g. every 5 seconds.
  114.    */
  115.   public void doUpdates(MetricsContext unused) {
  116.     synchronized (this) {
  117.       for (MetricsBase m : registry.getMetricsList()) {
  118.         m.pushMetric(metricsRecord);
  119.       }
  120.     }
  121.     metricsRecord.update();
  122.   }
  123.   public void resetAllMinMax() {
  124.     readBlockOp.resetMinMax();
  125.     writeBlockOp.resetMinMax();
  126.     readMetadataOp.resetMinMax();
  127.     blockChecksumOp.resetMinMax();
  128.     copyBlockOp.resetMinMax();
  129.     replaceBlockOp.resetMinMax();
  130.     heartbeats.resetMinMax();
  131.     blockReports.resetMinMax();
  132.   }
  133. }