blob: 817eafab04b1bad3f34be8fc397ff5980c364b88 [file] [log] [blame]
<%@ 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.*"
%>
<jsp:include page="loadhistory.jsp">
<jsp:param name="jobid" value="<%=request.getParameter("jobid") %>"/>
<jsp:param name="jobTrackerId" value="<%=request.getParameter("jobTrackerId") %>"/>
</jsp:include>
<%! private static SimpleDateFormat dateFormat = new SimpleDateFormat("d/MM HH:mm:ss") ; %>
<html><body>
<%
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");
%>
<h2>Hadoop Job <a href="jobdetailshistory.jsp?jobid=<%=jobid%>&&jobTrackerId=<%=jobTrackerId %>"><%=jobid %> </a></h2>
<b>User : </b> <%=job.get(Keys.USER) %><br/>
<b>JobName : </b> <%=job.get(Keys.JOBNAME) %><br/>
<b>JobConf : </b> <%=job.get(Keys.JOBCONF) %><br/>
<b>Submitted At : </b> <%=StringUtils.getFormattedTimeWithDiff(dateFormat, job.getLong(Keys.SUBMIT_TIME), 0 ) %><br/>
<b>Launched At : </b> <%=StringUtils.getFormattedTimeWithDiff(dateFormat, job.getLong(Keys.LAUNCH_TIME), job.getLong(Keys.SUBMIT_TIME)) %><br/>
<b>Finished At : </b> <%=StringUtils.getFormattedTimeWithDiff(dateFormat, job.getLong(Keys.FINISH_TIME), job.getLong(Keys.LAUNCH_TIME)) %><br/>
<b>Status : </b> <%= ((job.get(Keys.JOB_STATUS) == null)?"Incomplete" :job.get(Keys.JOB_STATUS)) %><br/>
<hr/>
<center>
<%
if( ! Values.SUCCESS.name().equals(job.get(Keys.JOB_STATUS)) ){
out.print("<h3>No Analysis available as job did not finish</h3>");
return ;
}
Map<String, JobHistory.Task> 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;
for( JobHistory.Task task : tasks.values() ) {
if( Values.MAP.name().equals(task.get(Keys.TASK_TYPE)) ){
mapTasks[mapIndex++] = task ;
}else{
reduceTasks[reduceIndex++] = task;
}
}
Comparator<JobHistory.Task> c = new Comparator<JobHistory.Task>(){
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);
}
};
Arrays.sort(mapTasks, c);
Arrays.sort(reduceTasks, c);
JobHistory.Task minMap = mapTasks[mapTasks.length-1] ;
JobHistory.Task minReduce = reduceTasks[reduceTasks.length-1] ;
%>
<h3>Time taken by best performing Map task
<a href="taskdetailshistory.jsp?jobid=<%=jobid%>&jobTrackerId=<%=jobTrackerId%>&taskid=<%=minMap.get(Keys.TASKID)%>">
<%=minMap.get(Keys.TASKID) %></a> : <%=StringUtils.formatTimeDiff(minMap.getLong(Keys.FINISH_TIME), minMap.getLong(Keys.START_TIME) ) %></h3>
<h3>Worse performing map tasks</h3>
<table border="2" cellpadding="5" cellspacing="2">
<tr><td>Task Id</td><td>Time taken</td></tr>
<%
for( int i=0;i<showTasks && i<mapTasks.length; i++){
%>
<tr>
<td><a href="taskdetailshistory.jsp?jobid=<%=jobid%>&jobTrackerId=<%=jobTrackerId%>&taskid=<%=mapTasks[i].get(Keys.TASKID)%>">
<%=mapTasks[i].get(Keys.TASKID) %></a></td>
<td><%=StringUtils.formatTimeDiff(mapTasks[i].getLong(Keys.FINISH_TIME), mapTasks[i].getLong(Keys.START_TIME)) %></td>
</tr>
<%
}
%>
</table>
<h3>Time taken by best performing Reduce task :
<a href="taskdetailshistory.jsp?jobid=<%=jobid%>&jobTrackerId=<%=jobTrackerId%>&taskid=<%=minReduce.get(Keys.TASKID)%>">
<%=minReduce.get(Keys.TASKID) %></a> : <%=StringUtils.formatTimeDiff(minReduce.getLong(Keys.FINISH_TIME), minReduce.getLong(Keys.START_TIME) ) %></h3>
<h3>Worse performing reduce tasks</h3>
<table border="2" cellpadding="5" cellspacing="2">
<tr><td>Task Id</td><td>Time taken</td></tr>
<%
for( int i=0;i<showTasks && i<reduceTasks.length; i++){
%>
<tr>
<td><a href="taskdetailshistory.jsp?jobid=<%=jobid%>&jobTrackerId=<%=jobTrackerId%>&taskid=<%=reduceTasks[i].get(Keys.TASKID)%>">
<%=reduceTasks[i].get(Keys.TASKID) %></a></td>
<td><%=StringUtils.formatTimeDiff(reduceTasks[i].getLong(Keys.FINISH_TIME), reduceTasks[i].getLong(Keys.START_TIME)) %></td>
</tr>
<%
}
%>
</table>
</center>
</body></html>