YARN-9858. Optimize RMContext getExclusiveEnforcedPartitions. Contributed by Jonathan Hung.

This commit is contained in:
bibinchundatt 2019-10-01 16:02:26 +05:30
parent 8efd25b33a
commit 425a6c89ae
5 changed files with 22 additions and 26 deletions

View File

@ -23,7 +23,9 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.hadoop.HadoopIllegalArgumentException;
import org.apache.hadoop.classification.InterfaceAudience.Private;
@ -3795,6 +3797,20 @@ public class YarnConfiguration extends Configuration {
public static final String EXCLUSIVE_ENFORCED_PARTITIONS = NODE_LABELS_PREFIX
+ EXCLUSIVE_ENFORCED_PARTITIONS_SUFFIX;
@Private
public static Set<String> getExclusiveEnforcedPartitions(
Configuration conf) {
Set<String> exclusiveEnforcedPartitions = new HashSet<>();
String[] configuredPartitions = conf.getStrings(
EXCLUSIVE_ENFORCED_PARTITIONS);
if (configuredPartitions != null) {
for (String partition : configuredPartitions) {
exclusiveEnforcedPartitions.add(partition);
}
}
return exclusiveEnforcedPartitions;
}
public static final String MAX_CLUSTER_LEVEL_APPLICATION_PRIORITY =
YARN_PREFIX + "cluster.max-application-priority";

View File

@ -119,6 +119,7 @@ final class DefaultAMSProcessor implements ApplicationMasterServiceProcessor {
private ResourceProfilesManager resourceProfilesManager;
private boolean timelineServiceV2Enabled;
private boolean nodelabelsEnabled;
private Set<String> exclusiveEnforcedPartitions;
@Override
public void init(ApplicationMasterServiceContext amsContext,
@ -129,6 +130,8 @@ final class DefaultAMSProcessor implements ApplicationMasterServiceProcessor {
timelineServiceV2Enabled(rmContext.getYarnConfiguration());
this.nodelabelsEnabled = YarnConfiguration
.areNodeLabelsEnabled(rmContext.getYarnConfiguration());
this.exclusiveEnforcedPartitions = YarnConfiguration
.getExclusiveEnforcedPartitions(rmContext.getYarnConfiguration());
}
@Override
@ -239,8 +242,7 @@ final class DefaultAMSProcessor implements ApplicationMasterServiceProcessor {
}
if (ResourceRequest.ANY.equals(req.getResourceName())) {
SchedulerUtils.enforcePartitionExclusivity(req,
getRmContext().getExclusiveEnforcedPartitions(),
asc.getNodeLabelExpression());
exclusiveEnforcedPartitions, asc.getNodeLabelExpression());
}
}

View File

@ -128,7 +128,8 @@ public class RMAppManager implements EventHandler<RMAppManagerEvent>,
timelineServiceV2Enabled(conf);
this.nodeLabelsEnabled = YarnConfiguration
.areNodeLabelsEnabled(rmContext.getYarnConfiguration());
this.exclusiveEnforcedPartitions = context.getExclusiveEnforcedPartitions();
this.exclusiveEnforcedPartitions = YarnConfiguration
.getExclusiveEnforcedPartitions(rmContext.getYarnConfiguration());
}
/**

View File

@ -18,7 +18,6 @@
package org.apache.hadoop.yarn.server.resourcemanager;
import java.util.Set;
import java.util.concurrent.ConcurrentMap;
import org.apache.hadoop.conf.Configuration;
@ -204,7 +203,4 @@ public interface RMContext extends ApplicationMasterServiceContext {
long getTokenSequenceNo();
void incrTokenSequenceNo();
Set<String> getExclusiveEnforcedPartitions();
}

View File

@ -20,8 +20,6 @@ package org.apache.hadoop.yarn.server.resourcemanager;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ConcurrentMap;
import org.slf4j.Logger;
@ -34,7 +32,6 @@ import org.apache.hadoop.yarn.LocalConfigurationProvider;
import org.apache.hadoop.yarn.api.records.ApplicationId;
import org.apache.hadoop.yarn.api.records.NodeId;
import org.apache.hadoop.yarn.conf.ConfigurationProvider;
import org.apache.hadoop.yarn.conf.YarnConfiguration;
import org.apache.hadoop.yarn.event.Dispatcher;
import org.apache.hadoop.yarn.nodelabels.NodeAttributesManager;
import org.apache.hadoop.yarn.proto.YarnServerCommonServiceProtos.SystemCredentialsForAppsProto;
@ -681,20 +678,4 @@ public class RMContextImpl implements RMContext {
public void incrTokenSequenceNo() {
this.activeServiceContext.incrTokenSequenceNo();
}
public Set<String> getExclusiveEnforcedPartitions() {
Set<String> exclusiveEnforcedPartitions = new HashSet<>();
Configuration conf = getYarnConfiguration();
if (conf == null) {
return new HashSet<>();
}
String[] configuredPartitions = conf.getStrings(
YarnConfiguration.EXCLUSIVE_ENFORCED_PARTITIONS);
if (configuredPartitions != null) {
for (String partition : configuredPartitions) {
exclusiveEnforcedPartitions.add(partition);
}
}
return exclusiveEnforcedPartitions;
}
}