source: proiecte/HadoopJUnit/hadoop-0.20.1/build/src/org/apache/hadoop/mapred/jobdetailshistory_jsp.java @ 120

Last change on this file since 120 was 120, checked in by (none), 14 years ago

Added the mail files for the Hadoop JUNit Project

  • Property svn:executable set to *
File size: 17.4 KB
Line 
1package org.apache.hadoop.mapred;
2
3import javax.servlet.*;
4import javax.servlet.http.*;
5import javax.servlet.jsp.*;
6import javax.servlet.http.*;
7import java.io.*;
8import java.util.*;
9import org.apache.hadoop.fs.*;
10import org.apache.hadoop.mapred.*;
11import org.apache.hadoop.util.*;
12import java.text.SimpleDateFormat;
13import org.apache.hadoop.mapred.JobHistory.*;
14
15public final class jobdetailshistory_jsp extends org.apache.jasper.runtime.HttpJspBase
16    implements org.apache.jasper.runtime.JspSourceDependent {
17
18 static SimpleDateFormat dateFormat = new SimpleDateFormat("d-MMM-yyyy HH:mm:ss") ; 
19  private static java.util.List _jspx_dependants;
20
21  public Object getDependants() {
22    return _jspx_dependants;
23  }
24
25  public void _jspService(HttpServletRequest request, HttpServletResponse response)
26        throws java.io.IOException, ServletException {
27
28    JspFactory _jspxFactory = null;
29    PageContext pageContext = null;
30    HttpSession session = null;
31    ServletContext application = null;
32    ServletConfig config = null;
33    JspWriter out = null;
34    Object page = this;
35    JspWriter _jspx_out = null;
36    PageContext _jspx_page_context = null;
37
38
39    try {
40      _jspxFactory = JspFactory.getDefaultFactory();
41      response.setContentType("text/html; charset=UTF-8");
42      pageContext = _jspxFactory.getPageContext(this, request, response,
43                        null, true, 8192, true);
44      _jspx_page_context = pageContext;
45      application = pageContext.getServletContext();
46      config = pageContext.getServletConfig();
47      session = pageContext.getSession();
48      out = pageContext.getOut();
49      _jspx_out = out;
50
51      out.write('\n');
52      org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "loadhistory.jsp" + (("loadhistory.jsp").indexOf('?')>0? '&': '?') + org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode("jobid", request.getCharacterEncoding())+ "=" + org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode(String.valueOf(request.getParameter("jobid") ), request.getCharacterEncoding()) + "&" + org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode("logFile", request.getCharacterEncoding())+ "=" + org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode(String.valueOf(request.getParameter("logFile") ), request.getCharacterEncoding()), out, false);
53      out.write('\n');
54      out.write('\n');
55
56    String jobid = request.getParameter("jobid");
57    String logFile = request.getParameter("logFile");
58        String encodedLogFileName = JobHistory.JobInfo.encodeJobHistoryFilePath(logFile);
59       
60    Path jobFile = new Path(logFile);
61    String[] jobDetails = jobFile.getName().split("_");
62    String jobUniqueString = jobDetails[0] + "_" +jobDetails[1] + "_" + jobid ;
63       
64    JobInfo job = (JobInfo)request.getSession().getAttribute("job");
65    FileSystem fs = (FileSystem)request.getSession().getAttribute("fs");
66
67      out.write("\n<html><body>\n<h2>Hadoop Job ");
68      out.print(jobid );
69      out.write(" on <a href=\"jobhistory.jsp\">History Viewer</a></h2>\n\n<b>User: </b> ");
70      out.print(job.get(Keys.USER) );
71      out.write("<br/> \n<b>JobName: </b> ");
72      out.print(job.get(Keys.JOBNAME) );
73      out.write("<br/> \n<b>JobConf: </b> <a href=\"jobconf_history.jsp?jobid=");
74      out.print(jobid);
75      out.write("&jobLogDir=");
76      out.print(new Path(logFile).getParent().toString());
77      out.write("&jobUniqueString=");
78      out.print(jobUniqueString);
79      out.write("\"> \n                 ");
80      out.print(job.get(Keys.JOBCONF) );
81      out.write("</a><br/> \n<b>Submitted At: </b> ");
82      out.print(StringUtils.getFormattedTimeWithDiff(dateFormat, job.getLong(Keys.SUBMIT_TIME), 0 )  );
83      out.write("<br/> \n<b>Launched At: </b> ");
84      out.print(StringUtils.getFormattedTimeWithDiff(dateFormat, job.getLong(Keys.LAUNCH_TIME), job.getLong(Keys.SUBMIT_TIME)) );
85      out.write("<br/>\n<b>Finished At: </b>  ");
86      out.print(StringUtils.getFormattedTimeWithDiff(dateFormat, job.getLong(Keys.FINISH_TIME), job.getLong(Keys.LAUNCH_TIME)) );
87      out.write("<br/>\n<b>Status: </b> ");
88      out.print( ((job.get(Keys.JOB_STATUS) == "")?"Incomplete" :job.get(Keys.JOB_STATUS)) );
89      out.write("<br/> \n");
90
91    Map<String, JobHistory.Task> tasks = job.getAllTasks();
92    int totalMaps = 0 ; 
93    int totalReduces = 0;
94    int totalCleanups = 0; 
95    int totalSetups = 0; 
96    int numFailedMaps = 0; 
97    int numKilledMaps = 0;
98    int numFailedReduces = 0 ; 
99    int numKilledReduces = 0;
100    int numFinishedCleanups = 0;
101    int numFailedCleanups = 0;
102    int numKilledCleanups = 0;
103    int numFinishedSetups = 0;
104    int numFailedSetups = 0;
105    int numKilledSetups = 0;
106       
107    long mapStarted = 0 ; 
108    long mapFinished = 0 ; 
109    long reduceStarted = 0 ; 
110    long reduceFinished = 0;
111    long cleanupStarted = 0;
112    long cleanupFinished = 0; 
113    long setupStarted = 0;
114    long setupFinished = 0; 
115       
116    Map <String,String> allHosts = new TreeMap<String,String>();
117    for (JobHistory.Task task : tasks.values()) {
118      Map<String, TaskAttempt> attempts = task.getTaskAttempts();
119      allHosts.put(task.get(Keys.HOSTNAME), "");
120      for (TaskAttempt attempt : attempts.values()) {
121        long startTime = attempt.getLong(Keys.START_TIME) ; 
122        long finishTime = attempt.getLong(Keys.FINISH_TIME) ; 
123        if (Values.MAP.name().equals(task.get(Keys.TASK_TYPE))){
124          if (mapStarted==0 || mapStarted > startTime ) {
125            mapStarted = startTime; 
126          }
127          if (mapFinished < finishTime ) {
128            mapFinished = finishTime ; 
129          }
130          totalMaps++; 
131          if (Values.FAILED.name().equals(attempt.get(Keys.TASK_STATUS))) {
132            numFailedMaps++; 
133          } else if (Values.KILLED.name().equals(attempt.get(Keys.TASK_STATUS))) {
134            numKilledMaps++;
135          }
136        } else if (Values.REDUCE.name().equals(task.get(Keys.TASK_TYPE))) {
137          if (reduceStarted==0||reduceStarted > startTime) {
138            reduceStarted = startTime ; 
139          }
140          if (reduceFinished < finishTime) {
141            reduceFinished = finishTime; 
142          }
143          totalReduces++; 
144          if (Values.FAILED.name().equals(attempt.get(Keys.TASK_STATUS))) {
145            numFailedReduces++;
146          } else if (Values.KILLED.name().equals(attempt.get(Keys.TASK_STATUS))) {
147            numKilledReduces++;
148          }
149        } else if (Values.CLEANUP.name().equals(task.get(Keys.TASK_TYPE))) {
150          if (cleanupStarted==0||cleanupStarted > startTime) {
151            cleanupStarted = startTime ; 
152          }
153          if (cleanupFinished < finishTime) {
154            cleanupFinished = finishTime; 
155          }
156          totalCleanups++; 
157          if (Values.SUCCESS.name().equals(attempt.get(Keys.TASK_STATUS))) {
158            numFinishedCleanups++;
159          } else if (Values.FAILED.name().equals(attempt.get(Keys.TASK_STATUS))) {
160            numFailedCleanups++;
161          } else if (Values.KILLED.name().equals(attempt.get(Keys.TASK_STATUS))) {
162            numKilledCleanups++;
163          } 
164        } else if (Values.SETUP.name().equals(task.get(Keys.TASK_TYPE))) {
165          if (setupStarted==0||setupStarted > startTime) {
166            setupStarted = startTime ; 
167          }
168          if (setupFinished < finishTime) {
169            setupFinished = finishTime; 
170          }
171          totalSetups++; 
172          if (Values.SUCCESS.name().equals(attempt.get(Keys.TASK_STATUS))) {
173            numFinishedSetups++;
174          } else if (Values.FAILED.name().equals(attempt.get(Keys.TASK_STATUS))) {
175            numFailedSetups++;
176          } else if (Values.KILLED.name().equals(attempt.get(Keys.TASK_STATUS))) {
177            numKilledSetups++;
178          }
179        }
180      }
181    }
182
183      out.write("\n<b><a href=\"analysejobhistory.jsp?jobid=");
184      out.print(jobid );
185      out.write("&logFile=");
186      out.print(encodedLogFileName);
187      out.write("\">Analyse This Job</a></b> \n<hr/>\n<center>\n<table border=\"2\" cellpadding=\"5\" cellspacing=\"2\">\n<tr>\n<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>\n</tr>\n<tr>\n<td>Setup</td>\n    <td><a href=\"jobtaskshistory.jsp?jobid=");
188      out.print(jobid );
189      out.write("&logFile=");
190      out.print(encodedLogFileName);
191      out.write("&taskType=");
192      out.print(Values.SETUP.name() );
193      out.write("&status=all\">\n        ");
194      out.print(totalSetups);
195      out.write("</a></td>\n    <td><a href=\"jobtaskshistory.jsp?jobid=");
196      out.print(jobid );
197      out.write("&logFile=");
198      out.print(encodedLogFileName);
199      out.write("&taskType=");
200      out.print(Values.SETUP.name() );
201      out.write("&status=");
202      out.print(Values.SUCCESS );
203      out.write("\">\n        ");
204      out.print(numFinishedSetups);
205      out.write("</a></td>\n    <td><a href=\"jobtaskshistory.jsp?jobid=");
206      out.print(jobid );
207      out.write("&logFile=");
208      out.print(encodedLogFileName);
209      out.write("&taskType=");
210      out.print(Values.SETUP.name() );
211      out.write("&status=");
212      out.print(Values.FAILED );
213      out.write("\">\n        ");
214      out.print(numFailedSetups);
215      out.write("</a></td>\n    <td><a href=\"jobtaskshistory.jsp?jobid=");
216      out.print(jobid );
217      out.write("&logFile=");
218      out.print(encodedLogFileName);
219      out.write("&taskType=");
220      out.print(Values.SETUP.name() );
221      out.write("&status=");
222      out.print(Values.KILLED );
223      out.write("\">\n        ");
224      out.print(numKilledSetups);
225      out.write("</a></td>  \n    <td>");
226      out.print(StringUtils.getFormattedTimeWithDiff(dateFormat, setupStarted, 0) );
227      out.write("</td>\n    <td>");
228      out.print(StringUtils.getFormattedTimeWithDiff(dateFormat, setupFinished, setupStarted) );
229      out.write("</td>\n</tr>\n<tr>\n<td>Map</td>\n    <td><a href=\"jobtaskshistory.jsp?jobid=");
230      out.print(jobid );
231      out.write("&logFile=");
232      out.print(encodedLogFileName);
233      out.write("&taskType=");
234      out.print(Values.MAP.name() );
235      out.write("&status=all\">\n        ");
236      out.print(totalMaps );
237      out.write("</a></td>\n    <td><a href=\"jobtaskshistory.jsp?jobid=");
238      out.print(jobid );
239      out.write("&logFile=");
240      out.print(encodedLogFileName);
241      out.write("&taskType=");
242      out.print(Values.MAP.name() );
243      out.write("&status=");
244      out.print(Values.SUCCESS );
245      out.write("\">\n        ");
246      out.print(job.getInt(Keys.FINISHED_MAPS) );
247      out.write("</a></td>\n    <td><a href=\"jobtaskshistory.jsp?jobid=");
248      out.print(jobid );
249      out.write("&logFile=");
250      out.print(encodedLogFileName);
251      out.write("&taskType=");
252      out.print(Values.MAP.name() );
253      out.write("&status=");
254      out.print(Values.FAILED );
255      out.write("\">\n        ");
256      out.print(numFailedMaps );
257      out.write("</a></td>\n    <td><a href=\"jobtaskshistory.jsp?jobid=");
258      out.print(jobid );
259      out.write("&logFile=");
260      out.print(encodedLogFileName);
261      out.write("&taskType=");
262      out.print(Values.MAP.name() );
263      out.write("&status=");
264      out.print(Values.KILLED );
265      out.write("\">\n        ");
266      out.print(numKilledMaps );
267      out.write("</a></td>\n    <td>");
268      out.print(StringUtils.getFormattedTimeWithDiff(dateFormat, mapStarted, 0) );
269      out.write("</td>\n    <td>");
270      out.print(StringUtils.getFormattedTimeWithDiff(dateFormat, mapFinished, mapStarted) );
271      out.write("</td>\n</tr>\n<tr>\n<td>Reduce</td>\n    <td><a href=\"jobtaskshistory.jsp?jobid=");
272      out.print(jobid );
273      out.write("&logFile=");
274      out.print(encodedLogFileName);
275      out.write("&taskType=");
276      out.print(Values.REDUCE.name() );
277      out.write("&status=all\">\n        ");
278      out.print(totalReduces);
279      out.write("</a></td>\n    <td><a href=\"jobtaskshistory.jsp?jobid=");
280      out.print(jobid );
281      out.write("&logFile=");
282      out.print(encodedLogFileName);
283      out.write("&taskType=");
284      out.print(Values.REDUCE.name() );
285      out.write("&status=");
286      out.print(Values.SUCCESS );
287      out.write("\">\n        ");
288      out.print(job.getInt(Keys.FINISHED_REDUCES));
289      out.write("</a></td>\n    <td><a href=\"jobtaskshistory.jsp?jobid=");
290      out.print(jobid );
291      out.write("&logFile=");
292      out.print(encodedLogFileName);
293      out.write("&taskType=");
294      out.print(Values.REDUCE.name() );
295      out.write("&status=");
296      out.print(Values.FAILED );
297      out.write("\">\n        ");
298      out.print(numFailedReduces);
299      out.write("</a></td>\n    <td><a href=\"jobtaskshistory.jsp?jobid=");
300      out.print(jobid );
301      out.write("&logFile=");
302      out.print(encodedLogFileName);
303      out.write("&taskType=");
304      out.print(Values.REDUCE.name() );
305      out.write("&status=");
306      out.print(Values.KILLED );
307      out.write("\">\n        ");
308      out.print(numKilledReduces);
309      out.write("</a></td>  \n    <td>");
310      out.print(StringUtils.getFormattedTimeWithDiff(dateFormat, reduceStarted, 0) );
311      out.write("</td>\n    <td>");
312      out.print(StringUtils.getFormattedTimeWithDiff(dateFormat, reduceFinished, reduceStarted) );
313      out.write("</td>\n</tr>\n<tr>\n<td>Cleanup</td>\n    <td><a href=\"jobtaskshistory.jsp?jobid=");
314      out.print(jobid );
315      out.write("&logFile=");
316      out.print(encodedLogFileName);
317      out.write("&taskType=");
318      out.print(Values.CLEANUP.name() );
319      out.write("&status=all\">\n        ");
320      out.print(totalCleanups);
321      out.write("</a></td>\n    <td><a href=\"jobtaskshistory.jsp?jobid=");
322      out.print(jobid );
323      out.write("&logFile=");
324      out.print(encodedLogFileName);
325      out.write("&taskType=");
326      out.print(Values.CLEANUP.name() );
327      out.write("&status=");
328      out.print(Values.SUCCESS );
329      out.write("\">\n        ");
330      out.print(numFinishedCleanups);
331      out.write("</a></td>\n    <td><a href=\"jobtaskshistory.jsp?jobid=");
332      out.print(jobid );
333      out.write("&logFile=");
334      out.print(encodedLogFileName);
335      out.write("&taskType=");
336      out.print(Values.CLEANUP.name() );
337      out.write("&status=");
338      out.print(Values.FAILED );
339      out.write("\">\n        ");
340      out.print(numFailedCleanups);
341      out.write("</a></td>\n    <td><a href=\"jobtaskshistory.jsp?jobid=");
342      out.print(jobid );
343      out.write("&logFile=");
344      out.print(encodedLogFileName);
345      out.write("&taskType=");
346      out.print(Values.CLEANUP.name() );
347      out.write("&status=");
348      out.print(Values.KILLED );
349      out.write("\">\n        ");
350      out.print(numKilledCleanups);
351      out.write("</a></td>  \n    <td>");
352      out.print(StringUtils.getFormattedTimeWithDiff(dateFormat, cleanupStarted, 0) );
353      out.write("</td>\n    <td>");
354      out.print(StringUtils.getFormattedTimeWithDiff(dateFormat, cleanupFinished, cleanupStarted) );
355      out.write("</td>\n</tr>\n</table>\n\n<br/>\n ");
356
357    DefaultJobHistoryParser.FailedOnNodesFilter filter = 
358                 new DefaultJobHistoryParser.FailedOnNodesFilter();
359    JobHistory.parseHistoryFromFS(logFile, filter, fs); 
360    Map<String, Set<String>> badNodes = filter.getValues(); 
361    if (badNodes.size() > 0) {
362 
363      out.write("\n<h3>Failed tasks attempts by nodes </h3>\n<table border=\"1\">\n<tr><td>Hostname</td><td>Failed Tasks</td></tr>\n ");
364         
365      for (Map.Entry<String, Set<String>> entry : badNodes.entrySet()) {
366        String node = entry.getKey();
367        Set<String> failedTasks = entry.getValue();
368
369      out.write("\n        <tr>\n        <td>");
370      out.print(node );
371      out.write("</td>\n        <td>\n");
372
373        for (String t : failedTasks) {
374
375      out.write("\n          <a href=\"taskdetailshistory.jsp?jobid=");
376      out.print(jobid);
377      out.write("&logFile=");
378      out.print(encodedLogFileName);
379      out.write("&taskid=");
380      out.print(t );
381      out.write('"');
382      out.write('>');
383      out.print(t );
384      out.write("</a>,&nbsp;\n");
385                 
386        }
387
388      out.write("\t\n        </td>\n        </tr>\n");
389         
390      }
391        }
392 
393      out.write("\n</table>\n<br/>\n ");
394
395    DefaultJobHistoryParser.KilledOnNodesFilter killedFilter =
396                 new DefaultJobHistoryParser.KilledOnNodesFilter();
397    JobHistory.parseHistoryFromFS(logFile, filter, fs); 
398    badNodes = killedFilter.getValues(); 
399    if (badNodes.size() > 0) {
400 
401      out.write("\n<h3>Killed tasks attempts by nodes </h3>\n<table border=\"1\">\n<tr><td>Hostname</td><td>Killed Tasks</td></tr>\n ");
402         
403      for (Map.Entry<String, Set<String>> entry : badNodes.entrySet()) {
404        String node = entry.getKey();
405        Set<String> killedTasks = entry.getValue();
406
407      out.write("\n        <tr>\n        <td>");
408      out.print(node );
409      out.write("</td>\n        <td>\n");
410
411        for (String t : killedTasks) {
412
413      out.write("\n          <a href=\"taskdetailshistory.jsp?jobid=");
414      out.print(jobid);
415      out.write("&logFile=");
416      out.print(encodedLogFileName);
417      out.write("&taskid=");
418      out.print(t );
419      out.write('"');
420      out.write('>');
421      out.print(t );
422      out.write("</a>,&nbsp;\n");
423                 
424        }
425
426      out.write("\t\n        </td>\n        </tr>\n");
427         
428      }
429    }
430
431      out.write("\n</table>\n</center>\n</body></html>\n");
432    } catch (Throwable t) {
433      if (!(t instanceof SkipPageException)){
434        out = _jspx_out;
435        if (out != null && out.getBufferSize() != 0)
436          out.clearBuffer();
437        if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
438      }
439    } finally {
440      if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);
441    }
442  }
443}
Note: See TracBrowser for help on using the repository browser.