浏览代码

Merge -r 1166974:1166975 from trunk to branch-0.23 to fix MAPREDUCE-2963.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.23@1166976 13f79535-47bb-0310-9956-ffa450edef68
Arun Murthy 13 年之前
父节点
当前提交
42dbcbb4d8

+ 2 - 0
hadoop-mapreduce-project/CHANGES.txt

@@ -1238,6 +1238,8 @@ Release 0.23.0 - Unreleased
    incorrectly assume application was gone by making submission synchronous
    incorrectly assume application was gone by making submission synchronous
    for RMAppManager. (Thomas Graves via acmurthy) 
    for RMAppManager. (Thomas Graves via acmurthy) 
 
 
+   MAPREDUCE-2963. Fix hang in TestMRJobs. (Siddharth Seth via acmurthy) 
+
 Release 0.22.0 - Unreleased
 Release 0.22.0 - Unreleased
 
 
   INCOMPATIBLE CHANGES
   INCOMPATIBLE CHANGES

+ 14 - 3
hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-jobclient/src/main/java/org/apache/hadoop/mapred/ClientServiceDelegate.java

@@ -19,6 +19,7 @@
 package org.apache.hadoop.mapred;
 package org.apache.hadoop.mapred;
 
 
 import java.io.IOException;
 import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.lang.reflect.Method;
 import java.security.PrivilegedAction;
 import java.security.PrivilegedAction;
 import java.util.HashMap;
 import java.util.HashMap;
@@ -197,7 +198,7 @@ class ClientServiceDelegate {
     //succeeded.
     //succeeded.
     if (application.getState() == ApplicationState.SUCCEEDED) {
     if (application.getState() == ApplicationState.SUCCEEDED) {
       LOG.info("Application state is completed. " +
       LOG.info("Application state is completed. " +
-          "Redirecting to job history server " + serviceAddr);
+          "Redirecting to job history server");
       realProxy = historyServerProxy;
       realProxy = historyServerProxy;
     }
     }
     return realProxy;
     return realProxy;
@@ -238,8 +239,14 @@ class ClientServiceDelegate {
         LOG.warn("Exception thrown by remote end.");
         LOG.warn("Exception thrown by remote end.");
         LOG.warn(RPCUtil.toString(yre));
         LOG.warn(RPCUtil.toString(yre));
         throw yre;
         throw yre;
+      } catch (InvocationTargetException e) {
+        //TODO Finite # of errors before giving up?
+        LOG.info("Failed to contact AM/History for job " + jobId
+            + "  Will retry..", e.getTargetException());
+        forceRefresh = true;
       } catch (Exception e) {
       } catch (Exception e) {
-        LOG.info("Failed to contact AM for job " + jobId + "  Will retry..");
+        LOG.info("Failed to contact AM/History for job " + jobId
+            + "  Will retry..", e);
         LOG.debug("Failing to contact application master", e);
         LOG.debug("Failing to contact application master", e);
         forceRefresh = true;
         forceRefresh = true;
       }
       }
@@ -306,9 +313,13 @@ class ClientServiceDelegate {
     return TypeConverter.fromYarn(report, jobFile, "");
     return TypeConverter.fromYarn(report, jobFile, "");
   }
   }
 
 
-  org.apache.hadoop.mapreduce.TaskReport[] getTaskReports(JobID jobID, TaskType taskType)
+  org.apache.hadoop.mapreduce.TaskReport[] getTaskReports(JobID oldJobID, TaskType taskType)
        throws YarnRemoteException, YarnRemoteException {
        throws YarnRemoteException, YarnRemoteException {
+    org.apache.hadoop.mapreduce.v2.api.records.JobId jobId = 
+      TypeConverter.toYarn(oldJobID);
     GetTaskReportsRequest request = recordFactory.newRecordInstance(GetTaskReportsRequest.class);
     GetTaskReportsRequest request = recordFactory.newRecordInstance(GetTaskReportsRequest.class);
+    request.setJobId(jobId);
+    request.setTaskType(TypeConverter.toYarn(taskType));
     
     
     List<org.apache.hadoop.mapreduce.v2.api.records.TaskReport> taskReports = 
     List<org.apache.hadoop.mapreduce.v2.api.records.TaskReport> taskReports = 
       ((GetTaskReportsResponse) invoke("getTaskReports", GetTaskReportsRequest.class, 
       ((GetTaskReportsResponse) invoke("getTaskReports", GetTaskReportsRequest.class,