Author: cutting Date: Thu Sep 13 14:05:32 2007 New Revision: 575450 URL: http://svn.apache.org/viewvc?rev=575450&view=rev Log: HADOOP-1592. Log error messages to the client console when tasks fail. Contributed by Amar Kamat.
Modified: lucene/hadoop/trunk/CHANGES.txt lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/JobClient.java lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/JobSubmissionProtocol.java lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/JobTracker.java lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/LocalJobRunner.java lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/TaskInProgress.java lucene/hadoop/trunk/src/webapps/job/jobfailures.jsp lucene/hadoop/trunk/src/webapps/job/taskdetails.jsp Modified: lucene/hadoop/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/CHANGES.txt?rev=575450&r1=575449&r2=575450&view=diff ============================================================================== --- lucene/hadoop/trunk/CHANGES.txt (original) +++ lucene/hadoop/trunk/CHANGES.txt Thu Sep 13 14:05:32 2007 @@ -223,6 +223,9 @@ second jobtracker doesn't trash one that's already running. (omalley via cutting) + HADOOP-1592. Log error messages to the client console when tasks + fail. (Amar Kamat via cutting) + Release 0.14.1 - 2007-09-04 Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/JobClient.java URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/JobClient.java?rev=575450&r1=575449&r2=575450&view=diff ============================================================================== --- lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/JobClient.java (original) +++ lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/JobClient.java Thu Sep 13 14:05:32 2007 @@ -54,6 +54,7 @@ import org.apache.hadoop.io.retry.RetryPolicy; import org.apache.hadoop.io.retry.RetryProxy; import org.apache.hadoop.ipc.RPC; +import org.apache.hadoop.mapred.TaskInProgress; import org.apache.hadoop.util.StringUtils; import org.apache.hadoop.util.Tool; import org.apache.hadoop.util.ToolRunner; @@ -641,6 +642,16 @@ if (event.getTaskStatus() == TaskCompletionEvent.Status.FAILED){ LOG.info(event.toString()); + // Displaying the task diagnostic information + String taskId = event.getTaskId(); + String tipId = TaskInProgress.getTipId(taskId); + String[] taskDiagnostics = + jc.jobSubmitClient.getTaskDiagnostics(jobId, tipId, + taskId); + for(String diagnostics : taskDiagnostics){ + System.err.println(diagnostics); + } + // Displaying the task logs displayTaskLogs(event.getTaskId(), event.getTaskTrackerHttp()); } break; Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/JobSubmissionProtocol.java URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/JobSubmissionProtocol.java?rev=575450&r1=575449&r2=575450&view=diff ============================================================================== --- lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/JobSubmissionProtocol.java (original) +++ lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/JobSubmissionProtocol.java Thu Sep 13 14:05:32 2007 @@ -121,4 +121,12 @@ public TaskCompletionEvent[] getTaskCompletionEvents( String jobid, int fromEventId, int maxEvents) throws IOException; + /** + * Get the diagnostics for a given task in a given job + * @param jobId the id of the job + * @return an array of the diagnostic messages + */ + public String[] getTaskDiagnostics(String jobId, String tipId, String taskId) + throws IOException; + } Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/JobTracker.java URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/JobTracker.java?rev=575450&r1=575449&r2=575450&view=diff ============================================================================== --- lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/JobTracker.java (original) +++ lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/JobTracker.java Thu Sep 13 14:05:32 2007 @@ -1651,11 +1651,11 @@ * @param jobId the id of the job * @param tipId the id of the tip * @param taskId the id of the task - * @return a list of the diagnostic messages + * @return an array of the diagnostic messages */ - public synchronized List<String> getTaskDiagnostics(String jobId, + public synchronized String[] getTaskDiagnostics(String jobId, String tipId, - String taskId) { + String taskId) throws IOException { JobInProgress job = jobs.get(jobId); if (job == null) { throw new IllegalArgumentException("Job " + jobId + " not found."); @@ -1664,7 +1664,7 @@ if (tip == null) { throw new IllegalArgumentException("TIP " + tipId + " not found."); } - return tip.getDiagnosticInfo(taskId); + return tip.getDiagnosticInfo(taskId).toArray(new String[0]); } /** Get all the TaskStatuses from the tipid. */ Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/LocalJobRunner.java URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/LocalJobRunner.java?rev=575450&r1=575449&r2=575450&view=diff ============================================================================== --- lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/LocalJobRunner.java (original) +++ lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/LocalJobRunner.java Thu Sep 13 14:05:32 2007 @@ -335,4 +335,12 @@ idFormat.setGroupingUsed(false); } + /** + * Returns the diagnostic information for a particular task in the given job. + * To be implemented + */ + public String[] getTaskDiagnostics(String jobid, String tipId, String taskid) + throws IOException{ + return new String [0]; + } } Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/TaskInProgress.java URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/TaskInProgress.java?rev=575450&r1=575449&r2=575450&view=diff ============================================================================== --- lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/TaskInProgress.java (original) +++ lucene/hadoop/trunk/src/java/org/apache/hadoop/mapred/TaskInProgress.java Thu Sep 13 14:05:32 2007 @@ -785,4 +785,11 @@ public int getSuccessEventNumber() { return successEventNumber; } + + /** + * Gets the tip id for the given taskid + * */ + public static String getTipId(String taskId){ + return taskId.substring(0, taskId.lastIndexOf('_')).replace("task", "tip"); + } } Modified: lucene/hadoop/trunk/src/webapps/job/jobfailures.jsp URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/webapps/job/jobfailures.jsp?rev=575450&r1=575449&r2=575450&view=diff ============================================================================== --- lucene/hadoop/trunk/src/webapps/job/jobfailures.jsp (original) +++ lucene/hadoop/trunk/src/webapps/job/jobfailures.jsp Thu Sep 13 14:05:32 2007 @@ -40,15 +40,15 @@ } out.print("<td>" + taskState + "</td>"); out.print("<td><pre>"); - List<String> failures = + String[] failures = tracker.getTaskDiagnostics(jobId, tipId, statuses[i].getTaskId()); if (failures == null) { out.print(" "); } else { - for(Iterator<String> itr = failures.iterator(); itr.hasNext(); ) { - out.print(itr.next()); - if (itr.hasNext()) { + for(int j = 0 ; j < failures.length ; j++){ + out.print(failures[j]); + if (j < (failures.length - 1)) { out.print("\n-------\n"); } } Modified: lucene/hadoop/trunk/src/webapps/job/taskdetails.jsp URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/webapps/job/taskdetails.jsp?rev=575450&r1=575449&r2=575450&view=diff ============================================================================== --- lucene/hadoop/trunk/src/webapps/job/taskdetails.jsp (original) +++ lucene/hadoop/trunk/src/webapps/job/taskdetails.jsp Thu Sep 13 14:05:32 2007 @@ -123,15 +123,15 @@ .getFinishTime(), status.getStartTime()) + "</td>"); out.print("<td><pre>"); - List<String> failures = tracker.getTaskDiagnostics(jobid, tipid, + String [] failures = tracker.getTaskDiagnostics(jobid, tipid, status.getTaskId()); if (failures == null) { out.print(" "); } else { - for (Iterator<String> itr = failures.iterator(); itr.hasNext();) { - out.print(itr.next()); - if (itr.hasNext()) { - out.print("\n-------\n"); + for(int j = 0 ; j < failures.length ; j++){ + out.print(failures[j]); + if (j < (failures.length - 1)) { + out.print("\n-------\n"); } } }