blob: abe95185ffb3f5eab75c55c64d24557349c9cd3a [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.mapreduce.jobhistory;
import org.apache.hadoop.mapreduce.v2.api.records.JobId;
import org.apache.hadoop.util.StringUtils;
public class JobSummary {
private JobId jobId;
private long jobSubmitTime;
private long jobLaunchTime;
private long firstMapTaskLaunchTime; // MapAttempteStarted |
// TaskAttemptStartEvent
private long firstReduceTaskLaunchTime; // ReduceAttemptStarted |
// TaskAttemptStartEvent
private long jobFinishTime;
private int numFinishedMaps;
private int numFailedMaps;
private int numFinishedReduces;
private int numFailedReduces;
private int resourcesPerMap; // resources used per map/min resource
private int resourcesPerReduce; // resources used per reduce/min resource
// resource models
// private int numSlotsPerReduce; | Doesn't make sense with potentially
// different resource models
private String user;
private String queue;
private String jobStatus;
private long mapSlotSeconds; // TODO Not generated yet in MRV2
private long reduceSlotSeconds; // TODO Not generated yet MRV2
// private int clusterSlotCapacity;
private String jobName;
JobSummary() {
}
public JobId getJobId() {
return jobId;
}
public void setJobId(JobId jobId) {
this.jobId = jobId;
}
public long getJobSubmitTime() {
return jobSubmitTime;
}
public void setJobSubmitTime(long jobSubmitTime) {
this.jobSubmitTime = jobSubmitTime;
}
public long getJobLaunchTime() {
return jobLaunchTime;
}
public void setJobLaunchTime(long jobLaunchTime) {
this.jobLaunchTime = jobLaunchTime;
}
public long getFirstMapTaskLaunchTime() {
return firstMapTaskLaunchTime;
}
public void setFirstMapTaskLaunchTime(long firstMapTaskLaunchTime) {
this.firstMapTaskLaunchTime = firstMapTaskLaunchTime;
}
public long getFirstReduceTaskLaunchTime() {
return firstReduceTaskLaunchTime;
}
public void setFirstReduceTaskLaunchTime(long firstReduceTaskLaunchTime) {
this.firstReduceTaskLaunchTime = firstReduceTaskLaunchTime;
}
public long getJobFinishTime() {
return jobFinishTime;
}
public void setJobFinishTime(long jobFinishTime) {
this.jobFinishTime = jobFinishTime;
}
public int getNumFinishedMaps() {
return numFinishedMaps;
}
public void setNumFinishedMaps(int numFinishedMaps) {
this.numFinishedMaps = numFinishedMaps;
}
public int getNumFailedMaps() {
return numFailedMaps;
}
public void setNumFailedMaps(int numFailedMaps) {
this.numFailedMaps = numFailedMaps;
}
public int getResourcesPerMap() {
return resourcesPerMap;
}
public void setResourcesPerMap(int resourcesPerMap) {
this.resourcesPerMap = resourcesPerMap;
}
public int getNumFinishedReduces() {
return numFinishedReduces;
}
public void setNumFinishedReduces(int numFinishedReduces) {
this.numFinishedReduces = numFinishedReduces;
}
public int getNumFailedReduces() {
return numFailedReduces;
}
public void setNumFailedReduces(int numFailedReduces) {
this.numFailedReduces = numFailedReduces;
}
public int getResourcesPerReduce() {
return this.resourcesPerReduce;
}
public void setResourcesPerReduce(int resourcesPerReduce) {
this.resourcesPerReduce = resourcesPerReduce;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getQueue() {
return queue;
}
public void setQueue(String queue) {
this.queue = queue;
}
public String getJobStatus() {
return jobStatus;
}
public void setJobStatus(String jobStatus) {
this.jobStatus = jobStatus;
}
public long getMapSlotSeconds() {
return mapSlotSeconds;
}
public void setMapSlotSeconds(long mapSlotSeconds) {
this.mapSlotSeconds = mapSlotSeconds;
}
public long getReduceSlotSeconds() {
return reduceSlotSeconds;
}
public void setReduceSlotSeconds(long reduceSlotSeconds) {
this.reduceSlotSeconds = reduceSlotSeconds;
}
public String getJobName() {
return jobName;
}
public void setJobName(String jobName) {
this.jobName = jobName;
}
public String getJobSummaryString() {
SummaryBuilder summary = new SummaryBuilder()
.add("jobId", jobId)
.add("submitTime", jobSubmitTime)
.add("launchTime", jobLaunchTime)
.add("firstMapTaskLaunchTime", firstMapTaskLaunchTime)
.add("firstReduceTaskLaunchTime", firstReduceTaskLaunchTime)
.add("finishTime", jobFinishTime)
.add("resourcesPerMap", resourcesPerMap)
.add("resourcesPerReduce", resourcesPerReduce)
.add("numMaps", numFinishedMaps + numFailedMaps)
.add("numReduces", numFinishedReduces + numFailedReduces)
.add("user", user)
.add("queue", queue)
.add("status", jobStatus)
.add("mapSlotSeconds", mapSlotSeconds)
.add("reduceSlotSeconds", reduceSlotSeconds)
.add("jobName", jobName);
return summary.toString();
}
static final char EQUALS = '=';
static final char[] charsToEscape = { StringUtils.COMMA, EQUALS,
StringUtils.ESCAPE_CHAR };
static class SummaryBuilder {
final StringBuilder buffer = new StringBuilder();
// A little optimization for a very common case
SummaryBuilder add(String key, long value) {
return _add(key, Long.toString(value));
}
<T> SummaryBuilder add(String key, T value) {
String escapedString = StringUtils.escapeString(String.valueOf(value),
StringUtils.ESCAPE_CHAR, charsToEscape).replaceAll("\n", "\\\\n")
.replaceAll("\r", "\\\\r");
return _add(key, escapedString);
}
SummaryBuilder add(SummaryBuilder summary) {
if (buffer.length() > 0)
buffer.append(StringUtils.COMMA);
buffer.append(summary.buffer);
return this;
}
SummaryBuilder _add(String key, String value) {
if (buffer.length() > 0)
buffer.append(StringUtils.COMMA);
buffer.append(key).append(EQUALS).append(value);
return this;
}
@Override
public String toString() {
return buffer.toString();
}
}
}