You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by om...@apache.org on 2011/03/04 05:28:01 UTC

svn commit: r1077549 - in /hadoop/common/branches/branch-0.20-security-patches: bin/hadoop src/mapred/org/apache/hadoop/mapred/TaskRunner.java

Author: omalley
Date: Fri Mar  4 04:28:01 2011
New Revision: 1077549

URL: http://svn.apache.org/viewvc?rev=1077549&view=rev
Log:
commit af96a354d0684509cee3e42941fe0aefd025d60d
Author: Devaraj Das <dd...@yahoo-inc.com>
Date:   Thu Jul 15 23:42:06 2010 -0700

    MAPREDUCE-1938. Introduces a configuration for putting user classes before the system classes during job submission and in task launches. Contributed by Devaraj Das.
    
    +++ b/YAHOO-CHANGES.txt
    +    MAPREDUCE-1938. Introduces a configuration for putting user classes before
    +    the system classes during job submission and in task launches. (ddas)
    +

Modified:
    hadoop/common/branches/branch-0.20-security-patches/bin/hadoop
    hadoop/common/branches/branch-0.20-security-patches/src/mapred/org/apache/hadoop/mapred/TaskRunner.java

Modified: hadoop/common/branches/branch-0.20-security-patches/bin/hadoop
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.20-security-patches/bin/hadoop?rev=1077549&r1=1077548&r2=1077549&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.20-security-patches/bin/hadoop (original)
+++ hadoop/common/branches/branch-0.20-security-patches/bin/hadoop Fri Mar  4 04:28:01 2011
@@ -24,6 +24,12 @@
 #
 #   HADOOP_CLASSPATH Extra Java CLASSPATH entries.
 #
+#   HADOOP_USER_CLASSPATH_FIRST      When defined, the HADOOP_CLASSPATH is 
+#                                    added in the beginning of the global
+#                                    classpath. Can be defined, for example,
+#                                    by doing 
+#                                    export HADOOP_USER_CLASSPATH_FIRST=true
+#
 #   HADOOP_HEAPSIZE  The maximum amount of heap to use, in MB. 
 #                    Default is 1000.
 #
@@ -123,6 +129,9 @@ fi
 # CLASSPATH initially contains $HADOOP_CONF_DIR
 CLASSPATH="${HADOOP_CONF_DIR}"
 CLASSPATH=${CLASSPATH}:$JAVA_HOME/lib/tools.jar
+if [ "$HADOOP_USER_CLASSPATH_FIRST" != "" ] && [ "$HADOOP_CLASSPATH" != "" ] ; then
+  CLASSPATH=${CLASSPATH}:${HADOOP_CLASSPATH}
+fi
 
 # for developers, add Hadoop classes to CLASSPATH
 if [ -d "$HADOOP_HOME/build/classes" ]; then
@@ -172,7 +181,7 @@ for f in $HADOOP_HOME/build/hadoop-tools
 done
 
 # add user-specified CLASSPATH last
-if [ "$HADOOP_CLASSPATH" != "" ]; then
+if [ "$HADOOP_USER_CLASSPATH_FIRST" = "" ] && [ "$HADOOP_CLASSPATH" != "" ]; then
   CLASSPATH=${CLASSPATH}:${HADOOP_CLASSPATH}
 fi
 

Modified: hadoop/common/branches/branch-0.20-security-patches/src/mapred/org/apache/hadoop/mapred/TaskRunner.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.20-security-patches/src/mapred/org/apache/hadoop/mapred/TaskRunner.java?rev=1077549&r1=1077548&r2=1077549&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.20-security-patches/src/mapred/org/apache/hadoop/mapred/TaskRunner.java (original)
+++ hadoop/common/branches/branch-0.20-security-patches/src/mapred/org/apache/hadoop/mapred/TaskRunner.java Fri Mar  4 04:28:01 2011
@@ -65,6 +65,8 @@ abstract class TaskRunner extends Thread
   private boolean exitCodeSet = false;
   
   private static String SYSTEM_PATH_SEPARATOR = System.getProperty("path.separator");
+  static final String MAPREDUCE_USER_CLASSPATH_FIRST =
+        "mapreduce.user.classpath.first"; //a semi-hidden config
 
   
   private TaskTracker tracker;
@@ -482,8 +484,14 @@ abstract class TaskRunner extends Thread
       throws IOException {
     // Accumulates class paths for child.
     List<String> classPaths = new ArrayList<String>();
-    // start with same classpath as parent process
-    appendSystemClasspaths(classPaths);
+    
+    boolean userClassesTakesPrecedence = 
+      conf.getBoolean(MAPREDUCE_USER_CLASSPATH_FIRST,false);
+    
+    if (!userClassesTakesPrecedence) {
+      // start with same classpath as parent process
+      appendSystemClasspaths(classPaths);
+    }
 
     // include the user specified classpath
     appendJobJarClasspaths(conf.getJar(), classPaths);
@@ -493,6 +501,12 @@ abstract class TaskRunner extends Thread
     
     // Include the working dir too
     classPaths.add(workDir.toString());
+
+    if (userClassesTakesPrecedence) {
+      // parent process's classpath is added last
+      appendSystemClasspaths(classPaths);
+    }
+    
     return classPaths;
   }