%@ page
contentType="text/html; charset=UTF-8"
import="javax.servlet.http.*"
import="java.io.*"
import="java.util.*"
import="org.apache.hadoop.mapred.*"
import="org.apache.hadoop.util.*"
import="java.text.SimpleDateFormat"
import="org.apache.hadoop.mapred.JobHistory.*"
%>
"/>
"/>
<%! private static SimpleDateFormat dateFormat = new SimpleDateFormat("d/MM HH:mm:ss") ; %>
<%
String jobid = request.getParameter("jobid");
String jobTrackerId = request.getParameter("jobTrackerId");
String numTasks = request.getParameter("numTasks");
int showTasks = 10 ;
if( numTasks != null ) {
showTasks = Integer.parseInt(numTasks);
}
JobInfo job = (JobInfo)request.getSession().getAttribute("job");
%>
User : <%=job.get(Keys.USER) %>
JobName : <%=job.get(Keys.JOBNAME) %>
JobConf : <%=job.get(Keys.JOBCONF) %>
Submitted At : <%=StringUtils.getFormattedTimeWithDiff(dateFormat, job.getLong(Keys.SUBMIT_TIME), 0 ) %>
Launched At : <%=StringUtils.getFormattedTimeWithDiff(dateFormat, job.getLong(Keys.LAUNCH_TIME), job.getLong(Keys.SUBMIT_TIME)) %>
Finished At : <%=StringUtils.getFormattedTimeWithDiff(dateFormat, job.getLong(Keys.FINISH_TIME), job.getLong(Keys.LAUNCH_TIME)) %>
Status : <%= ((job.get(Keys.JOB_STATUS) == null)?"Incomplete" :job.get(Keys.JOB_STATUS)) %>
<%
if( ! Values.SUCCESS.name().equals(job.get(Keys.JOB_STATUS)) ){
out.print("No Analysis available as job did not finish
");
return ;
}
Map tasks = job.getAllTasks();
int finishedMaps = job.getInt(Keys.FINISHED_MAPS) ;
int finishedReduces = job.getInt(Keys.FINISHED_REDUCES) ;
JobHistory.Task [] mapTasks = new JobHistory.Task[finishedMaps];
JobHistory.Task [] reduceTasks = new JobHistory.Task[finishedReduces];
int mapIndex = 0 , reduceIndex=0;
long avgMapTime = 0;
long avgReduceTime = 0;
long avgShuffleTime = 0;
for( JobHistory.Task task : tasks.values() ) {
long avgFinishTime = (task.getLong(Keys.FINISH_TIME) -
task.getLong(Keys.START_TIME));
if( Values.MAP.name().equals(task.get(Keys.TASK_TYPE)) ){
mapTasks[mapIndex++] = task ;
avgMapTime += avgFinishTime;
}else{
Map attempts = task.getTaskAttempts();
for (JobHistory.TaskAttempt attempt : attempts.values()) {
if (attempt.get(Keys.TASK_STATUS).equals(Values.SUCCESS.name())) {
reduceTasks[reduceIndex++] = attempt;
avgShuffleTime += (attempt.getLong(Keys.SHUFFLE_FINISHED) -
attempt.getLong(Keys.START_TIME));
avgReduceTime += (attempt.getLong(Keys.FINISH_TIME) -
attempt.getLong(Keys.SHUFFLE_FINISHED));
break;
}
}
}
}
if (finishedMaps > 0) {
avgMapTime /= finishedMaps;
}
if (finishedReduces > 0) {
avgReduceTime /= finishedReduces;
avgShuffleTime /= finishedReduces;
}
Comparator cMap = new Comparator(){
public int compare(JobHistory.Task t1, JobHistory.Task t2){
Long l1 = new Long(t1.getLong(Keys.FINISH_TIME) - t1.getLong(Keys.START_TIME));
Long l2 = new Long(t2.getLong(Keys.FINISH_TIME) - t2.getLong(Keys.START_TIME)) ;
return l2.compareTo(l1);
}
};
Comparator cShuffle = new Comparator(){
public int compare(JobHistory.Task t1, JobHistory.Task t2){
Long l1 = new Long(t1.getLong(Keys.SHUFFLE_FINISHED) -
t1.getLong(Keys.START_TIME));
Long l2 = new Long(t2.getLong(Keys.SHUFFLE_FINISHED) -
t2.getLong(Keys.START_TIME)) ;
return l2.compareTo(l1);
}
};
Arrays.sort(mapTasks, cMap);
Arrays.sort(reduceTasks, cShuffle);
JobHistory.Task minMap = mapTasks[mapTasks.length-1] ;
JobHistory.Task minShuffle = reduceTasks[reduceTasks.length-1] ;
%>
Time taken by best performing Map task
<%=minMap.get(Keys.TASKID) %> : <%=StringUtils.formatTimeDiff(minMap.getLong(Keys.FINISH_TIME), minMap.getLong(Keys.START_TIME) ) %>
Average time taken by Map tasks:
<%=StringUtils.formatTimeDiff(avgMapTime, 0) %>
Worse performing map tasks
Task Id | Time taken |
<%
for( int i=0;i
<%=mapTasks[i].get(Keys.TASKID) %> |
<%=StringUtils.formatTimeDiff(mapTasks[i].getLong(Keys.FINISH_TIME), mapTasks[i].getLong(Keys.START_TIME)) %> |
<%
}
%>
<%
Comparator cFinishMapRed =
new Comparator() {
public int compare(JobHistory.Task t1, JobHistory.Task t2){
Long l1 = new Long(t1.getLong(Keys.FINISH_TIME));
Long l2 = new Long(t2.getLong(Keys.FINISH_TIME));
return l2.compareTo(l1);
}
};
Arrays.sort(mapTasks, cFinishMapRed);
JobHistory.Task lastMap = mapTasks[0] ;
%>
The last Map task
<%=lastMap.get(Keys.TASKID) %>
finished at (relative to the Job launch time):
<%=StringUtils.getFormattedTimeWithDiff(dateFormat,
lastMap.getLong(Keys.FINISH_TIME),
job.getLong(Keys.LAUNCH_TIME) ) %>
Time taken by best performing shuffle
<%=minShuffle.get(Keys.TASKID)%> :
<%=StringUtils.formatTimeDiff(minShuffle.getLong(Keys.SHUFFLE_FINISHED),
minShuffle.getLong(Keys.START_TIME) ) %>
Average time taken by Shuffle:
<%=StringUtils.formatTimeDiff(avgShuffleTime, 0) %>
Worse performing Shuffle(s)
Task Id | Time taken |
<%
for( int i=0;i
<%=reduceTasks[i].get(Keys.TASKID) %> |
<%=
StringUtils.formatTimeDiff(
reduceTasks[i].getLong(Keys.SHUFFLE_FINISHED),
reduceTasks[i].getLong(Keys.START_TIME)) %>
|
<%
}
%>
<%
Comparator cFinishShuffle =
new Comparator() {
public int compare(JobHistory.Task t1, JobHistory.Task t2){
Long l1 = new Long(t1.getLong(Keys.SHUFFLE_FINISHED));
Long l2 = new Long(t2.getLong(Keys.SHUFFLE_FINISHED));
return l2.compareTo(l1);
}
};
Arrays.sort(reduceTasks, cFinishShuffle);
JobHistory.Task lastShuffle = reduceTasks[0] ;
%>
The last Shuffle
<%=lastShuffle.get(Keys.TASKID)%>
finished at (relative to the Job launch time):
<%=StringUtils.getFormattedTimeWithDiff(dateFormat,
lastShuffle.getLong(Keys.SHUFFLE_FINISHED),
job.getLong(Keys.LAUNCH_TIME) ) %>
<%
Comparator cReduce = new Comparator(){
public int compare(JobHistory.Task t1, JobHistory.Task t2){
Long l1 = new Long(t1.getLong(Keys.FINISH_TIME) -
t1.getLong(Keys.SHUFFLE_FINISHED));
Long l2 = new Long(t2.getLong(Keys.FINISH_TIME) -
t2.getLong(Keys.SHUFFLE_FINISHED));
return l2.compareTo(l1);
}
};
Arrays.sort(reduceTasks, cReduce);
JobHistory.Task minReduce = reduceTasks[reduceTasks.length-1] ;
%>
Time taken by best performing Reduce task :
<%=minReduce.get(Keys.TASKID) %> :
<%=StringUtils.formatTimeDiff(minReduce.getLong(Keys.FINISH_TIME),
minReduce.getLong(Keys.SHUFFLE_FINISHED) ) %>
Average time taken by Reduce tasks:
<%=StringUtils.formatTimeDiff(avgReduceTime, 0) %>
Worse performing reduce tasks
Task Id | Time taken |
<%
for( int i=0;i
<%=reduceTasks[i].get(Keys.TASKID) %> |
<%=StringUtils.formatTimeDiff(
reduceTasks[i].getLong(Keys.FINISH_TIME),
reduceTasks[i].getLong(Keys.SHUFFLE_FINISHED)) %> |
<%
}
%>
<%
Arrays.sort(reduceTasks, cFinishMapRed);
JobHistory.Task lastReduce = reduceTasks[0] ;
%>
The last Reduce task
<%=lastReduce.get(Keys.TASKID)%>
finished at (relative to the Job launch time):
<%=StringUtils.getFormattedTimeWithDiff(dateFormat,
lastReduce.getLong(Keys.FINISH_TIME),
job.getLong(Keys.LAUNCH_TIME) ) %>