Author: cutting Date: Mon May 1 10:50:28 2006 New Revision: 398650 URL: http://svn.apache.org/viewcvs?rev=398650&view=rev Log: HADOOP-177. Page through tasks in web ui.
Modified: lucene/hadoop/trunk/CHANGES.txt lucene/hadoop/trunk/src/webapps/mapred/jobdetails.jsp lucene/hadoop/trunk/src/webapps/mapred/jobtracker.jsp Modified: lucene/hadoop/trunk/CHANGES.txt URL: http://svn.apache.org/viewcvs/lucene/hadoop/trunk/CHANGES.txt?rev=398650&r1=398649&r2=398650&view=diff ============================================================================== --- lucene/hadoop/trunk/CHANGES.txt (original) +++ lucene/hadoop/trunk/CHANGES.txt Mon May 1 10:50:28 2006 @@ -128,6 +128,10 @@ to contact the job tracker for five attempts, not just one as before. (omalley via cutting) +35. HADOOP-177. Change MapReduce web interface to page through tasks. + Previously, when jobs had more than a few thousand tasks they + could crash web browsers. (Mahadev Konar via cutting) + Release 0.1.1 - 2006-04-08 Modified: lucene/hadoop/trunk/src/webapps/mapred/jobdetails.jsp URL: http://svn.apache.org/viewcvs/lucene/hadoop/trunk/src/webapps/mapred/jobdetails.jsp?rev=398650&r1=398649&r2=398650&view=diff ============================================================================== --- lucene/hadoop/trunk/src/webapps/mapred/jobdetails.jsp (original) +++ lucene/hadoop/trunk/src/webapps/mapred/jobdetails.jsp Mon May 1 10:50:28 2006 @@ -5,16 +5,30 @@ import="java.io.*" import="java.util.*" import="org.apache.hadoop.mapred.*" + import="java.lang.Integer" %> + <% String jobid = request.getParameter("jobid"); + String type = request.getParameter("type"); + String pagenum = request.getParameter("pagenum"); + int pnum = Integer.parseInt(pagenum); + int next_page = pnum+1; + int numperpage = 2000; JobTracker tracker = JobTracker.getTracker(); JobInProgress job = (JobInProgress) tracker.getJob(jobid); JobProfile profile = (job != null) ? (job.getProfile()) : null; JobStatus status = (job != null) ? (job.getStatus()) : null; - - TaskReport[] mapTaskReports = (job != null) ? tracker.getMapTaskReports(jobid) : null; - TaskReport[] reduceTaskReports = (job != null) ? tracker.getReduceTaskReports(jobid) : null; + TaskReport[] reports = null; + int start_index = (pnum - 1) * numperpage; + int end_index = start_index + numperpage; + int report_len = 0; + if ("map".equals(type)){ + reports = (job != null) ? tracker.getMapTaskReports(jobid) : null; + } + else{ + reports = (job != null) ? tracker.getReduceTaskReports(jobid) : null; + } %> <html> @@ -26,70 +40,63 @@ No job found<br> <% } else { - %> + %> <h1>Job '<%=jobid%>'</h1> <b>Job File:</b> <%=profile.getJobFile()%><br> <b>The job started at:</b> <%= new Date(job.getStartTime())%><br> -<% +<% if (status.getRunState() == JobStatus.RUNNING) { out.print("The job is still running.<br>\n"); } else if (status.getRunState() == JobStatus.SUCCEEDED) { - out.print("<b>The job completed at:</b> " + new Date(job.getFinishTime()) + "<br>\n"); - } else if (status.getRunState() == JobStatus.FAILED) { - out.print("<b>The job failed at:</b> " + new Date(job.getFinishTime()) + "<br>\n"); - } -%> -<hr> - -<h2>Map Tasks</h2> - <center> - <table border=2 cellpadding="5" cellspacing="2"> - <tr><td align="center">Task</td><td>Complete</td><td>Status</td><td>Errors</td></tr> + out.print("<b>The job completed at:</b> " + new Date(job.getFinishTime()) + - <% - - for (int i = 0; i < mapTaskReports.length; i++) { - TaskReport report = mapTaskReports[i]; +"<br>\n"); + } else if (status.getRunState() == JobStatus.FAILED) { + out.print("<b>The job failed at:</b> " + new Date(job.getFinishTime()) + - out.print("<tr><td><a href=\"taskdetails.jsp?jobid=" + jobid + "&taskid=" + report.getTaskId() + "\">" + report.getTaskId() + "</a></td>"); - out.print("<td>" + report.getProgress() + "</td>"); - out.print("<td>" + report.getState() + "</td>"); - String[] diagnostics = report.getDiagnostics(); - for (int j = 0; j < diagnostics.length ; j++) { - out.print("<td><pre>" + diagnostics[j] + "</pre></td>"); - } - out.print("</tr>\n"); +"<br>\n"); + } + report_len = reports.length; + + if (report_len <= start_index) { + out.print("<b>No such tasks</b>"); + }else{ + out.print("<hr>"); + out.print("<h2>Tasks</h2>"); + out.print("<center>"); + out.print("<table border=2 cellpadding=\"5\" cellspacing=\"2\">"); + out.print("<tr><td align=\"center\">Task</td><td>Complete</td><td>Status</td><td>Errors</td></tr>"); + if (end_index > report_len){ + end_index = report_len; } - %> - </table> - </center> -<hr> - - -<h2>Reduce Tasks</h2> - <center> - <table border=2 cellpadding="5" cellspacing="2"> - <tr><td align="center">Task</td><td>Complete</td><td>State</td><td>Errors</td></tr> - - <% - for (int i = 0; i < reduceTaskReports.length; i++) { - TaskReport report = reduceTaskReports[i]; - - out.print("<tr><td><a href=\"taskdetails.jsp?jobid=" + jobid + "&taskid=" + report.getTaskId() + "\">" + report.getTaskId() + "</a></td>"); - out.print("<td>" + report.getProgress() + "</td>"); - out.print("<td>" + report.getState() + "</td>"); - - String[] diagnostics = report.getDiagnostics(); - for (int j = 0; j < diagnostics.length ; j++) { - out.print("<td><pre>" + diagnostics[j] + "</pre></td>"); - } - out.print("</tr>\n"); + for (int i = start_index ; i < end_index; i++) { + TaskReport report = reports[i]; + out.print("<tr><td><a href=\"taskdetails.jsp?jobid=" + jobid + +"&taskid=" + report.getTaskId() + "\">" + report.getTaskId() + "</a></td>"); + out.print("<td>" + report.getProgress() + "</td>"); + out.print("<td>" + report.getState() + "</td>"); + String[] diagnostics = report.getDiagnostics(); + for (int j = 0; j < diagnostics.length ; j++) { + out.print("<td><pre>" + diagnostics[j] + "</pre></td>"); + } + out.print("</tr>\n"); } + out.print("</table>"); + out.print("</center>"); + } + %> - </table> - </center> - <% + + <% + if (end_index < report_len) { + out.print("<div style=\"text-align:right\">" + "<a href=\"/jobdetails.jsp?jobid="+ jobid + "&type=" + type +"&pagenum=" + next_page + + "\">" + "Next" + "</a></div>"); + } + if (start_index != 0) { + out.print("<div style=\"text-align:right\">" + "<a href=\"/jobdetails.jsp?jobid="+ jobid + "&type=" + type +"&pagenum=" + (pnum -1) + + "\">" + "Prev" + "</a></div>"); + } } %> Modified: lucene/hadoop/trunk/src/webapps/mapred/jobtracker.jsp URL: http://svn.apache.org/viewcvs/lucene/hadoop/trunk/src/webapps/mapred/jobtracker.jsp?rev=398650&r1=398649&r2=398650&view=diff ============================================================================== --- lucene/hadoop/trunk/src/webapps/mapred/jobtracker.jsp (original) +++ lucene/hadoop/trunk/src/webapps/mapred/jobtracker.jsp Mon May 1 10:50:28 2006 @@ -82,10 +82,14 @@ int completedReduces = job.finishedReduces(); String name = profile.getJobName(); - out.print("<tr><td><a href=\"jobdetails.jsp?jobid=" + jobid + "\">" + - jobid + "</a></td><td>"+ profile.getUser() + "</td><td>" + - ("".equals(name) ? " " : name) + "</td><td>" + - percentFormat.format(completedRatio) + "%</td><td>" + + out.print( "<tr><td>" + jobid + + "<br>" + "<a href=\"jobdetails.jsp?jobid=" + jobid + "&type=" + "map" + "&pagenum=" + 1 + "\">" + + "Maps" + "</a>" + "<br>" + + "<a href=\"jobdetails.jsp?jobid=" + jobid + "&type=" + "reduce" + "&pagenum=" + 1 + "\">" + + "Reduces" + "</a></td>" + + "<td>" + profile.getUser() + "</td>" + + "<td>" + ("".equals(name) ? " " : name) + "</td>" + + "<td>" + percentFormat.format(completedRatio) + "%</td><td>" + desiredMaps + "</td><td>" + completedMaps + "</td><td>" + desiredReduces + "</td><td> " + completedReduces + "</td></tr>\n");