blob: 95681712198926818dbc27b489b2aa00fb00f7c6 [file] [log] [blame]
/**
* 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.mapred.gridmix;
import org.apache.commons.lang.time.FastDateFormat;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.CommonConfigurationKeys;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.mapred.gridmix.Statistics.ClusterStats;
import org.apache.hadoop.mapreduce.server.jobtracker.JTConfig;
/**
* Summarizes the Hadoop cluster used in this {@link Gridmix} run.
* Statistics that are reported are
* <ul>
* <li>Total number of active trackers in the cluster</li>
* <li>Total number of blacklisted trackers in the cluster</li>
* <li>Max map task capacity of the cluster</li>
* <li>Max reduce task capacity of the cluster</li>
* </ul>
*
* Apart from these statistics, {@link JobTracker} and {@link FileSystem}
* addresses are also recorded in the summary.
*/
class ClusterSummarizer implements StatListener<ClusterStats> {
static final Log LOG = LogFactory.getLog(ClusterSummarizer.class);
private int numBlacklistedTrackers;
private int numActiveTrackers;
private int maxMapTasks;
private int maxReduceTasks;
private String jobTrackerInfo = Summarizer.NA;
private String namenodeInfo = Summarizer.NA;
@Override
@SuppressWarnings("deprecation")
public void update(ClusterStats item) {
try {
numBlacklistedTrackers = item.getStatus().getBlacklistedTrackers();
numActiveTrackers = item.getStatus().getTaskTrackers();
maxMapTasks = item.getStatus().getMaxMapTasks();
maxReduceTasks = item.getStatus().getMaxReduceTasks();
} catch (Exception e) {
long time = System.currentTimeMillis();
LOG.info("Error in processing cluster status at "
+ FastDateFormat.getInstance().format(time));
}
}
/**
* Summarizes the cluster used for this {@link Gridmix} run.
*/
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Cluster Summary:-");
builder.append("\nJobTracker: ").append(getJobTrackerInfo());
builder.append("\nFileSystem: ").append(getNamenodeInfo());
builder.append("\nNumber of blacklisted trackers: ")
.append(getNumBlacklistedTrackers());
builder.append("\nNumber of active trackers: ")
.append(getNumActiveTrackers());
builder.append("\nMax map task capacity: ")
.append(getMaxMapTasks());
builder.append("\nMax reduce task capacity: ").append(getMaxReduceTasks());
builder.append("\n\n");
return builder.toString();
}
void start(Configuration conf) {
jobTrackerInfo = conf.get(JTConfig.JT_IPC_ADDRESS);
namenodeInfo = conf.get(CommonConfigurationKeys.FS_DEFAULT_NAME_KEY);
}
// Getters
protected int getNumBlacklistedTrackers() {
return numBlacklistedTrackers;
}
protected int getNumActiveTrackers() {
return numActiveTrackers;
}
protected int getMaxMapTasks() {
return maxMapTasks;
}
protected int getMaxReduceTasks() {
return maxReduceTasks;
}
protected String getJobTrackerInfo() {
return jobTrackerInfo;
}
protected String getNamenodeInfo() {
return namenodeInfo;
}
}