diff --git hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-shuffle/src/main/java/org/apache/hadoop/mapred/ShuffleHandler.java hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-shuffle/src/main/java/org/apache/hadoop/mapred/ShuffleHandler.java index f9d1203..f652717 100644 --- hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-shuffle/src/main/java/org/apache/hadoop/mapred/ShuffleHandler.java +++ hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-shuffle/src/main/java/org/apache/hadoop/mapred/ShuffleHandler.java @@ -146,7 +146,7 @@ private ReadaheadPool readaheadPool = ReadaheadPool.getInstance(); public static final String MAPREDUCE_SHUFFLE_SERVICEID = - "mapreduce.shuffle"; + "MapreduceShuffle"; private static final Map userRsrc = new ConcurrentHashMap(); diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/AuxiliaryServiceHelper.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/AuxiliaryServiceHelper.java index 23fc50f..e82f4c5 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/AuxiliaryServiceHelper.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/AuxiliaryServiceHelper.java @@ -26,7 +26,7 @@ public class AuxiliaryServiceHelper { - public final static String NM_AUX_SERVICE = "NM_AUX_SERVICE_"; + public final static String NM_AUX_SERVICE = "NodeManagerAuxService"; public static ByteBuffer getServiceDataFromEnv(String serviceName, Map env) { diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml index 8aa7d01..6fc558e 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml @@ -705,9 +705,10 @@ + the valid service name should only contain a-zA-Z0-9 yarn.nodemanager.aux-services - + @@ -763,7 +764,7 @@ - yarn.nodemanager.aux-services.mapreduce.shuffle.class + yarn.nodemanager.aux-services.MapreduceShuffle.class org.apache.hadoop.mapred.ShuffleHandler diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/AuxServices.java 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 13f4365..bad1068 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/AuxServices.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/AuxServices.java @@ -25,6 +25,7 @@ import java.util.Map; import java.util.Map.Entry; +import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.conf.Configuration; @@ -40,6 +41,8 @@ import org.apache.hadoop.yarn.server.api.ContainerInitializationContext; import org.apache.hadoop.yarn.server.api.ContainerTerminationContext; +import com.google.common.base.Preconditions; + public class AuxServices extends AbstractService implements ServiceStateChangeListener, EventHandler { @@ -90,6 +93,12 @@ public void serviceInit(Configuration conf) throws Exception { YarnConfiguration.NM_AUX_SERVICES); for (final String sName : auxNames) { try { + Preconditions + .checkArgument( + StringUtils.isAlphanumeric(sName), + "The ServiceName: " + sName + " set in " + + YarnConfiguration.NM_AUX_SERVICES +" is invalid." + + "The valid service name should only contain a-zA-Z0-9"); Class sClass = conf.getClass( String.format(YarnConfiguration.NM_AUX_SERVICE_FMT, sName), null, AuxiliaryService.class); @@ -198,5 +207,4 @@ public void handle(AuxServicesEvent event) { throw new RuntimeException("Unknown type: " + event.getType()); } } - } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/TestAuxServices.java 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 81f758e..977c44d 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/TestAuxServices.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/TestAuxServices.java @@ -31,6 +31,8 @@ import java.util.Collection; import java.util.Map; +import junit.framework.Assert; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.conf.Configuration; @@ -288,4 +290,31 @@ public void testAuxUnexpectedStop() { assertTrue(aux.getServices().isEmpty()); } + @Test + public void testValidAuxServiceName() { + final AuxServices aux = new AuxServices(); + Configuration conf = new Configuration(); + conf.setStrings(YarnConfiguration.NM_AUX_SERVICES, new String[] {"Asrv1"}); + conf.setClass(String.format(YarnConfiguration.NM_AUX_SERVICE_FMT, "Asrv1"), + ServiceA.class, Service.class); + try { + aux.init(conf); + } catch (Exception ex) { + Assert.fail("Should not receive the exception."); + } + + //Test bad auxService Name + final AuxServices aux1 = new AuxServices(); + conf.setStrings(YarnConfiguration.NM_AUX_SERVICES, new String[] {"Asrv_1"}); + conf.setClass(String.format(YarnConfiguration.NM_AUX_SERVICE_FMT, "Asrv_1"), + ServiceA.class, Service.class); + try { + aux1.init(conf); + Assert.fail("Should receive the exception."); + } catch (Exception ex) { + assertTrue(ex.getMessage().contains("The ServiceName: Asrv_1 set in " + + "yarn.nodemanager.aux-services is invalid.The valid service name " + + "should only contain a-zA-Z0-9")); + } + } }