diff --git a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapreduce/task/reduce/Fetcher.java b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapreduce/task/reduce/Fetcher.java index e013d017b1555..3f3688d3ebb18 100644 --- a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapreduce/task/reduce/Fetcher.java +++ b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapreduce/task/reduce/Fetcher.java @@ -36,6 +36,7 @@ import javax.net.ssl.HttpsURLConnection; import org.apache.hadoop.io.IOUtils; +import org.apache.hadoop.io.Text; import org.apache.hadoop.mapred.Counters; import org.apache.hadoop.mapred.JobConf; import org.apache.hadoop.mapred.Reporter; @@ -71,6 +72,7 @@ public class Fetcher extends Thread { private static final long FETCH_RETRY_DELAY_DEFAULT = 1000L; static final int TOO_MANY_REQ_STATUS_CODE = 429; private static final String FETCH_RETRY_AFTER_HEADER = "Retry-After"; + private static final int MAX_ERROR_LENGTH = 10000; protected final Reporter reporter; @VisibleForTesting @@ -508,6 +510,18 @@ private TaskAttemptID[] copyMapOutput(MapHost host, decompressedLength = header.uncompressedLength; forReduce = header.forReduce; } catch (IllegalArgumentException e) { + byte[] bytes = new byte[MAX_ERROR_LENGTH]; + int len = 0; + int c = input.read(); + while (c != -1 || len < MAX_ERROR_LENGTH) { + bytes[len] = (byte) c; + len++; + c = input.read(); + } + String errorMessage = Text.decode(bytes, 0, len); + if (errorMessage.length() > 0) { + LOG.warn("Error message from Shuffle Handler: " + errorMessage); + } badIdErrs.increment(1); LOG.warn("Invalid map id ", e); //Don't know which one was bad, so consider all of them as bad