Browse Source

MAPREDUCE-2489. Jobsplits with random hostnames can make the queue unusable (jeffrey naisbit via mahadev)

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1156821 13f79535-47bb-0310-9956-ffa450edef68
Mahadev Konar 13 years ago
parent
commit
3228351856

+ 3 - 0
mapreduce/CHANGES.txt

@@ -212,6 +212,9 @@ Trunk (unreleased changes)
     MAPREDUCE-2705. Permits parallel multiple task launches. 
     (Thomas Graves via ddas)
 
+    MAPREDUCE-2489. Jobsplits with random hostnames can make the queue 
+    unusable (jeffrey naisbit via mahadev)
+
   OPTIMIZATIONS
 
     MAPREDUCE-2026. Make JobTracker.getJobCounters() and

+ 7 - 1
mapreduce/src/java/org/apache/hadoop/mapred/JobInProgress.java

@@ -20,6 +20,7 @@ package org.apache.hadoop.mapred;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.net.UnknownHostException;
 import java.security.PrivilegedExceptionAction;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -622,7 +623,7 @@ public class JobInProgress {
    * at {@link JobTracker#initJob(JobInProgress)} for more details.
    */
   public synchronized void initTasks() 
-  throws IOException, KillInterruptedException {
+  throws IOException, KillInterruptedException, UnknownHostException {
     if (tasksInited.get() || isComplete()) {
       return;
     }
@@ -653,6 +654,11 @@ public class JobInProgress {
 
     checkTaskLimits();
 
+    // Sanity check the locations so we don't create/initialize unnecessary tasks
+    for (TaskSplitMetaInfo split : taskSplitMetaInfo) {
+      NetUtils.verifyHostnames(split.getLocations());
+    }
+
     jobtracker.getInstrumentation().addWaitingMaps(getJobID(), numMapTasks);
     jobtracker.getInstrumentation().addWaitingReduces(getJobID(), numReduceTasks);
 

+ 2 - 1
mapreduce/src/java/org/apache/hadoop/mapred/JobTracker.java

@@ -2778,7 +2778,8 @@ public class JobTracker implements MRConstants, InterTrackerProtocol,
    */
   synchronized boolean processHeartbeat(
                                  TaskTrackerStatus trackerStatus, 
-                                 boolean initialContact) {
+                                 boolean initialContact)
+                                 throws UnknownHostException {
     
     getInstrumentation().heartbeat();