package hip.ch8; import java.util.Comparator; public class TaskMetrics { String type; String taskId; String host; String status; long overallTimeMillis; long shuffleTimeMillis; long sortTimeMillis; long inputBytes; long outputBytes; long inputRecords; long outputRecords; public String getType() { return type; } public TaskMetrics setType(String type) { this.type = type; return this; } public String getTaskId() { return taskId; } public TaskMetrics setTaskId(String taskId) { this.taskId = taskId; return this; } public String getHost() { return host; } public TaskMetrics setHost(String host) { this.host = host; return this; } public String getStatus() { return status; } public TaskMetrics setStatus(String status) { this.status = status; return this; } public long getOverallTimeMillis() { return overallTimeMillis; } public TaskMetrics setOverallTimeMillis(long overallTimeMillis) { this.overallTimeMillis = overallTimeMillis; return this; } public long getShuffleTimeMillis() { return shuffleTimeMillis; } public TaskMetrics setShuffleTimeMillis(long shuffleTimeMillis) { this.shuffleTimeMillis = shuffleTimeMillis; return this; } public long getSortTimeMillis() { return sortTimeMillis; } public TaskMetrics setSortTimeMillis(long sortTimeMillis) { this.sortTimeMillis = sortTimeMillis; return this; } public long getInputBytes() { return inputBytes; } public TaskMetrics setInputBytes(long inputBytes) { this.inputBytes = inputBytes; return this; } public long getOutputBytes() { return outputBytes; } public TaskMetrics setOutputBytes(long outputBytes) { this.outputBytes = outputBytes; return this; } public long getInputRecords() { return inputRecords; } public TaskMetrics setInputRecords(long inputRecords) { this.inputRecords = inputRecords; return this; } public long getOutputRecords() { return outputRecords; } public TaskMetrics setOutputRecords(long outputRecords) { this.outputRecords = outputRecords; return this; } public long getOverallThroughputBytesPerSecond() { long overallSecs = overallTimeMillis / 1000; if(overallSecs == 0) { return 0; } return inputBytes / overallSecs; } public long getShuffleThroughputBytesPerSecond() { long overallSecs = shuffleTimeMillis / 1000; if(overallSecs == 0) { return 0; } return inputBytes / overallSecs; } public long getSortThroughputBytesPerSecond() { long overallSecs = sortTimeMillis / 1000; if(overallSecs == 0) { return 0; } return inputBytes / overallSecs; } public long getReduceThroughputBytesPerSecond() { long overallSecs = (overallTimeMillis - (shuffleTimeMillis + sortTimeMillis)) / 1000; if(overallSecs == 0) { return 0; } return inputBytes / overallSecs; } public static int longCompare(long lhs, long rhs) { return lhs < rhs ? -1 : ( lhs == rhs ? 0 : 1); } public static class ExecTimeComparator implements Comparator<TaskMetrics> { @Override public int compare(TaskMetrics o1, TaskMetrics o2) { return longCompare(o1.getOverallTimeMillis(), o2.getOverallTimeMillis()); } } public static class InputRecordsComparator implements Comparator<TaskMetrics> { @Override public int compare(TaskMetrics o1, TaskMetrics o2) { return longCompare(o1.getInputRecords(), o2.getInputRecords()); } } public static class InputBytesComparator implements Comparator<TaskMetrics> { @Override public int compare(TaskMetrics o1, TaskMetrics o2) { return longCompare(o1.getInputBytes(), o2.getInputBytes()); } } public static class OverallThroughputComparator implements Comparator<TaskMetrics> { @Override public int compare(TaskMetrics o1, TaskMetrics o2) { return longCompare(o1.getOverallThroughputBytesPerSecond(), o2.getOverallThroughputBytesPerSecond()); } } }