YARN-9508. YarnConfiguration areNodeLabel enabled is costly in allocation flow. Contributed by Bilwa S T.

(cherry picked from commit 570fa2da20)
This commit is contained in:
bibinchundatt 2019-05-15 13:30:09 +05:30
parent 26eb9f52fb
commit 71f5bfb822
6 changed files with 25 additions and 16 deletions

View File

@ -116,6 +116,7 @@ final class DefaultAMSProcessor implements ApplicationMasterServiceProcessor {
private RMContext rmContext; private RMContext rmContext;
private ResourceProfilesManager resourceProfilesManager; private ResourceProfilesManager resourceProfilesManager;
private boolean timelineServiceV2Enabled; private boolean timelineServiceV2Enabled;
private boolean nodelabelsEnabled;
@Override @Override
public void init(ApplicationMasterServiceContext amsContext, public void init(ApplicationMasterServiceContext amsContext,
@ -124,6 +125,8 @@ final class DefaultAMSProcessor implements ApplicationMasterServiceProcessor {
this.resourceProfilesManager = rmContext.getResourceProfilesManager(); this.resourceProfilesManager = rmContext.getResourceProfilesManager();
this.timelineServiceV2Enabled = YarnConfiguration. this.timelineServiceV2Enabled = YarnConfiguration.
timelineServiceV2Enabled(rmContext.getYarnConfiguration()); timelineServiceV2Enabled(rmContext.getYarnConfiguration());
this.nodelabelsEnabled = YarnConfiguration
.areNodeLabelsEnabled(rmContext.getYarnConfiguration());
} }
@Override @Override
@ -241,7 +244,7 @@ final class DefaultAMSProcessor implements ApplicationMasterServiceProcessor {
try { try {
RMServerUtils.normalizeAndValidateRequests(ask, RMServerUtils.normalizeAndValidateRequests(ask,
maximumCapacity, app.getQueue(), maximumCapacity, app.getQueue(),
getScheduler(), getRmContext()); getScheduler(), getRmContext(), nodelabelsEnabled);
} catch (InvalidResourceRequestException e) { } catch (InvalidResourceRequestException e) {
RMAppAttempt rmAppAttempt = app.getRMAppAttempt(appAttemptId); RMAppAttempt rmAppAttempt = app.getRMAppAttempt(appAttemptId);
handleInvalidResourceException(e, rmAppAttempt); handleInvalidResourceException(e, rmAppAttempt);

View File

@ -96,6 +96,7 @@ public class RMAppManager implements EventHandler<RMAppManagerEvent>,
private Configuration conf; private Configuration conf;
private YarnAuthorizationProvider authorizer; private YarnAuthorizationProvider authorizer;
private boolean timelineServiceV2Enabled; private boolean timelineServiceV2Enabled;
private boolean nodeLabelsEnabled;
public RMAppManager(RMContext context, public RMAppManager(RMContext context,
YarnScheduler scheduler, ApplicationMasterService masterService, YarnScheduler scheduler, ApplicationMasterService masterService,
@ -118,6 +119,8 @@ public class RMAppManager implements EventHandler<RMAppManagerEvent>,
this.authorizer = YarnAuthorizationProvider.getInstance(conf); this.authorizer = YarnAuthorizationProvider.getInstance(conf);
this.timelineServiceV2Enabled = YarnConfiguration. this.timelineServiceV2Enabled = YarnConfiguration.
timelineServiceV2Enabled(conf); timelineServiceV2Enabled(conf);
this.nodeLabelsEnabled = YarnConfiguration
.areNodeLabelsEnabled(rmContext.getYarnConfiguration());
} }
/** /**
@ -575,7 +578,7 @@ public class RMAppManager implements EventHandler<RMAppManagerEvent>,
Resource maxAllocation = scheduler.getMaximumResourceCapability(queue); Resource maxAllocation = scheduler.getMaximumResourceCapability(queue);
for (ResourceRequest amReq : amReqs) { for (ResourceRequest amReq : amReqs) {
SchedulerUtils.normalizeAndValidateRequest(amReq, maxAllocation, SchedulerUtils.normalizeAndValidateRequest(amReq, maxAllocation,
queue, scheduler, isRecovery, rmContext, null); queue, isRecovery, rmContext, null, nodeLabelsEnabled);
amReq.setCapability(scheduler.getNormalizedResource( amReq.setCapability(scheduler.getNormalizedResource(
amReq.getCapability(), maxAllocation)); amReq.getCapability(), maxAllocation));

View File

@ -244,7 +244,8 @@ public class RMServerUtils {
*/ */
public static void normalizeAndValidateRequests(List<ResourceRequest> ask, public static void normalizeAndValidateRequests(List<ResourceRequest> ask,
Resource maximumAllocation, String queueName, YarnScheduler scheduler, Resource maximumAllocation, String queueName, YarnScheduler scheduler,
RMContext rmContext) throws InvalidResourceRequestException { RMContext rmContext, boolean nodeLabelsEnabled)
throws InvalidResourceRequestException {
// Get queue from scheduler // Get queue from scheduler
QueueInfo queueInfo = null; QueueInfo queueInfo = null;
try { try {
@ -256,7 +257,7 @@ public class RMServerUtils {
for (ResourceRequest resReq : ask) { for (ResourceRequest resReq : ask) {
SchedulerUtils.normalizeAndValidateRequest(resReq, maximumAllocation, SchedulerUtils.normalizeAndValidateRequest(resReq, maximumAllocation,
queueName, scheduler, rmContext, queueInfo); queueName, rmContext, queueInfo, nodeLabelsEnabled);
} }
} }

View File

@ -42,7 +42,6 @@ import org.apache.hadoop.yarn.api.records.QueueInfo;
import org.apache.hadoop.yarn.api.records.Resource; import org.apache.hadoop.yarn.api.records.Resource;
import org.apache.hadoop.yarn.api.records.ResourceInformation; import org.apache.hadoop.yarn.api.records.ResourceInformation;
import org.apache.hadoop.yarn.api.records.ResourceRequest; import org.apache.hadoop.yarn.api.records.ResourceRequest;
import org.apache.hadoop.yarn.conf.YarnConfiguration;
import org.apache.hadoop.yarn.exceptions.InvalidLabelResourceRequestException; import org.apache.hadoop.yarn.exceptions.InvalidLabelResourceRequestException;
import org.apache.hadoop.yarn.exceptions.InvalidResourceRequestException; import org.apache.hadoop.yarn.exceptions.InvalidResourceRequestException;
import org.apache.hadoop.yarn.exceptions.InvalidResourceRequestException import org.apache.hadoop.yarn.exceptions.InvalidResourceRequestException
@ -260,12 +259,12 @@ public class SchedulerUtils {
} }
public static void normalizeAndValidateRequest(ResourceRequest resReq, public static void normalizeAndValidateRequest(ResourceRequest resReq,
Resource maximumAllocation, String queueName, YarnScheduler scheduler, Resource maximumAllocation, String queueName, boolean isRecovery,
boolean isRecovery, RMContext rmContext, QueueInfo queueInfo) RMContext rmContext, QueueInfo queueInfo, boolean nodeLabelsEnabled)
throws InvalidResourceRequestException { throws InvalidResourceRequestException {
Configuration conf = rmContext.getYarnConfiguration(); Configuration conf = rmContext.getYarnConfiguration();
// If Node label is not enabled throw exception // If Node label is not enabled throw exception
if (null != conf && !YarnConfiguration.areNodeLabelsEnabled(conf)) { if (null != conf && !nodeLabelsEnabled) {
String labelExp = resReq.getNodeLabelExpression(); String labelExp = resReq.getNodeLabelExpression();
if (!(RMNodeLabelsManager.NO_LABEL.equals(labelExp) if (!(RMNodeLabelsManager.NO_LABEL.equals(labelExp)
|| null == labelExp)) { || null == labelExp)) {
@ -281,7 +280,8 @@ public class SchedulerUtils {
} }
if (null == queueInfo) { if (null == queueInfo) {
try { try {
queueInfo = scheduler.getQueueInfo(queueName, false, false); queueInfo = rmContext.getScheduler().getQueueInfo(queueName, false,
false);
} catch (IOException e) { } catch (IOException e) {
//Queue may not exist since it could be auto-created in case of //Queue may not exist since it could be auto-created in case of
// dynamic queues // dynamic queues
@ -295,11 +295,11 @@ public class SchedulerUtils {
} }
public static void normalizeAndValidateRequest(ResourceRequest resReq, public static void normalizeAndValidateRequest(ResourceRequest resReq,
Resource maximumAllocation, String queueName, YarnScheduler scheduler, Resource maximumAllocation, String queueName, RMContext rmContext,
RMContext rmContext, QueueInfo queueInfo) QueueInfo queueInfo, boolean nodeLabelsEnabled)
throws InvalidResourceRequestException { throws InvalidResourceRequestException {
normalizeAndValidateRequest(resReq, maximumAllocation, queueName, scheduler, normalizeAndValidateRequest(resReq, maximumAllocation, queueName, false,
false, rmContext, queueInfo); rmContext, queueInfo, nodeLabelsEnabled);
} }
/** /**

View File

@ -203,6 +203,7 @@ public class TestAppManager extends AppManagerTestBase{
metricsPublisher = mock(SystemMetricsPublisher.class); metricsPublisher = mock(SystemMetricsPublisher.class);
context.setSystemMetricsPublisher(metricsPublisher); context.setSystemMetricsPublisher(metricsPublisher);
context.setRMApplicationHistoryWriter(writer); context.setRMApplicationHistoryWriter(writer);
((RMContextImpl)context).setYarnConfiguration(new YarnConfiguration());
return context; return context;
} }

View File

@ -1050,7 +1050,8 @@ public class TestSchedulerUtils {
Resource maxAllocation) Resource maxAllocation)
throws InvalidResourceRequestException { throws InvalidResourceRequestException {
SchedulerUtils.normalizeAndValidateRequest(resReq, maxAllocation, queueName, SchedulerUtils.normalizeAndValidateRequest(resReq, maxAllocation, queueName,
scheduler, rmContext, null); rmContext, null, YarnConfiguration
.areNodeLabelsEnabled(rmContext.getYarnConfiguration()));
} }
private static class InvalidResourceRequestExceptionMessageGenerator { private static class InvalidResourceRequestExceptionMessageGenerator {