YARN-5068. Expose scheduler queue to application master. (Harish Jaiprakash via rohithsharmaks)

This commit is contained in:
Rohith Sharma K S 2016-05-16 15:25:15 +05:30
parent 413f3dabbd
commit a37b3694ea
3 changed files with 28 additions and 2 deletions

View File

@ -170,6 +170,13 @@ public enum Environment {
*/ */
LD_LIBRARY_PATH("LD_LIBRARY_PATH"), LD_LIBRARY_PATH("LD_LIBRARY_PATH"),
/**
* $YARN_RESOURCEMANAGER_APPLICATION_QUEUE
* The queue into which the app was submitted/launched.
*/
YARN_RESOURCEMANAGER_APPLICATION_QUEUE(
"YARN_RESOURCEMANAGER_APPLICATION_QUEUE"),
/** /**
* $HADOOP_CONF_DIR * $HADOOP_CONF_DIR
* Final, non-modifiable. * Final, non-modifiable.

View File

@ -51,6 +51,7 @@
import org.apache.hadoop.yarn.api.records.ContainerLaunchContext; import org.apache.hadoop.yarn.api.records.ContainerLaunchContext;
import org.apache.hadoop.yarn.api.records.NodeId; import org.apache.hadoop.yarn.api.records.NodeId;
import org.apache.hadoop.yarn.client.NMProxy; import org.apache.hadoop.yarn.client.NMProxy;
import org.apache.hadoop.yarn.conf.YarnConfiguration;
import org.apache.hadoop.yarn.event.EventHandler; import org.apache.hadoop.yarn.event.EventHandler;
import org.apache.hadoop.yarn.exceptions.YarnException; import org.apache.hadoop.yarn.exceptions.YarnException;
import org.apache.hadoop.yarn.ipc.YarnRPC; import org.apache.hadoop.yarn.ipc.YarnRPC;
@ -191,12 +192,25 @@ private ContainerLaunchContext createAMContainerLaunchContext(
+ StringUtils.arrayToString(container.getCommands().toArray( + StringUtils.arrayToString(container.getCommands().toArray(
new String[0]))); new String[0])));
// Populate the current queue name in the environment variable.
setupQueueNameEnv(container, applicationMasterContext);
// Finalize the container // Finalize the container
setupTokens(container, containerID); setupTokens(container, containerID);
return container; return container;
} }
private void setupQueueNameEnv(ContainerLaunchContext container,
ApplicationSubmissionContext applicationMasterContext) {
String queueName = applicationMasterContext.getQueue();
if (queueName == null) {
queueName = YarnConfiguration.DEFAULT_QUEUE_NAME;
}
container.getEnvironment().put(ApplicationConstants.Environment
.YARN_RESOURCEMANAGER_APPLICATION_QUEUE.key(), queueName);
}
@Private @Private
@VisibleForTesting @VisibleForTesting
protected void setupTokens( protected void setupTokens(

View File

@ -92,6 +92,7 @@ private static final class MyContainerManagerImpl implements
String nmHostAtContainerManager = null; String nmHostAtContainerManager = null;
long submitTimeAtContainerManager; long submitTimeAtContainerManager;
int maxAppAttempts; int maxAppAttempts;
private String queueName;
@Override @Override
public StartContainersResponse public StartContainersResponse
@ -121,6 +122,8 @@ private static final class MyContainerManagerImpl implements
Long.parseLong(env.get(ApplicationConstants.APP_SUBMIT_TIME_ENV)); Long.parseLong(env.get(ApplicationConstants.APP_SUBMIT_TIME_ENV));
maxAppAttempts = maxAppAttempts =
Integer.parseInt(env.get(ApplicationConstants.MAX_APP_ATTEMPTS_ENV)); Integer.parseInt(env.get(ApplicationConstants.MAX_APP_ATTEMPTS_ENV));
queueName = env.get(ApplicationConstants.Environment
.YARN_RESOURCEMANAGER_APPLICATION_QUEUE.key());
return StartContainersResponse.newInstance( return StartContainersResponse.newInstance(
new HashMap<String, ByteBuffer>(), new ArrayList<ContainerId>(), new HashMap<String, ByteBuffer>(), new ArrayList<ContainerId>(),
new HashMap<ContainerId, SerializedException>()); new HashMap<ContainerId, SerializedException>());
@ -183,6 +186,8 @@ public void testAMLaunchAndCleanup() throws Exception {
containerManager.nmHostAtContainerManager); containerManager.nmHostAtContainerManager);
Assert.assertEquals(YarnConfiguration.DEFAULT_RM_AM_MAX_ATTEMPTS, Assert.assertEquals(YarnConfiguration.DEFAULT_RM_AM_MAX_ATTEMPTS,
containerManager.maxAppAttempts); containerManager.maxAppAttempts);
Assert.assertEquals(YarnConfiguration.DEFAULT_QUEUE_NAME,
containerManager.queueName);
MockAM am = new MockAM(rm.getRMContext(), rm MockAM am = new MockAM(rm.getRMContext(), rm
.getApplicationMasterService(), appAttemptId); .getApplicationMasterService(), appAttemptId);