Package org.apache.hadoop.chukwa.inputtools.hdfsusage

Source Code of org.apache.hadoop.chukwa.inputtools.hdfsusage.HDFSUsagePlugin

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.apache.hadoop.chukwa.inputtools.hdfsusage;

import java.net.URI;

import org.apache.hadoop.chukwa.inputtools.jplugin.ChukwaMetricsList;
import org.apache.hadoop.chukwa.inputtools.jplugin.JPlugin;
import org.apache.hadoop.chukwa.inputtools.jplugin.JPluginStatusMetricsList;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class HDFSUsagePlugin implements JPlugin<HDFSUsageMetrics> {
  private FileSystem hdfs;
  private String path;
  private OrgChart chart;
 
  @Override
  public ChukwaMetricsList<HDFSUsageMetrics> getMetrics() throws Throwable {
    ChukwaMetricsList<HDFSUsageMetrics> metricsList = new ChukwaMetricsList<HDFSUsageMetrics>(getRecordType());
    FileStatus status[] = hdfs.globStatus(new Path(path));
    for(int i=0; i<status.length; i++) {
      long totalSize = hdfs.getContentSummary(status[i].getPath()).getLength();
      if(totalSize <= 0) {
        continue;
      }
      String name = status[i].getPath().getName();
      HDFSUsageMetrics usage = new HDFSUsageMetrics();
      usage.setName(name);
      usage.setSize(totalSize);
      usage.setLastModified(status[i].getModificationTime());
      metricsList.addMetrics(usage);
     
      // also contribute to manager's usage
      if(chart != null) {
        Employee employee = chart.get(name);
        if(employee != null) {
          employee = employee.getManager();
          while(employee != null) {
            HDFSUsageMetrics managerUsage = new HDFSUsageMetrics();
            managerUsage.setName(employee.getId());
            managerUsage.setSize(totalSize);
            metricsList.addMetrics(managerUsage);
            employee = employee.getManager();
          }
        }
      }
    }
    return metricsList;
  }

  @Override
  public void init(String[] args) throws Throwable {
    for(int i=0; i<args.length; i++) {
      if(args[i].equals("-c")) {
        String orgChartClass = args[i+1];
        chart = (OrgChart) Class.forName(orgChartClass).newInstance();
        i++;
      } else if(args[i].equals("-h")) {
        Configuration conf = new Configuration();
        hdfs = FileSystem.get(new URI(args[i+1]), conf);
        i++;
      } else if(args[i].equals("-p")) {
        path = args[i+1];
        i++;
      }
    }
   
    if(hdfs == null) {
      Configuration conf = new Configuration();
      hdfs = FileSystem.get(conf);
    }
   
    if(path == null) {
      path = "/user/*";
    }
  }

  @Override
  public JPluginStatusMetricsList getStatus() throws Throwable {
    JPluginStatusMetricsList list = new JPluginStatusMetricsList(this.getClass().getSimpleName());
    list.addStatus("hdfs", hdfs.getUri().toString());
    list.addStatus("path", path);
    return null;
  }

  @Override
  public String getRecordType() {
    return "HDFSUsage";
  }
}
TOP

Related Classes of org.apache.hadoop.chukwa.inputtools.hdfsusage.HDFSUsagePlugin

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.