MAPREDUCE-5146. application classloader may be used too early to load classes. Contributed by Sangjin Lee.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1470694 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Thomas White 2013-04-22 20:07:06 +00:00
parent e24a9b83f1
commit 009af54d51
2 changed files with 6 additions and 5 deletions

View File

@ -330,6 +330,9 @@ Release 2.0.5-beta - UNRELEASED
MAPREDUCE-5066. Added a timeout for the job.end.notification.url. (Ivan MAPREDUCE-5066. Added a timeout for the job.end.notification.url. (Ivan
Mitic via acmurthy) Mitic via acmurthy)
MAPREDUCE-5146. application classloader may be used too early to load
classes. (Sangjin Lee via tomwhite)
Release 2.0.4-alpha - UNRELEASED Release 2.0.4-alpha - UNRELEASED
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -20,10 +20,8 @@
import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.concurrent.TimeUnit.MILLISECONDS;
import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import java.io.PrintStream;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.net.URI; import java.net.URI;
import java.security.PrivilegedExceptionAction; import java.security.PrivilegedExceptionAction;
@ -148,6 +146,9 @@ public TaskUmbilicalProtocol run() throws Exception {
// Add tokens to new user so that it may execute its task correctly. // Add tokens to new user so that it may execute its task correctly.
childUGI.addCredentials(credentials); childUGI.addCredentials(credentials);
// set job classloader if configured before invoking the task
MRApps.setJobClassLoader(job);
// Create a final reference to the task for the doAs block // Create a final reference to the task for the doAs block
final Task taskFinal = task; final Task taskFinal = task;
childUGI.doAs(new PrivilegedExceptionAction<Object>() { childUGI.doAs(new PrivilegedExceptionAction<Object>() {
@ -255,9 +256,6 @@ private static JobConf configureTask(Task task, Credentials credentials,
final JobConf job = new JobConf(MRJobConfig.JOB_CONF_FILE); final JobConf job = new JobConf(MRJobConfig.JOB_CONF_FILE);
job.setCredentials(credentials); job.setCredentials(credentials);
// set job classloader if configured
MRApps.setJobClassLoader(job);
String appAttemptIdEnv = System String appAttemptIdEnv = System
.getenv(MRJobConfig.APPLICATION_ATTEMPT_ID_ENV); .getenv(MRJobConfig.APPLICATION_ATTEMPT_ID_ENV);
LOG.debug("APPLICATION_ATTEMPT_ID: " + appAttemptIdEnv); LOG.debug("APPLICATION_ATTEMPT_ID: " + appAttemptIdEnv);