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

网格计算

开发平台:

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 java.util.Random;
  20. import javax.management.ObjectName;
  21. import org.apache.hadoop.metrics.util.MBeanUtil;
  22. import org.apache.hadoop.metrics.util.MetricsDynamicMBeanBase;
  23. import org.apache.hadoop.metrics.util.MetricsRegistry;
  24. /**
  25.  * 
  26.  * This is the JMX MBean for reporting the DataNode Activity.
  27.  * The MBean is register using the name
  28.  *        "hadoop:service=DataNode,name=DataNodeActivity-<storageid>"
  29.  * 
  30.  * Many of the activity metrics are sampled and averaged on an interval 
  31.  * which can be specified in the metrics config file.
  32.  * <p>
  33.  * For the metrics that are sampled and averaged, one must specify 
  34.  * a metrics context that does periodic update calls. Most metrics contexts do.
  35.  * The default Null metrics context however does NOT. So if you aren't
  36.  * using any other metrics context then you can turn on the viewing and averaging
  37.  * of sampled metrics by  specifying the following two lines
  38.  *  in the hadoop-meterics.properties file:
  39. *  <pre>
  40.  *        dfs.class=org.apache.hadoop.metrics.spi.NullContextWithUpdateThread
  41.  *        dfs.period=10
  42.  *  </pre>
  43.  *<p>
  44.  * Note that the metrics are collected regardless of the context used.
  45.  * The context with the update thread is used to average the data periodically
  46.  *
  47.  *
  48.  *
  49.  * Impl details: We use a dynamic mbean that gets the list of the metrics
  50.  * from the metrics registry passed as an argument to the constructor
  51.  */
  52. public class DataNodeActivityMBean extends MetricsDynamicMBeanBase {
  53.   final private ObjectName mbeanName;
  54.   private Random rand = new Random(); 
  55.   public DataNodeActivityMBean(final MetricsRegistry mr, final String storageId) {
  56.     super(mr, "Activity statistics at the DataNode");
  57.     String storageName;
  58.     if (storageId.equals("")) {// Temp fix for the uninitialized storage
  59.       storageName = "UndefinedStorageId" + rand.nextInt();
  60.     } else {
  61.       storageName = storageId;
  62.     }
  63.     mbeanName = MBeanUtil.registerMBean("DataNode", "DataNodeActivity-" + storageName, this);
  64.   }
  65.   
  66.   public void shutdown() {
  67.     if (mbeanName != null)
  68.       MBeanUtil.unregisterMBean(mbeanName);
  69.   }
  70. }