taskdetails.jsp 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. <%@ page
  2. contentType="text/html; charset=UTF-8"
  3. import="javax.servlet.*"
  4. import="javax.servlet.http.*"
  5. import="java.io.*"
  6. import="java.lang.String"
  7. import="java.util.*"
  8. import="org.apache.hadoop.mapred.*"
  9. import="org.apache.hadoop.util.*"
  10. import="java.text.SimpleDateFormat"
  11. import="org.apache.hadoop.util.*"
  12. import="org.apache.hadoop.dfs.JspHelper"
  13. %>
  14. <%!static SimpleDateFormat dateFormat = new SimpleDateFormat(
  15. "d-MMM-yyyy HH:mm:ss");
  16. private static final String PRIVATE_ACTIONS_KEY = "webinterface.private.actions";%>
  17. <%!private void printConfirm(JspWriter out, String jobid, String tipid,
  18. String taskid, String action) throws IOException {
  19. String url = "taskdetails.jsp?jobid=" + jobid + "&tipid=" + tipid
  20. + "&taskid=" + taskid;
  21. out.print("<html><head><META http-equiv=\"refresh\" content=\"15;URL="
  22. + url + "\"></head>" + "<body><h3> Are you sure you want to kill/fail "
  23. + taskid + " ?<h3><br><table border=\"0\"><tr><td width=\"100\">"
  24. + "<a href=\"" + url + "&action=" + action
  25. + "\">Kill / Fail</a></td><td width=\"100\"><a href=\"" + url
  26. + "\">Cancel</a></td></tr></table></body></html>");
  27. }%>
  28. <%
  29. JobTracker tracker = JobTracker.getTracker();
  30. String jobid = request.getParameter("jobid");
  31. String tipid = request.getParameter("tipid");
  32. String taskid = request.getParameter("taskid");
  33. boolean privateActions = JspHelper.conf.getBoolean(PRIVATE_ACTIONS_KEY,
  34. false);
  35. if (privateActions) {
  36. String action = request.getParameter("action");
  37. if (action != null) {
  38. if (action.equalsIgnoreCase("confirm")) {
  39. String subAction = request.getParameter("subaction");
  40. if (subAction == null)
  41. subAction = "fail-task";
  42. printConfirm(out, jobid, tipid, taskid, subAction);
  43. return;
  44. }
  45. else if (action.equalsIgnoreCase("kill-task")) {
  46. tracker.killTask(taskid, false);
  47. //redirect again so that refreshing the page will not attempt to rekill the task
  48. response.sendRedirect("/taskdetails.jsp?" + "&subaction=kill-task"
  49. + "&jobid=" + jobid + "&tipid=" + tipid);
  50. }
  51. else if (action.equalsIgnoreCase("fail-task")) {
  52. tracker.killTask(taskid, true);
  53. response.sendRedirect("/taskdetails.jsp?" + "&subaction=fail-task"
  54. + "&jobid=" + jobid + "&tipid=" + tipid);
  55. }
  56. }
  57. }
  58. JobInProgress job = (JobInProgress) tracker.getJob(jobid);
  59. TaskStatus[] ts = (job != null) ? tracker.getTaskStatuses(jobid, tipid)
  60. : null;
  61. %>
  62. <html>
  63. <title>Hadoop Task Details</title>
  64. <body>
  65. <h1>Job <a href="/jobdetails.jsp?jobid=<%=jobid%>"><%=jobid%></a></h1>
  66. <hr>
  67. <h2>All Task Attempts</h2>
  68. <center>
  69. <%
  70. if (ts == null || ts.length == 0) {
  71. %>
  72. <h3>No Task Attempts found</h3>
  73. <%
  74. } else {
  75. %>
  76. <table border=2 cellpadding="5" cellspacing="2">
  77. <tr><td align="center">Task Attempts</td><td>Machine</td><td>Status</td><td>Progress</td><td>Start Time</td>
  78. <%
  79. if (!ts[0].getIsMap()) {
  80. %>
  81. <td>Shuffle Finished</td><td>Sort Finished</td>
  82. <%
  83. }
  84. %>
  85. <td>Finish Time</td><td>Errors</td><td>Task Logs</td><td>Counters</td><td>Actions</td></tr>
  86. <%
  87. for (int i = 0; i < ts.length; i++) {
  88. TaskStatus status = ts[i];
  89. String taskTrackerName = status.getTaskTracker();
  90. TaskTrackerStatus taskTracker = tracker.getTaskTracker(taskTrackerName);
  91. out.print("<tr><td>" + status.getTaskId() + "</td>");
  92. String taskAttemptTracker = null;
  93. if (taskTracker == null) {
  94. out.print("<td>" + taskTrackerName + "</td>");
  95. } else {
  96. taskAttemptTracker = "http://" + taskTracker.getHost() + ":"
  97. + taskTracker.getHttpPort();
  98. out.print("<td><a href=\"" + taskAttemptTracker + "\">"
  99. + taskTracker.getHost() + "</a></td>");
  100. }
  101. out.print("<td>" + status.getRunState() + "</td>");
  102. out.print("<td>" + StringUtils.formatPercent(status.getProgress(), 2)
  103. + "</td>");
  104. out.print("<td>"
  105. + StringUtils.getFormattedTimeWithDiff(dateFormat, status
  106. .getStartTime(), 0) + "</td>");
  107. if (!ts[i].getIsMap()) {
  108. out.print("<td>"
  109. + StringUtils.getFormattedTimeWithDiff(dateFormat, status
  110. .getShuffleFinishTime(), status.getStartTime()) + "</td>");
  111. out.println("<td>"
  112. + StringUtils.getFormattedTimeWithDiff(dateFormat, status
  113. .getSortFinishTime(), status.getShuffleFinishTime())
  114. + "</td>");
  115. }
  116. out.println("<td>"
  117. + StringUtils.getFormattedTimeWithDiff(dateFormat, status
  118. .getFinishTime(), status.getStartTime()) + "</td>");
  119. out.print("<td><pre>");
  120. List<String> failures = tracker.getTaskDiagnostics(jobid, tipid,
  121. status.getTaskId());
  122. if (failures == null) {
  123. out.print("&nbsp;");
  124. } else {
  125. for (Iterator<String> itr = failures.iterator(); itr.hasNext();) {
  126. out.print(itr.next());
  127. if (itr.hasNext()) {
  128. out.print("\n-------\n");
  129. }
  130. }
  131. }
  132. out.print("</pre></td>");
  133. out.print("<td>");
  134. if (taskAttemptTracker == null) {
  135. out.print("n/a");
  136. } else {
  137. String taskLogUrl = taskAttemptTracker + "/tasklog?taskid="
  138. + status.getTaskId();
  139. String tailFourKBUrl = taskLogUrl + "&start=-4097";
  140. String tailEightKBUrl = taskLogUrl + "&start=-8193";
  141. String entireLogUrl = taskLogUrl + "&all=true";
  142. out.print("<a href=\"" + tailFourKBUrl + "\">Last 4KB</a><br/>");
  143. out.print("<a href=\"" + tailEightKBUrl + "\">Last 8KB</a><br/>");
  144. out.print("<a href=\"" + entireLogUrl + "\">All</a><br/>");
  145. }
  146. out.print("</td><td>" + "<a href=\"/taskstats.jsp?jobid=" + jobid
  147. + "&tipid=" + tipid + "&taskid=" + status.getTaskId() + "\">"
  148. + status.getCounters().size() + "</a></td>");
  149. out.print("<td>");
  150. if (privateActions
  151. && status.getRunState() == TaskStatus.State.RUNNING) {
  152. out.print("<a href=\"/taskdetails.jsp?action=confirm"
  153. + "&subaction=kill-task" + "&jobid=" + jobid + "&tipid="
  154. + tipid + "&taskid=" + status.getTaskId() + "\" > Kill </a>");
  155. out.print("<br><a href=\"/taskdetails.jsp?action=confirm"
  156. + "&subaction=fail-task" + "&jobid=" + jobid + "&tipid="
  157. + tipid + "&taskid=" + status.getTaskId() + "\" > Fail </a>");
  158. }
  159. else
  160. out.print("<pre>&nbsp;</pre>");
  161. out.println("</td></tr>");
  162. }
  163. }
  164. %>
  165. </table>
  166. </center>
  167. <hr>
  168. <a href="jobdetails.jsp?jobid=<%=jobid%>">Go back to the job</a><br>
  169. <a href="jobtracker.jsp">Go back to JobTracker</a><br>
  170. <a href="http://lucene.apache.org/hadoop">Hadoop</a>, 2006.<br>
  171. </body>
  172. </html>