YARN-1229. Define constraints on Auxiliary Service names. Change ShuffleHandler service name from mapreduce.shuffle to mapreduce_shuffle. Contributed by Xuan Gong.
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1526065 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
78e995a37d
commit
10a4289ebf
|
@ -384,6 +384,18 @@ Release 2.2.0 - UNRELEASED
|
|||
|
||||
BUG FIXES
|
||||
|
||||
Release 2.1.2 - UNRELEASED
|
||||
|
||||
INCOMPATIBLE CHANGES
|
||||
|
||||
NEW FEATURES
|
||||
|
||||
IMPROVEMENTS
|
||||
|
||||
OPTIMIZATIONS
|
||||
|
||||
BUG FIXES
|
||||
|
||||
Release 2.1.1-beta - 2013-09-23
|
||||
|
||||
INCOMPATIBLE CHANGES
|
||||
|
|
|
@ -311,7 +311,7 @@ Hadoop MapReduce Next Generation - Cluster Setup
|
|||
| | | Only applicable if log-aggregation is enabled. |
|
||||
*-------------------------+-------------------------+------------------------+
|
||||
| <<<yarn.nodemanager.aux-services>>> | | |
|
||||
| | mapreduce.shuffle | |
|
||||
| | mapreduce_shuffle | |
|
||||
| | | Shuffle service that needs to be set for Map Reduce applications. |
|
||||
*-------------------------+-------------------------+------------------------+
|
||||
|
||||
|
|
|
@ -140,7 +140,7 @@ Add the following configs to your <<<yarn-site.xml>>>
|
|||
|
||||
<property>
|
||||
<name>yarn.nodemanager.aux-services</name>
|
||||
<value>mapreduce.shuffle</value>
|
||||
<value>mapreduce_shuffle</value>
|
||||
<description>shuffle service that needs to be set for Map Reduce to run </description>
|
||||
</property>
|
||||
+---+
|
||||
|
|
|
@ -323,6 +323,18 @@ Release 2.2.0 - UNRELEASED
|
|||
|
||||
OPTIMIZATIONS
|
||||
|
||||
BUG FIXES
|
||||
|
||||
Release 2.1.2 - UNRELEASED
|
||||
|
||||
INCOMPATIBLE CHANGES
|
||||
|
||||
NEW FEATURES
|
||||
|
||||
IMPROVEMENTS
|
||||
|
||||
OPTIMIZATIONS
|
||||
|
||||
BUG FIXES
|
||||
|
||||
HDFS-5139. Remove redundant -R option from setrep.
|
||||
|
|
|
@ -191,6 +191,18 @@ Release 2.2.0 - UNRELEASED
|
|||
|
||||
OPTIMIZATIONS
|
||||
|
||||
BUG FIXES
|
||||
|
||||
Release 2.1.2 - UNRELEASED
|
||||
|
||||
INCOMPATIBLE CHANGES
|
||||
|
||||
NEW FEATURES
|
||||
|
||||
IMPROVEMENTS
|
||||
|
||||
OPTIMIZATIONS
|
||||
|
||||
BUG FIXES
|
||||
|
||||
MAPREDUCE-5504. mapred queue -info inconsistent with types (Kousuke Saruta
|
||||
|
|
|
@ -39,11 +39,11 @@ export YARN_CONF_DIR=$HADOOP_CONF_DIR
|
|||
Step 7) Setup config: for running mapreduce applications, which now are in user land, you need to setup nodemanager with the following configuration in your yarn-site.xml before you start the nodemanager.
|
||||
<property>
|
||||
<name>yarn.nodemanager.aux-services</name>
|
||||
<value>mapreduce.shuffle</value>
|
||||
<value>mapreduce_shuffle</value>
|
||||
</property>
|
||||
|
||||
<property>
|
||||
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
|
||||
<name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
|
||||
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
|
||||
</property>
|
||||
|
||||
|
|
|
@ -83,14 +83,14 @@ Hadoop MapReduce Next Generation - Pluggable Shuffle and Pluggable Sort
|
|||
*--------------------------------------+---------------------+-----------------+
|
||||
| <<Property>> | <<Default Value>> | <<Explanation>> |
|
||||
*--------------------------------------+---------------------+-----------------+
|
||||
| <<<yarn.nodemanager.aux-services>>> | <<<...,mapreduce.shuffle>>> | The auxiliary service name |
|
||||
| <<<yarn.nodemanager.aux-services>>> | <<<...,mapreduce_shuffle>>> | The auxiliary service name |
|
||||
*--------------------------------------+---------------------+-----------------+
|
||||
| <<<yarn.nodemanager.aux-services.mapreduce.shuffle.class>>> | <<<org.apache.hadoop.mapred.ShuffleHandler>>> | The auxiliary service class to use |
|
||||
| <<<yarn.nodemanager.aux-services.mapreduce_shuffle.class>>> | <<<org.apache.hadoop.mapred.ShuffleHandler>>> | The auxiliary service class to use |
|
||||
*--------------------------------------+---------------------+-----------------+
|
||||
|
||||
<<IMPORTANT:>> If setting an auxiliary service in addition the default
|
||||
<<<mapreduce.shuffle>>> service, then a new service key should be added to the
|
||||
<<<mapreduce_shuffle>>> service, then a new service key should be added to the
|
||||
<<<yarn.nodemanager.aux-services>>> property, for example <<<mapred.shufflex>>>.
|
||||
Then the property defining the corresponding class must be
|
||||
<<<yarn.nodemanager.aux-services.mapreduce.shufflex.class>>>.
|
||||
<<<yarn.nodemanager.aux-services.mapreduce_shufflex.class>>>.
|
||||
|
|
@ -146,7 +146,7 @@ public class ShuffleHandler extends AuxiliaryService {
|
|||
private ReadaheadPool readaheadPool = ReadaheadPool.getInstance();
|
||||
|
||||
public static final String MAPREDUCE_SHUFFLE_SERVICEID =
|
||||
"mapreduce.shuffle";
|
||||
"mapreduce_shuffle";
|
||||
|
||||
private static final Map<String,String> userRsrc =
|
||||
new ConcurrentHashMap<String,String>();
|
||||
|
|
|
@ -56,6 +56,22 @@ Release 2.2.0 - UNRELEASED
|
|||
|
||||
OPTIMIZATIONS
|
||||
|
||||
BUG FIXES
|
||||
|
||||
Release 2.1.2 - UNRELEASED
|
||||
|
||||
INCOMPATIBLE CHANGES
|
||||
|
||||
YARN-1229. Define constraints on Auxiliary Service names. Change
|
||||
ShuffleHandler service name from mapreduce.shuffle to
|
||||
mapreduce_shuffle (Xuan Gong via sseth)
|
||||
|
||||
NEW FEATURES
|
||||
|
||||
IMPROVEMENTS
|
||||
|
||||
OPTIMIZATIONS
|
||||
|
||||
BUG FIXES
|
||||
|
||||
YARN-1128. FifoPolicy.computeShares throws NPE on empty list of Schedulables
|
||||
|
|
|
@ -705,9 +705,10 @@
|
|||
</property>
|
||||
|
||||
<property>
|
||||
<description>the valid service name should only contain a-zA-Z0-9_ and can not start with numbers</description>
|
||||
<name>yarn.nodemanager.aux-services</name>
|
||||
<value></value>
|
||||
<!-- <value>mapreduce.shuffle</value> -->
|
||||
<!--<value>mapreduce_shuffle</value>-->
|
||||
</property>
|
||||
|
||||
<property>
|
||||
|
@ -763,7 +764,7 @@
|
|||
|
||||
<!--Map Reduce configuration-->
|
||||
<property>
|
||||
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
|
||||
<name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
|
||||
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
|
||||
</property>
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@ import java.util.Collections;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
@ -40,6 +41,8 @@ import org.apache.hadoop.yarn.server.api.ApplicationInitializationContext;
|
|||
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<AuxServicesEvent> {
|
||||
|
||||
|
@ -48,6 +51,8 @@ public class AuxServices extends AbstractService
|
|||
protected final Map<String,AuxiliaryService> serviceMap;
|
||||
protected final Map<String,ByteBuffer> serviceMetaData;
|
||||
|
||||
private final Pattern p = Pattern.compile("^[A-Za-z_]+[A-Za-z0-9_]*$");
|
||||
|
||||
public AuxServices() {
|
||||
super(AuxServices.class.getName());
|
||||
serviceMap =
|
||||
|
@ -90,6 +95,13 @@ public class AuxServices extends AbstractService
|
|||
YarnConfiguration.NM_AUX_SERVICES);
|
||||
for (final String sName : auxNames) {
|
||||
try {
|
||||
Preconditions
|
||||
.checkArgument(
|
||||
validateAuxServiceName(sName),
|
||||
"The ServiceName: " + sName + " set in " +
|
||||
YarnConfiguration.NM_AUX_SERVICES +" is invalid." +
|
||||
"The valid service name should only contain a-zA-Z0-9_ " +
|
||||
"and can not start with numbers");
|
||||
Class<? extends AuxiliaryService> sClass = conf.getClass(
|
||||
String.format(YarnConfiguration.NM_AUX_SERVICE_FMT, sName), null,
|
||||
AuxiliaryService.class);
|
||||
|
@ -199,4 +211,10 @@ public class AuxServices extends AbstractService
|
|||
}
|
||||
}
|
||||
|
||||
private boolean validateAuxServiceName(String name) {
|
||||
if (name == null || name.trim().isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
return p.matcher(name).matches();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,6 +31,8 @@ import java.util.ArrayList;
|
|||
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,33 @@ public class TestAuxServices {
|
|||
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", "Bsrv_2"});
|
||||
conf.setClass(String.format(YarnConfiguration.NM_AUX_SERVICE_FMT, "Asrv1"),
|
||||
ServiceA.class, Service.class);
|
||||
conf.setClass(String.format(YarnConfiguration.NM_AUX_SERVICE_FMT, "Bsrv_2"),
|
||||
ServiceB.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[] {"1Asrv1"});
|
||||
conf.setClass(String.format(YarnConfiguration.NM_AUX_SERVICE_FMT, "1Asrv1"),
|
||||
ServiceA.class, Service.class);
|
||||
try {
|
||||
aux1.init(conf);
|
||||
Assert.fail("Should receive the exception.");
|
||||
} catch (Exception ex) {
|
||||
assertTrue(ex.getMessage().contains("The ServiceName: 1Asrv1 set in " +
|
||||
"yarn.nodemanager.aux-services is invalid.The valid service name " +
|
||||
"should only contain a-zA-Z0-9_ and can not start with numbers"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue