|
@@ -29,26 +29,29 @@
|
|
|
<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/>
|
|
|
-<b><a href="analysejobhistory.jsp?jobid=<%=jobid %>&jobTrackerId=<%=jobTrackerId %>">Analyse This Job</a></b>
|
|
|
-<hr/>
|
|
|
-<center>
|
|
|
<%
|
|
|
Map<String, JobHistory.Task> tasks = job.getAllTasks();
|
|
|
int totalMaps = 0 ;
|
|
|
int totalReduces = 0;
|
|
|
int failedMaps = 0;
|
|
|
+ int killedMaps = 0;
|
|
|
int failedReduces = 0 ;
|
|
|
+ int killedReduces = 0;
|
|
|
|
|
|
long mapStarted = 0 ;
|
|
|
long mapFinished = 0 ;
|
|
|
long reduceStarted = 0 ;
|
|
|
long reduceFinished = 0;
|
|
|
+
|
|
|
+ Map <String,String> allHosts = new TreeMap<String,String>();
|
|
|
|
|
|
for( JobHistory.Task task : tasks.values() ) {
|
|
|
|
|
|
long startTime = task.getLong(Keys.START_TIME) ;
|
|
|
long finishTime = task.getLong(Keys.FINISH_TIME) ;
|
|
|
|
|
|
+ allHosts.put(task.get(Keys.HOSTNAME), null);
|
|
|
+
|
|
|
if( Values.MAP.name().equals(task.get(Keys.TASK_TYPE)) ){
|
|
|
if( mapStarted==0 || mapStarted > startTime ){
|
|
|
mapStarted = startTime;
|
|
@@ -63,6 +66,9 @@
|
|
|
if( Values.FAILED.name().equals(attempt.get(Keys.TASK_STATUS)) ) {
|
|
|
failedMaps++;
|
|
|
}
|
|
|
+ if( Values.KILLED.name().equals(attempt.get(Keys.TASK_STATUS)) ) {
|
|
|
+ killedMaps++;
|
|
|
+ }
|
|
|
}
|
|
|
}else{
|
|
|
if( reduceStarted==0||reduceStarted > startTime ){
|
|
@@ -77,13 +83,20 @@
|
|
|
if( Values.FAILED.name().equals(attempt.get(Keys.TASK_STATUS)) ) {
|
|
|
failedReduces++;
|
|
|
}
|
|
|
+ if( Values.KILLED.name().equals(attempt.get(Keys.TASK_STATUS)) ) {
|
|
|
+ killedReduces++;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
%>
|
|
|
+<b>Number of nodes used: </b> <%=allHosts.size() %><br/>
|
|
|
+<b><a href="analysejobhistory.jsp?jobid=<%=jobid %>&jobTrackerId=<%=jobTrackerId %>">Analyse This Job</a></b>
|
|
|
+<hr/>
|
|
|
+<center>
|
|
|
<table border="2" cellpadding="5" cellspacing="2">
|
|
|
<tr>
|
|
|
-<td>Kind</td><td>Total Tasks</td><td>Finished tasks</td><td>Failed tasks</td><td>Start Time</td><td>Finish Time</td>
|
|
|
+<td>Kind</td><td>Total Tasks(successful+failed+killed)</td><td>Successful tasks</td><td>Failed tasks</td><td>Killed tasks</td><td>Start Time</td><td>Finish Time</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td>Map</td>
|
|
@@ -93,6 +106,8 @@
|
|
|
<%=job.getInt(Keys.FINISHED_MAPS) %></a></td>
|
|
|
<td><a href="jobtaskshistory.jsp?jobid=<%=jobid %>&jobTrackerId=<%=jobTrackerId %>&taskType=<%=Values.MAP.name() %>&status=<%=Values.FAILED %>">
|
|
|
<%=failedMaps %></a></td>
|
|
|
+ <td><a href="jobtaskshistory.jsp?jobid=<%=jobid %>&jobTrackerId=<%=jobTrackerId %>&taskType=<%=Values.MAP.name() %>&status=<%=Values.KILLED %>">
|
|
|
+ <%=killedMaps %></a></td>
|
|
|
<td><%=StringUtils.getFormattedTimeWithDiff(dateFormat, mapStarted, 0) %></td>
|
|
|
<td><%=StringUtils.getFormattedTimeWithDiff(dateFormat, mapFinished, mapStarted) %></td>
|
|
|
</tr>
|
|
@@ -104,6 +119,8 @@
|
|
|
<%=job.getInt(Keys.FINISHED_REDUCES)%></a></td>
|
|
|
<td><a href="jobtaskshistory.jsp?jobid=<%=jobid %>&jobTrackerId=<%=jobTrackerId %>&taskType=<%=Values.REDUCE.name() %>&status=<%=Values.FAILED %>">
|
|
|
<%=failedReduces%></a></td>
|
|
|
+ <td><a href="jobtaskshistory.jsp?jobid=<%=jobid %>&jobTrackerId=<%=jobTrackerId %>&taskType=<%=Values.REDUCE.name() %>&status=<%=Values.KILLED %>">
|
|
|
+ <%=killedReduces%></a></td>
|
|
|
<td><%=StringUtils.getFormattedTimeWithDiff(dateFormat, reduceStarted, 0) %></td>
|
|
|
<td><%=StringUtils.getFormattedTimeWithDiff(dateFormat, reduceFinished, reduceStarted) %></td>
|
|
|
</tr>
|
|
@@ -111,7 +128,7 @@
|
|
|
|
|
|
<br/>
|
|
|
<%
|
|
|
- DefaultJobHistoryParser.BadNodesFilter filter = new DefaultJobHistoryParser.BadNodesFilter();
|
|
|
+ DefaultJobHistoryParser.FailedOnNodesFilter filter = new DefaultJobHistoryParser.FailedOnNodesFilter();
|
|
|
String dir = System.getProperty("hadoop.log.dir") + File.separator + "history" ;
|
|
|
|
|
|
JobHistory.parseHistory(new File(dir, jobTrackerId+"_" + jobid), filter);
|
|
@@ -142,7 +159,41 @@
|
|
|
}
|
|
|
}
|
|
|
%>
|
|
|
+</table>
|
|
|
+<br/>
|
|
|
+ <%
|
|
|
+ DefaultJobHistoryParser.KilledOnNodesFilter killedFilter = new DefaultJobHistoryParser.KilledOnNodesFilter();
|
|
|
+ dir = System.getProperty("hadoop.log.dir") + File.separator + "history" ;
|
|
|
+
|
|
|
+ JobHistory.parseHistory(new File(dir, jobTrackerId+"_" + jobid), filter);
|
|
|
+ badNodes = killedFilter.getValues();
|
|
|
+ if( badNodes.size() > 0 ) {
|
|
|
+ %>
|
|
|
+<h3>Killed tasks attempts by nodes </h3>
|
|
|
+<table border="1">
|
|
|
+<tr><td>Hostname</td><td>Killed Tasks</td></tr>
|
|
|
+ <%
|
|
|
+ for (Map.Entry<String, Set<String>> entry : badNodes.entrySet()) {
|
|
|
+ String node = entry.getKey();
|
|
|
+ Set<String> killedTasks = entry.getValue();
|
|
|
+%>
|
|
|
+ <tr>
|
|
|
+ <td><%=node %></td>
|
|
|
+ <td>
|
|
|
+<%
|
|
|
+ for( String t : killedTasks ) {
|
|
|
+%>
|
|
|
+ <a href="taskdetailshistory.jsp?jobid=<%=jobid%>&jobTrackerId=<%=jobTrackerId %>&taskid=<%=t %>"><%=t %></a>,
|
|
|
+<%
|
|
|
+ }
|
|
|
+%>
|
|
|
+ </td>
|
|
|
+ </tr>
|
|
|
+<%
|
|
|
+ }
|
|
|
+ }
|
|
|
+ %>
|
|
|
</table>
|
|
|
</center>
|
|
|
|
|
|
-</body></html>
|
|
|
+</body></html>
|