jobdetailshistory.jsp
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:11k
源码类别:

网格计算

开发平台:

Java

  1. <%@ page
  2.   contentType="text/html; charset=UTF-8"
  3.   import="javax.servlet.http.*"
  4.   import="java.io.*"
  5.   import="java.util.*"
  6.   import="org.apache.hadoop.fs.*"
  7.   import="org.apache.hadoop.mapred.*"
  8.   import="org.apache.hadoop.util.*"
  9.   import="java.text.SimpleDateFormat"
  10.   import="org.apache.hadoop.mapred.JobHistory.*"
  11. %>
  12. <jsp:include page="loadhistory.jsp">
  13.   <jsp:param name="jobid" value="<%=request.getParameter("jobid") %>"/>
  14.   <jsp:param name="logFile" value="<%=request.getParameter("logFile") %>"/>
  15. </jsp:include>
  16. <%! static SimpleDateFormat dateFormat = new SimpleDateFormat("d-MMM-yyyy HH:mm:ss") ; %>
  17. <%
  18.     String jobid = request.getParameter("jobid");
  19.     String logFile = request.getParameter("logFile");
  20. String encodedLogFileName = JobHistory.JobInfo.encodeJobHistoryFilePath(logFile);
  21.     Path jobFile = new Path(logFile);
  22.     String[] jobDetails = jobFile.getName().split("_");
  23.     String jobUniqueString = jobDetails[0] + "_" +jobDetails[1] + "_" + jobid ;
  24.     JobInfo job = (JobInfo)request.getSession().getAttribute("job");
  25.     FileSystem fs = (FileSystem)request.getSession().getAttribute("fs");
  26. %>
  27. <html><body>
  28. <h2>Hadoop Job <%=jobid %> on <a href="jobhistory.jsp">History Viewer</a></h2>
  29. <b>User: </b> <%=job.get(Keys.USER) %><br/> 
  30. <b>JobName: </b> <%=job.get(Keys.JOBNAME) %><br/> 
  31. <b>JobConf: </b> <a href="jobconf_history.jsp?jobid=<%=jobid%>&jobLogDir=<%=new Path(logFile).getParent().toString()%>&jobUniqueString=<%=jobUniqueString%>"> 
  32.                  <%=job.get(Keys.JOBCONF) %></a><br/> 
  33. <b>Submitted At: </b> <%=StringUtils.getFormattedTimeWithDiff(dateFormat, job.getLong(Keys.SUBMIT_TIME), 0 )  %><br/> 
  34. <b>Launched At: </b> <%=StringUtils.getFormattedTimeWithDiff(dateFormat, job.getLong(Keys.LAUNCH_TIME), job.getLong(Keys.SUBMIT_TIME)) %><br/>
  35. <b>Finished At: </b>  <%=StringUtils.getFormattedTimeWithDiff(dateFormat, job.getLong(Keys.FINISH_TIME), job.getLong(Keys.LAUNCH_TIME)) %><br/>
  36. <b>Status: </b> <%= ((job.get(Keys.JOB_STATUS) == "")?"Incomplete" :job.get(Keys.JOB_STATUS)) %><br/> 
  37. <%
  38.     Map<String, JobHistory.Task> tasks = job.getAllTasks();
  39.     int totalMaps = 0 ; 
  40.     int totalReduces = 0;
  41.     int totalCleanups = 0; 
  42.     int totalSetups = 0; 
  43.     int numFailedMaps = 0; 
  44.     int numKilledMaps = 0;
  45.     int numFailedReduces = 0 ; 
  46.     int numKilledReduces = 0;
  47.     int numFinishedCleanups = 0;
  48.     int numFailedCleanups = 0;
  49.     int numKilledCleanups = 0;
  50.     int numFinishedSetups = 0;
  51.     int numFailedSetups = 0;
  52.     int numKilledSetups = 0;
  53.     long mapStarted = 0 ; 
  54.     long mapFinished = 0 ; 
  55.     long reduceStarted = 0 ; 
  56.     long reduceFinished = 0;
  57.     long cleanupStarted = 0;
  58.     long cleanupFinished = 0; 
  59.     long setupStarted = 0;
  60.     long setupFinished = 0; 
  61.         
  62.     Map <String,String> allHosts = new TreeMap<String,String>();
  63.     for (JobHistory.Task task : tasks.values()) {
  64.       Map<String, TaskAttempt> attempts = task.getTaskAttempts();
  65.       allHosts.put(task.get(Keys.HOSTNAME), "");
  66.       for (TaskAttempt attempt : attempts.values()) {
  67.         long startTime = attempt.getLong(Keys.START_TIME) ; 
  68.         long finishTime = attempt.getLong(Keys.FINISH_TIME) ; 
  69.         if (Values.MAP.name().equals(task.get(Keys.TASK_TYPE))){
  70.           if (mapStarted==0 || mapStarted > startTime ) {
  71.             mapStarted = startTime; 
  72.           }
  73.           if (mapFinished < finishTime ) {
  74.             mapFinished = finishTime ; 
  75.           }
  76.           totalMaps++; 
  77.           if (Values.FAILED.name().equals(attempt.get(Keys.TASK_STATUS))) {
  78.             numFailedMaps++; 
  79.           } else if (Values.KILLED.name().equals(attempt.get(Keys.TASK_STATUS))) {
  80.             numKilledMaps++;
  81.           }
  82.         } else if (Values.REDUCE.name().equals(task.get(Keys.TASK_TYPE))) {
  83.           if (reduceStarted==0||reduceStarted > startTime) {
  84.             reduceStarted = startTime ; 
  85.           }
  86.           if (reduceFinished < finishTime) {
  87.             reduceFinished = finishTime; 
  88.           }
  89.           totalReduces++; 
  90.           if (Values.FAILED.name().equals(attempt.get(Keys.TASK_STATUS))) {
  91.             numFailedReduces++;
  92.           } else if (Values.KILLED.name().equals(attempt.get(Keys.TASK_STATUS))) {
  93.             numKilledReduces++;
  94.           }
  95.         } else if (Values.CLEANUP.name().equals(task.get(Keys.TASK_TYPE))) {
  96.           if (cleanupStarted==0||cleanupStarted > startTime) {
  97.             cleanupStarted = startTime ; 
  98.           }
  99.           if (cleanupFinished < finishTime) {
  100.             cleanupFinished = finishTime; 
  101.           }
  102.           totalCleanups++; 
  103.           if (Values.SUCCESS.name().equals(attempt.get(Keys.TASK_STATUS))) {
  104.             numFinishedCleanups++;
  105.           } else if (Values.FAILED.name().equals(attempt.get(Keys.TASK_STATUS))) {
  106.             numFailedCleanups++;
  107.           } else if (Values.KILLED.name().equals(attempt.get(Keys.TASK_STATUS))) {
  108.             numKilledCleanups++;
  109.           } 
  110.         } else if (Values.SETUP.name().equals(task.get(Keys.TASK_TYPE))) {
  111.           if (setupStarted==0||setupStarted > startTime) {
  112.             setupStarted = startTime ; 
  113.           }
  114.           if (setupFinished < finishTime) {
  115.             setupFinished = finishTime; 
  116.           }
  117.           totalSetups++; 
  118.           if (Values.SUCCESS.name().equals(attempt.get(Keys.TASK_STATUS))) {
  119.             numFinishedSetups++;
  120.           } else if (Values.FAILED.name().equals(attempt.get(Keys.TASK_STATUS))) {
  121.             numFailedSetups++;
  122.           } else if (Values.KILLED.name().equals(attempt.get(Keys.TASK_STATUS))) {
  123.             numKilledSetups++;
  124.           }
  125.         }
  126.       }
  127.     }
  128. %>
  129. <b><a href="analysejobhistory.jsp?jobid=<%=jobid %>&logFile=<%=encodedLogFileName%>">Analyse This Job</a></b> 
  130. <hr/>
  131. <center>
  132. <table border="2" cellpadding="5" cellspacing="2">
  133. <tr>
  134. <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>
  135. </tr>
  136. <tr>
  137. <td>Setup</td>
  138.     <td><a href="jobtaskshistory.jsp?jobid=<%=jobid %>&logFile=<%=encodedLogFileName%>&taskType=<%=Values.SETUP.name() %>&status=all">
  139.         <%=totalSetups%></a></td>
  140.     <td><a href="jobtaskshistory.jsp?jobid=<%=jobid %>&logFile=<%=encodedLogFileName%>&taskType=<%=Values.SETUP.name() %>&status=<%=Values.SUCCESS %>">
  141.         <%=numFinishedSetups%></a></td>
  142.     <td><a href="jobtaskshistory.jsp?jobid=<%=jobid %>&logFile=<%=encodedLogFileName%>&taskType=<%=Values.SETUP.name() %>&status=<%=Values.FAILED %>">
  143.         <%=numFailedSetups%></a></td>
  144.     <td><a href="jobtaskshistory.jsp?jobid=<%=jobid %>&logFile=<%=encodedLogFileName%>&taskType=<%=Values.SETUP.name() %>&status=<%=Values.KILLED %>">
  145.         <%=numKilledSetups%></a></td>  
  146.     <td><%=StringUtils.getFormattedTimeWithDiff(dateFormat, setupStarted, 0) %></td>
  147.     <td><%=StringUtils.getFormattedTimeWithDiff(dateFormat, setupFinished, setupStarted) %></td>
  148. </tr>
  149. <tr>
  150. <td>Map</td>
  151.     <td><a href="jobtaskshistory.jsp?jobid=<%=jobid %>&logFile=<%=encodedLogFileName%>&taskType=<%=Values.MAP.name() %>&status=all">
  152.         <%=totalMaps %></a></td>
  153.     <td><a href="jobtaskshistory.jsp?jobid=<%=jobid %>&logFile=<%=encodedLogFileName%>&taskType=<%=Values.MAP.name() %>&status=<%=Values.SUCCESS %>">
  154.         <%=job.getInt(Keys.FINISHED_MAPS) %></a></td>
  155.     <td><a href="jobtaskshistory.jsp?jobid=<%=jobid %>&logFile=<%=encodedLogFileName%>&taskType=<%=Values.MAP.name() %>&status=<%=Values.FAILED %>">
  156.         <%=numFailedMaps %></a></td>
  157.     <td><a href="jobtaskshistory.jsp?jobid=<%=jobid %>&logFile=<%=encodedLogFileName%>&taskType=<%=Values.MAP.name() %>&status=<%=Values.KILLED %>">
  158.         <%=numKilledMaps %></a></td>
  159.     <td><%=StringUtils.getFormattedTimeWithDiff(dateFormat, mapStarted, 0) %></td>
  160.     <td><%=StringUtils.getFormattedTimeWithDiff(dateFormat, mapFinished, mapStarted) %></td>
  161. </tr>
  162. <tr>
  163. <td>Reduce</td>
  164.     <td><a href="jobtaskshistory.jsp?jobid=<%=jobid %>&logFile=<%=encodedLogFileName%>&taskType=<%=Values.REDUCE.name() %>&status=all">
  165.         <%=totalReduces%></a></td>
  166.     <td><a href="jobtaskshistory.jsp?jobid=<%=jobid %>&logFile=<%=encodedLogFileName%>&taskType=<%=Values.REDUCE.name() %>&status=<%=Values.SUCCESS %>">
  167.         <%=job.getInt(Keys.FINISHED_REDUCES)%></a></td>
  168.     <td><a href="jobtaskshistory.jsp?jobid=<%=jobid %>&logFile=<%=encodedLogFileName%>&taskType=<%=Values.REDUCE.name() %>&status=<%=Values.FAILED %>">
  169.         <%=numFailedReduces%></a></td>
  170.     <td><a href="jobtaskshistory.jsp?jobid=<%=jobid %>&logFile=<%=encodedLogFileName%>&taskType=<%=Values.REDUCE.name() %>&status=<%=Values.KILLED %>">
  171.         <%=numKilledReduces%></a></td>  
  172.     <td><%=StringUtils.getFormattedTimeWithDiff(dateFormat, reduceStarted, 0) %></td>
  173.     <td><%=StringUtils.getFormattedTimeWithDiff(dateFormat, reduceFinished, reduceStarted) %></td>
  174. </tr>
  175. <tr>
  176. <td>Cleanup</td>
  177.     <td><a href="jobtaskshistory.jsp?jobid=<%=jobid %>&logFile=<%=encodedLogFileName%>&taskType=<%=Values.CLEANUP.name() %>&status=all">
  178.         <%=totalCleanups%></a></td>
  179.     <td><a href="jobtaskshistory.jsp?jobid=<%=jobid %>&logFile=<%=encodedLogFileName%>&taskType=<%=Values.CLEANUP.name() %>&status=<%=Values.SUCCESS %>">
  180.         <%=numFinishedCleanups%></a></td>
  181.     <td><a href="jobtaskshistory.jsp?jobid=<%=jobid %>&logFile=<%=encodedLogFileName%>&taskType=<%=Values.CLEANUP.name() %>&status=<%=Values.FAILED %>">
  182.         <%=numFailedCleanups%></a></td>
  183.     <td><a href="jobtaskshistory.jsp?jobid=<%=jobid %>&logFile=<%=encodedLogFileName%>&taskType=<%=Values.CLEANUP.name() %>&status=<%=Values.KILLED %>">
  184.         <%=numKilledCleanups%></a></td>  
  185.     <td><%=StringUtils.getFormattedTimeWithDiff(dateFormat, cleanupStarted, 0) %></td>
  186.     <td><%=StringUtils.getFormattedTimeWithDiff(dateFormat, cleanupFinished, cleanupStarted) %></td>
  187. </tr>
  188. </table>
  189. <br/>
  190.  <%
  191.     DefaultJobHistoryParser.FailedOnNodesFilter filter = 
  192.                  new DefaultJobHistoryParser.FailedOnNodesFilter();
  193.     JobHistory.parseHistoryFromFS(logFile, filter, fs); 
  194.     Map<String, Set<String>> badNodes = filter.getValues(); 
  195.     if (badNodes.size() > 0) {
  196.  %>
  197. <h3>Failed tasks attempts by nodes </h3>
  198. <table border="1">
  199. <tr><td>Hostname</td><td>Failed Tasks</td></tr>
  200.  <%   
  201.       for (Map.Entry<String, Set<String>> entry : badNodes.entrySet()) {
  202.         String node = entry.getKey();
  203.         Set<String> failedTasks = entry.getValue();
  204. %>
  205.         <tr>
  206.         <td><%=node %></td>
  207.         <td>
  208. <%
  209.         for (String t : failedTasks) {
  210. %>
  211.           <a href="taskdetailshistory.jsp?jobid=<%=jobid%>&logFile=<%=encodedLogFileName%>&taskid=<%=t %>"><%=t %></a>,&nbsp;
  212. <%   
  213.         }
  214. %>
  215.         </td>
  216.         </tr>
  217. <%   
  218.       }
  219. }
  220.  %>
  221. </table>
  222. <br/>
  223.  <%
  224.     DefaultJobHistoryParser.KilledOnNodesFilter killedFilter =
  225.                  new DefaultJobHistoryParser.KilledOnNodesFilter();
  226.     JobHistory.parseHistoryFromFS(logFile, filter, fs); 
  227.     badNodes = killedFilter.getValues(); 
  228.     if (badNodes.size() > 0) {
  229.  %>
  230. <h3>Killed tasks attempts by nodes </h3>
  231. <table border="1">
  232. <tr><td>Hostname</td><td>Killed Tasks</td></tr>
  233.  <%   
  234.       for (Map.Entry<String, Set<String>> entry : badNodes.entrySet()) {
  235.         String node = entry.getKey();
  236.         Set<String> killedTasks = entry.getValue();
  237. %>
  238.         <tr>
  239.         <td><%=node %></td>
  240.         <td>
  241. <%
  242.         for (String t : killedTasks) {
  243. %>
  244.           <a href="taskdetailshistory.jsp?jobid=<%=jobid%>&logFile=<%=encodedLogFileName%>&taskid=<%=t %>"><%=t %></a>,&nbsp;
  245. <%   
  246.         }
  247. %>
  248.         </td>
  249.         </tr>
  250. <%   
  251.       }
  252.     }
  253. %>
  254. </table>
  255. </center>
  256. </body></html>