Explorar o código

HADOOP-2165. Augmented JobHistory to include the URIs to the tasks' userlogs. Contributed by Vinod Kumar Vavilapalli.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/core/trunk@697221 13f79535-47bb-0310-9956-ffa450edef68
Arun Murthy %!s(int64=17) %!d(string=hai) anos
pai
achega
e77e40973b

+ 3 - 0
CHANGES.txt

@@ -386,6 +386,9 @@ Trunk (unreleased changes)
     priorities, also allow it to be manipulated via the web-ui. (Hemanth
     Yamijala via acmurthy) 
 
+    HADOOP-2165. Augmented JobHistory to include the URIs to the tasks'
+    userlogs. (Vinod Kumar Vavilapalli via acmurthy) 
+
   OPTIMIZATIONS
 
     HADOOP-3556. Removed lock contention in MD5Hash by changing the 

+ 3 - 1
src/mapred/org/apache/hadoop/mapred/HistoryViewer.java

@@ -180,7 +180,7 @@ class HistoryViewer {
     if (Values.REDUCE.name().equals(taskType)) {
       taskList.append("\tShuffleFinished\tSortFinished");
     }
-    taskList.append("\tFinishTime\tHostName\tError");
+    taskList.append("\tFinishTime\tHostName\tError\tTaskLogs");
     taskList.append("\n====================================================");
     System.out.println(taskList.toString());
     for (JobHistory.Task task : tasks.values()) {
@@ -206,6 +206,8 @@ class HistoryViewer {
           taskList.append("\t"); 
           taskList.append(attempt.get(Keys.HOSTNAME)).append("\t");
           taskList.append(attempt.get(Keys.ERROR));
+          String taskLogsUrl = JobHistory.getTaskLogsUrl(attempt);
+          taskList.append(taskLogsUrl != null ? taskLogsUrl : "n/a");
           System.out.println(taskList.toString());
         }
       }

+ 21 - 0
src/mapred/org/apache/hadoop/mapred/JobHistory.java

@@ -1526,4 +1526,25 @@ public class JobHistory {
       isRunning = false; 
     }
   }
+
+  /**
+   * Return the TaskLogsUrl of a particular TaskAttempt
+   * 
+   * @param attempt
+   * @return the taskLogsUrl. null if http-port or tracker-name or
+   *         task-attempt-id are unavailable.
+   */
+  public static String getTaskLogsUrl(JobHistory.TaskAttempt attempt) {
+    if (attempt.get(Keys.HTTP_PORT).equals("")
+        || attempt.get(Keys.TRACKER_NAME).equals("")
+        || attempt.get(Keys.TASK_ATTEMPT_ID).equals("")) {
+      return null;
+    }
+
+    String taskTrackerName =
+        JobInProgress.convertTrackerNameToHostName(
+            attempt.get(Keys.TRACKER_NAME)).substring("tracker_".length());
+    return TaskLogServlet.getTaskLogUrl(taskTrackerName, attempt
+        .get(Keys.HTTP_PORT), attempt.get(Keys.TASK_ATTEMPT_ID));
+  }
 }

+ 13 - 0
src/mapred/org/apache/hadoop/mapred/TaskLogServlet.java

@@ -40,6 +40,19 @@ public class TaskLogServlet extends HttpServlet {
     return f.canRead();
   }
 
+  /**
+   * Construct the taskLogUrl
+   * @param taskTrackerHostName
+   * @param httpPort
+   * @param taskAttemptID
+   * @return the taskLogUrl
+   */
+  public static String getTaskLogUrl(String taskTrackerHostName,
+      String httpPort, String taskAttemptID) {
+    return ("http://" + taskTrackerHostName + ":" + httpPort
+        + "/tasklog?taskid=" + taskAttemptID);
+  }
+
   /**
    * Find the next quotable character in the given array.
    * @param data the bytes to look in

+ 6 - 3
src/webapps/job/jobfailures.jsp

@@ -55,10 +55,13 @@
         out.print("</pre></td>");
         
         out.print("<td>");
+        String taskLogUrl = null;
         if (taskTracker != null) {
-          String taskLogUrl = "http://" + taskTracker.getHost() + ":" +
-          	taskTracker.getHttpPort() + "/tasklog?taskid=" + 
-          	statuses[i].getTaskID();
+          taskLogUrl = TaskLogServlet.getTaskLogUrl(taskTracker.getHost(),
+                                String.valueOf(taskTracker.getHttpPort()),
+                                statuses[i].getTaskID().toString());
+        }
+        if (taskLogUrl != null) {
           String tailFourKBUrl = taskLogUrl + "&start=-4097";
           String tailEightKBUrl = taskLogUrl + "&start=-8193";
           String entireLogUrl = taskLogUrl;

+ 7 - 3
src/webapps/job/taskdetails.jsp

@@ -153,11 +153,15 @@
         }
         out.print("</pre></td>");
         out.print("<td>");
-        if (taskAttemptTracker == null) {
+        String taskLogUrl = null;
+        if (taskTracker != null ) {
+        	taskLogUrl = TaskLogServlet.getTaskLogUrl(taskTracker.getHost(),
+        						String.valueOf(taskTracker.getHttpPort()),
+        						status.getTaskID().toString());
+      	}
+        if (taskLogUrl == null) {
           out.print("n/a");
         } else {
-          String taskLogUrl = taskAttemptTracker + "/tasklog?taskid="
-            + status.getTaskID();
           String tailFourKBUrl = taskLogUrl + "&start=-4097";
           String tailEightKBUrl = taskLogUrl + "&start=-8193";
           String entireLogUrl = taskLogUrl + "&all=true";

+ 16 - 1
src/webapps/job/taskdetailshistory.jsp

@@ -37,7 +37,7 @@
 <%
   }
 %>
-<td>Finish Time</td><td>Host</td><td>Error</td></tr>
+<td>Finish Time</td><td>Host</td><td>Error</td><td>Task Logs</td></tr>
 <%
   for (JobHistory.TaskAttempt attempt : task.getTaskAttempts().values()) {
     printTaskAttempt(attempt, type, out);
@@ -84,6 +84,21 @@
               taskAttempt.getLong(Keys.START_TIME) ) + "</td>"); 
     out.print("<td>" + taskAttempt.get(Keys.HOSTNAME) + "</td>");
     out.print("<td>" + taskAttempt.get(Keys.ERROR) + "</td>");
+
+    // Print task log urls
+    out.print("<td>");	
+    String taskLogsUrl = JobHistory.getTaskLogsUrl(taskAttempt);
+    if (taskLogsUrl != null) {
+	    String tailFourKBUrl = taskLogsUrl + "&start=-4097";
+	    String tailEightKBUrl = taskLogsUrl + "&start=-8193";
+	    String entireLogUrl = taskLogsUrl + "&all=true";
+	    out.print("<a href=\"" + tailFourKBUrl + "\">Last 4KB</a><br/>");
+	    out.print("<a href=\"" + tailEightKBUrl + "\">Last 8KB</a><br/>");
+	    out.print("<a href=\"" + entireLogUrl + "\">All</a><br/>");
+    } else {
+        out.print("n/a");
+    }
+    out.print("</td>");
     out.print("</tr>"); 
   }
 %>