You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by cu...@apache.org on 2007/06/20 21:33:54 UTC

svn commit: r549209 - in /lucene/hadoop/trunk: CHANGES.txt conf/hadoop-default.xml src/java/org/apache/hadoop/dfs/JspHelper.java src/webapps/job/jobdetails.jsp src/webapps/job/jobtracker.jsp

Author: cutting
Date: Wed Jun 20 12:33:53 2007
New Revision: 549209

URL: http://svn.apache.org/viewvc?view=rev&rev=549209
Log:
HADOOP-1484.  Permit one to kill jobs from the web ui.

Modified:
    lucene/hadoop/trunk/CHANGES.txt
    lucene/hadoop/trunk/conf/hadoop-default.xml
    lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/JspHelper.java
    lucene/hadoop/trunk/src/webapps/job/jobdetails.jsp
    lucene/hadoop/trunk/src/webapps/job/jobtracker.jsp

Modified: lucene/hadoop/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/CHANGES.txt?view=diff&rev=549209&r1=549208&r2=549209
==============================================================================
--- lucene/hadoop/trunk/CHANGES.txt (original)
+++ lucene/hadoop/trunk/CHANGES.txt Wed Jun 20 12:33:53 2007
@@ -188,6 +188,11 @@
  58. HADOOP-1505.  Remove spurious stacktrace in ZlibFactory
      introduced in HADOOP-1093.  (Michael Stack via tomwhite)
 
+ 59. HADOOP-1484.  Permit one to kill jobs from the web ui.  Note that
+     this is disabled by default.  One must set
+     "webinterface.private.actions" to enable this.
+     (Enis Soztutar via cutting)
+
 
 Release 0.13.0 - 2007-06-08
 

Modified: lucene/hadoop/trunk/conf/hadoop-default.xml
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/conf/hadoop-default.xml?view=diff&rev=549209&r1=549208&r2=549209
==============================================================================
--- lucene/hadoop/trunk/conf/hadoop-default.xml (original)
+++ lucene/hadoop/trunk/conf/hadoop-default.xml Wed Jun 20 12:33:53 2007
@@ -912,4 +912,16 @@
                 calls</description>
 </property>
 
+<!-- Web Interface Configuration -->
+
+<property>
+  <name>webinterface.private.actions</name>
+  <value>false</value>
+  <description> If set to true, the web interfaces of JT and NN may contain 
+                actions, such as kill job, delete file, etc., that should 
+                not be exposed to public. Enable this option if the interfaces 
+                are only reachable by those who have the right authorization.
+  </description>
+</property>
+
 </configuration>

Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/JspHelper.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/JspHelper.java?view=diff&rev=549209&r1=549208&r2=549209
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/JspHelper.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/JspHelper.java Wed Jun 20 12:33:53 2007
@@ -32,7 +32,7 @@
 public class JspHelper {
   static FSNamesystem fsn = null;
   static InetSocketAddress nameNodeAddr;
-  static Configuration conf = new Configuration();
+  public static Configuration conf = new Configuration();
 
   static int defaultChunkSizeToView = 
     conf.getInt("dfs.default.chunk.view.size", 32 * 1024);

Modified: lucene/hadoop/trunk/src/webapps/job/jobdetails.jsp
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/webapps/job/jobdetails.jsp?view=diff&rev=549209&r1=549208&r2=549209
==============================================================================
--- lucene/hadoop/trunk/src/webapps/job/jobdetails.jsp (original)
+++ lucene/hadoop/trunk/src/webapps/job/jobdetails.jsp Wed Jun 20 12:33:53 2007
@@ -8,10 +8,14 @@
   import="java.text.DecimalFormat"
   import="org.apache.hadoop.mapred.*"
   import="org.apache.hadoop.util.*"
+  import="org.apache.hadoop.dfs.JspHelper"
 %>
 
 <%!
   
+	private static final String PRIVATE_ACTIONS_KEY 
+		= "webinterface.private.actions";
+
   JobTracker tracker = JobTracker.getTracker();
   String trackerName = 
            StringUtils.simpleHostname(tracker.getJobTrackerMachine());
@@ -70,6 +74,18 @@
                   ) + 
               "</td></tr>\n");
   }
+  
+  private void printConfirm(JspWriter out, String jobId) throws IOException{
+    String url = "jobdetails.jsp?jobid=" + jobId;
+    out.print("<html><head><META http-equiv=\"refresh\" content=\"15;URL="
+        + url+"\"></head>"
+        + "<body><h3> Are you sure you want to kill " + jobId
+        + " ?<h3><br><table border=\"0\"><tr><td width=\"100\">"
+        + "<a href=\"" +  url + "&action=kill"
+        + "\">Kill</a></td><td width=\"100\"><a href=\"" + url
+        + "\">Don't Kill</a></td></tr></table></body></html>");
+  }
+  
 %>       
 <%   
     String jobId = request.getParameter("jobid"); 
@@ -83,6 +99,19 @@
         catch (NumberFormatException ignored) {
         }
     }
+    
+    JobInProgress job = (JobInProgress) tracker.getJob(jobId);
+    
+    if(JspHelper.conf.getBoolean(PRIVATE_ACTIONS_KEY, false)) {
+    	String action = request.getParameter("action");
+	    if(action!=null && action.equalsIgnoreCase("confirm")) {
+  	      printConfirm(out, jobId);
+    	    return;
+	    }
+  	  else if(action != null && action.equalsIgnoreCase("kill")) {
+				job.kill();
+	    }
+    }
 %>
 
 <html>
@@ -100,7 +129,6 @@
 <h1>Hadoop <%=jobId%> on <a href="/jobtracker.jsp"><%=trackerName%></a></h1>
 
 <% 
-    JobInProgress job = (JobInProgress) tracker.getJob(jobId);
     if (job == null) {
       out.print("<b>Job " + jobId + " not found.</b><br>\n");
       return;
@@ -117,17 +145,27 @@
     } else {
       out.print("<b>Job File:</b> " + profile.getJobFile() + "<br>\n");
     }
-    out.print("<b>Started at:</b> " + new Date(job.getStartTime()) + "<br>\n");
     if (runState == JobStatus.RUNNING) {
       out.print("<b>Status:</b> Running<br>\n");
+      out.print("<b>Started at:</b> " + new Date(job.getStartTime()) + "<br>\n");
+      out.print("<b>Runnning for:</b> " + StringUtils.formatTimeDiff(
+          System.currentTimeMillis(), job.getStartTime()) + "<br>\n");
     } else {
       if (runState == JobStatus.SUCCEEDED) {
         out.print("<b>Status:</b> Succeeded<br>\n");
+        out.print("<b>Started at :</b> " + new Date(job.getStartTime()) + "<br>\n");
+        out.print("<b>Finished at:</b> " + new Date(job.getFinishTime()) +
+                  "<br>\n");
+        out.print("<b>Finished in:</b> " + StringUtils.formatTimeDiff(
+            job.getFinishTime(), job.getStartTime()) + "<br>\n");
       } else if (runState == JobStatus.FAILED) {
         out.print("<b>Status:</b> Failed<br>\n");
+        out.print("<b>Started at:</b> " + new Date(job.getStartTime()) + "<br>\n");
+        out.print("<b>Failed at :</b> " + new Date(job.getFinishTime()) +
+                  "<br>\n");
+        out.print("<b>Failed in :</b> " + StringUtils.formatTimeDiff(
+            job.getFinishTime(), job.getStartTime()) + "<br>\n");
       }
-      out.print("<b>Finished at:</b> " + new Date(job.getFinishTime()) +
-                "<br>\n");
     }
     if (flakyTaskTrackers > 0) {
       out.print("<b>Black-listed TaskTrackers:</b> " + 
@@ -195,6 +233,11 @@
     %>
     </table>
 
+
+<% if(JspHelper.conf.getBoolean(PRIVATE_ACTIONS_KEY, false) 
+    	&& runState == JobStatus.RUNNING) { %>
+	<hr><a href="jobdetails.jsp?action=confirm&jobid=<%=jobId%>"> Kill this job </a>
+<% } %>
 <hr>
 <a href="/jobtracker.jsp">Go back to JobTracker</a><br>
 <a href="http://lucene.apache.org/hadoop">Hadoop</a>, 2006.<br>

Modified: lucene/hadoop/trunk/src/webapps/job/jobtracker.jsp
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/webapps/job/jobtracker.jsp?view=diff&rev=549209&r1=549208&r2=549209
==============================================================================
--- lucene/hadoop/trunk/src/webapps/job/jobtracker.jsp (original)
+++ lucene/hadoop/trunk/src/webapps/job/jobtracker.jsp Wed Jun 20 12:33:53 2007
@@ -64,10 +64,12 @@
     ClusterStatus status = tracker.getClusterStatus();
     out.print("<table border=\"2\" cellpadding=\"5\" cellspacing=\"2\">\n"+
               "<tr><th>Maps</th><th>Reduces</th>" + 
-              "<th>Tasks/Node</th><th>Nodes</th></tr>\n");
+              "<th>Tasks/Node</th><th>Total Submissions</th>" +
+              "<th>Nodes</th></tr>\n");
     out.print("<tr><td>" + status.getMapTasks() + "</td><td>" +
               status.getReduceTasks() + "</td><td>" + 
-              status.getMaxTasks() + "</td><td><a href=\"/machines.jsp\">" +
+              status.getMaxTasks() + "</td><td>" +
+              tracker.getTotalSubmissions() + "</td><td><a href=\"/machines.jsp\">" +
               status.getTaskTrackers() + "</a></td></tr></table>\n");
   }
 %>