From afbb2798253ed7dae38ac3ce1ab407466637c829 Mon Sep 17 00:00:00 2001 From: Kihwal Lee Date: Wed, 29 Oct 2014 12:30:51 -0500 Subject: [PATCH] MAPREDUCE-6022. map_input_file is missing from streaming job environment. Contributed by Jason Lowe. (cherry picked from commit b056048114bf4701ef9dd22486db937cb589e81b) --- .../org/apache/hadoop/conf/Configuration.java | 26 +++++++++++++++++++ hadoop-mapreduce-project/CHANGES.txt | 3 +++ .../apache/hadoop/streaming/PipeMapRed.java | 4 ++- .../org/apache/hadoop/streaming/TrApp.java | 3 +++ 4 files changed, 35 insertions(+), 1 deletion(-) diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java index 62cc78de141..12768656fe2 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java @@ -558,6 +558,32 @@ public class Configuration implements Iterable>, return deprecationContext.get().getDeprecatedKeyMap().containsKey(key); } + /** + * Sets all deprecated properties that are not currently set but have a + * corresponding new property that is set. Useful for iterating the + * properties when all deprecated properties for currently set properties + * need to be present. + */ + public void setDeprecatedProperties() { + DeprecationContext deprecations = deprecationContext.get(); + Properties props = getProps(); + Properties overlay = getOverlay(); + for (Map.Entry entry : + deprecations.getDeprecatedKeyMap().entrySet()) { + String depKey = entry.getKey(); + if (!overlay.contains(depKey)) { + for (String newKey : entry.getValue().newKeys) { + String val = overlay.getProperty(newKey); + if (val != null) { + props.setProperty(depKey, val); + overlay.setProperty(depKey, val); + break; + } + } + } + } + } + /** * Checks for the presence of the property name in the * deprecation map. Returns the first of the list of new keys if present diff --git a/hadoop-mapreduce-project/CHANGES.txt b/hadoop-mapreduce-project/CHANGES.txt index 5d7dc8cbcf1..ab9d9c37588 100644 --- a/hadoop-mapreduce-project/CHANGES.txt +++ b/hadoop-mapreduce-project/CHANGES.txt @@ -216,6 +216,9 @@ Release 2.6.0 - UNRELEASED MAPREDUCE-6142. Fixed test failures in TestJobHistoryEventHandler and TestMRTimelineEventHandling. (Zhijie Shen via vinodkv) + MAPREDUCE-6022. map_input_file is missing from streaming job environment. + (jlowe via kihwal) + Release 2.5.1 - 2014-09-05 INCOMPATIBLE CHANGES diff --git a/hadoop-tools/hadoop-streaming/src/main/java/org/apache/hadoop/streaming/PipeMapRed.java b/hadoop-tools/hadoop-streaming/src/main/java/org/apache/hadoop/streaming/PipeMapRed.java index c8d099ec9a7..f47e756c8ed 100644 --- a/hadoop-tools/hadoop-streaming/src/main/java/org/apache/hadoop/streaming/PipeMapRed.java +++ b/hadoop-tools/hadoop-streaming/src/main/java/org/apache/hadoop/streaming/PipeMapRed.java @@ -235,7 +235,9 @@ public abstract class PipeMapRed { } } - void addJobConfToEnvironment(JobConf conf, Properties env) { + void addJobConfToEnvironment(JobConf jobconf, Properties env) { + JobConf conf = new JobConf(jobconf); + conf.setDeprecatedProperties(); Iterator it = conf.iterator(); while (it.hasNext()) { Map.Entry en = (Map.Entry) it.next(); diff --git a/hadoop-tools/hadoop-streaming/src/test/java/org/apache/hadoop/streaming/TrApp.java b/hadoop-tools/hadoop-streaming/src/test/java/org/apache/hadoop/streaming/TrApp.java index e413261fad1..d0583320e70 100644 --- a/hadoop-tools/hadoop-streaming/src/test/java/org/apache/hadoop/streaming/TrApp.java +++ b/hadoop-tools/hadoop-streaming/src/test/java/org/apache/hadoop/streaming/TrApp.java @@ -57,6 +57,9 @@ public class TrApp // the FileSplit context properties are not available in local hadoop.. // so can't check them in this test. + // verify some deprecated properties appear for older stream jobs + expect("map_input_file", env.getProperty("mapreduce_map_input_file")); + expect("map_input_length", env.getProperty("mapreduce_map_input_length")); } // this runs in a subprocess; won't use JUnit's assertTrue()