diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/AuxServices.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/AuxServices.java index 77c4dd9a6cb..d026ea2b63f 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/AuxServices.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/AuxServices.java @@ -164,7 +164,7 @@ public void serviceInit(Configuration conf) throws Exception { if (useCustomerClassLoader) { // load AuxiliaryService from local class path if (appRemoteClassPath == null || appRemoteClassPath.isEmpty()) { - s = AuxiliaryServiceWithCustomClassLoader.getInstance( + s = AuxiliaryServiceWithCustomClassLoader.getInstance(sName, conf, className, appLocalClassPath); } else { // load AuxiliaryService from remote class path @@ -261,7 +261,7 @@ public void serviceInit(Configuration conf) throws Exception { + src + ".\n" + ex.getMessage()); } } - s = AuxiliaryServiceWithCustomClassLoader.getInstance( + s = AuxiliaryServiceWithCustomClassLoader.getInstance(sName, new Configuration(conf), className, dest.toString()); } LOG.info("The aux service:" + sName diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/AuxiliaryServiceWithCustomClassLoader.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/AuxiliaryServiceWithCustomClassLoader.java index c764fbdc065..a29ab5a2108 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/AuxiliaryServiceWithCustomClassLoader.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/AuxiliaryServiceWithCustomClassLoader.java @@ -159,11 +159,11 @@ public void setRecoveryPath(Path recoveryPath) { } public static AuxiliaryServiceWithCustomClassLoader getInstance( - Configuration conf, String className, String appClassPath) - throws IOException, ClassNotFoundException { + String auxServiceName, Configuration conf, String className, + String appClassPath) throws IOException, ClassNotFoundException { String[] systemClasses = conf.getTrimmedStrings(String.format( YarnConfiguration.NM_AUX_SERVICES_SYSTEM_CLASSES, - className)); + auxServiceName)); ClassLoader customClassLoader = createAuxServiceClassLoader( appClassPath, systemClasses); Class clazz = Class.forName(className, true, diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/TestAuxServices.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/TestAuxServices.java index ca0b32a7521..a5d96f82a77 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/TestAuxServices.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/TestAuxServices.java @@ -61,7 +61,6 @@ import org.apache.hadoop.fs.permission.FsPermission; import org.apache.hadoop.service.Service; import org.apache.hadoop.test.GenericTestUtils; -import org.apache.hadoop.util.ApplicationClassLoader; import org.apache.hadoop.util.JarFinder; import org.apache.hadoop.util.StringUtils; import org.apache.hadoop.yarn.api.records.ApplicationAttemptId; @@ -337,6 +336,12 @@ public void testCustomizedAuxServiceClassPath() throws Exception { new String[] {"ServiceC"}); conf.setClass(String.format(YarnConfiguration.NM_AUX_SERVICE_FMT, "ServiceC"), ServiceC.class, Service.class); + // We set a simple system-class for this test, it only contains + // the hadoop package because it is required to let the ServiceC class + // to load. + conf.set(String.format(YarnConfiguration.NM_AUX_SERVICES_SYSTEM_CLASSES, + "ServiceC"), "org.apache.hadoop."); + @SuppressWarnings("resource") AuxServices aux = new AuxServices(MOCK_AUX_PATH_HANDLER, MOCK_CONTEXT, MOCK_DEL_SERVICE); @@ -375,12 +380,6 @@ public void testCustomizedAuxServiceClassPath() throws Exception { conf.set(String.format( YarnConfiguration.NM_AUX_SERVICES_CLASSPATH, "ServiceC"), testJar.getAbsolutePath()); - // remove "-org.apache.hadoop." from system classes - String systemClasses = "-org.apache.hadoop." + "," + - ApplicationClassLoader.SYSTEM_CLASSES_DEFAULT; - conf.set(String.format( - YarnConfiguration.NM_AUX_SERVICES_SYSTEM_CLASSES, - "ServiceC"), systemClasses); aux = new AuxServices(MOCK_AUX_PATH_HANDLER, MOCK_CONTEXT, MOCK_DEL_SERVICE); aux.init(conf);