YARN-2355. MAX_APP_ATTEMPTS_ENV may no longer be a useful env var for a container (Darrell Taylor via aw)
This commit is contained in:
parent
4d8fb8c19c
commit
d6e3164d4a
@ -48,6 +48,9 @@ Trunk - Unreleased
|
||||
YARN-2428. LCE default banned user list should have yarn (Varun
|
||||
Saxena via aw)
|
||||
|
||||
YARN-2355. MAX_APP_ATTEMPTS_ENV may no longer be a useful env var
|
||||
for a container (Darrell Taylor via aw)
|
||||
|
||||
Release 2.8.0 - UNRELEASED
|
||||
|
||||
INCOMPATIBLE CHANGES
|
||||
|
@ -28,13 +28,13 @@
|
||||
/**
|
||||
* This is the API for the applications comprising of constants that YARN sets
|
||||
* up for the applications and the containers.
|
||||
*
|
||||
*
|
||||
* TODO: Investigate the semantics and security of each cross-boundary refs.
|
||||
*/
|
||||
@Public
|
||||
@Evolving
|
||||
public interface ApplicationConstants {
|
||||
|
||||
|
||||
/**
|
||||
* The environment variable for APP_SUBMIT_TIME. Set in AppMaster environment
|
||||
* only
|
||||
@ -48,11 +48,11 @@ public interface ApplicationConstants {
|
||||
UserGroupInformation.HADOOP_TOKEN_FILE_LOCATION;
|
||||
|
||||
/**
|
||||
* The environmental variable for APPLICATION_WEB_PROXY_BASE. Set in
|
||||
* The environmental variable for APPLICATION_WEB_PROXY_BASE. Set in
|
||||
* ApplicationMaster's environment only. This states that for all non-relative
|
||||
* web URLs in the app masters web UI what base should they have.
|
||||
*/
|
||||
public static final String APPLICATION_WEB_PROXY_BASE_ENV =
|
||||
public static final String APPLICATION_WEB_PROXY_BASE_ENV =
|
||||
"APPLICATION_WEB_PROXY_BASE";
|
||||
|
||||
/**
|
||||
@ -98,16 +98,10 @@ public interface ApplicationConstants {
|
||||
|
||||
public static final String STDOUT = "stdout";
|
||||
|
||||
/**
|
||||
* The environment variable for MAX_APP_ATTEMPTS. Set in AppMaster environment
|
||||
* only
|
||||
*/
|
||||
public static final String MAX_APP_ATTEMPTS_ENV = "MAX_APP_ATTEMPTS";
|
||||
|
||||
/**
|
||||
* Environment for Applications.
|
||||
*
|
||||
* Some of the environment variables for applications are <em>final</em>
|
||||
*
|
||||
* Some of the environment variables for applications are <em>final</em>
|
||||
* i.e. they cannot be modified by the applications.
|
||||
*/
|
||||
public enum Environment {
|
||||
@ -116,76 +110,76 @@ public enum Environment {
|
||||
* Final, non-modifiable.
|
||||
*/
|
||||
USER("USER"),
|
||||
|
||||
|
||||
/**
|
||||
* $LOGNAME
|
||||
* Final, non-modifiable.
|
||||
*/
|
||||
LOGNAME("LOGNAME"),
|
||||
|
||||
|
||||
/**
|
||||
* $HOME
|
||||
* Final, non-modifiable.
|
||||
*/
|
||||
HOME("HOME"),
|
||||
|
||||
|
||||
/**
|
||||
* $PWD
|
||||
* Final, non-modifiable.
|
||||
*/
|
||||
PWD("PWD"),
|
||||
|
||||
|
||||
/**
|
||||
* $PATH
|
||||
*/
|
||||
PATH("PATH"),
|
||||
|
||||
|
||||
/**
|
||||
* $SHELL
|
||||
*/
|
||||
SHELL("SHELL"),
|
||||
|
||||
|
||||
/**
|
||||
* $JAVA_HOME
|
||||
*/
|
||||
JAVA_HOME("JAVA_HOME"),
|
||||
|
||||
|
||||
/**
|
||||
* $CLASSPATH
|
||||
*/
|
||||
CLASSPATH("CLASSPATH"),
|
||||
|
||||
|
||||
/**
|
||||
* $APP_CLASSPATH
|
||||
*/
|
||||
APP_CLASSPATH("APP_CLASSPATH"),
|
||||
|
||||
|
||||
/**
|
||||
* $LD_LIBRARY_PATH
|
||||
*/
|
||||
LD_LIBRARY_PATH("LD_LIBRARY_PATH"),
|
||||
|
||||
|
||||
/**
|
||||
* $HADOOP_CONF_DIR
|
||||
* Final, non-modifiable.
|
||||
*/
|
||||
HADOOP_CONF_DIR("HADOOP_CONF_DIR"),
|
||||
|
||||
|
||||
/**
|
||||
* $HADOOP_COMMON_HOME
|
||||
*/
|
||||
HADOOP_COMMON_HOME("HADOOP_COMMON_HOME"),
|
||||
|
||||
|
||||
/**
|
||||
* $HADOOP_HDFS_HOME
|
||||
*/
|
||||
HADOOP_HDFS_HOME("HADOOP_HDFS_HOME"),
|
||||
|
||||
|
||||
/**
|
||||
* $MALLOC_ARENA_MAX
|
||||
*/
|
||||
MALLOC_ARENA_MAX("MALLOC_ARENA_MAX"),
|
||||
|
||||
|
||||
/**
|
||||
* $HADOOP_YARN_HOME
|
||||
*/
|
||||
@ -240,11 +234,11 @@ public enum Environment {
|
||||
private Environment(String variable) {
|
||||
this.variable = variable;
|
||||
}
|
||||
|
||||
|
||||
public String key() {
|
||||
return variable;
|
||||
}
|
||||
|
||||
|
||||
public String toString() {
|
||||
return variable;
|
||||
}
|
||||
|
@ -79,10 +79,10 @@ public class AMLauncher implements Runnable {
|
||||
private final AMLauncherEventType eventType;
|
||||
private final RMContext rmContext;
|
||||
private final Container masterContainer;
|
||||
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
private final EventHandler handler;
|
||||
|
||||
|
||||
public AMLauncher(RMContext rmContext, RMAppAttempt application,
|
||||
AMLauncherEventType eventType, Configuration conf) {
|
||||
this.application = application;
|
||||
@ -92,20 +92,20 @@ public AMLauncher(RMContext rmContext, RMAppAttempt application,
|
||||
this.handler = rmContext.getDispatcher().getEventHandler();
|
||||
this.masterContainer = application.getMasterContainer();
|
||||
}
|
||||
|
||||
|
||||
private void connect() throws IOException {
|
||||
ContainerId masterContainerID = masterContainer.getId();
|
||||
|
||||
|
||||
containerMgrProxy = getContainerMgrProxy(masterContainerID);
|
||||
}
|
||||
|
||||
|
||||
private void launch() throws IOException, YarnException {
|
||||
connect();
|
||||
ContainerId masterContainerID = masterContainer.getId();
|
||||
ApplicationSubmissionContext applicationContext =
|
||||
application.getSubmissionContext();
|
||||
LOG.info("Setting up container " + masterContainer
|
||||
+ " for AM " + application.getAppAttemptId());
|
||||
+ " for AM " + application.getAppAttemptId());
|
||||
ContainerLaunchContext launchContext =
|
||||
createAMContainerLaunchContext(applicationContext, masterContainerID);
|
||||
|
||||
@ -129,7 +129,7 @@ private void launch() throws IOException, YarnException {
|
||||
+ application.getAppAttemptId());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void cleanup() throws IOException, YarnException {
|
||||
connect();
|
||||
ContainerId containerId = masterContainer.getId();
|
||||
@ -187,17 +187,17 @@ private ContainerLaunchContext createAMContainerLaunchContext(
|
||||
ContainerId containerID) throws IOException {
|
||||
|
||||
// Construct the actual Container
|
||||
ContainerLaunchContext container =
|
||||
ContainerLaunchContext container =
|
||||
applicationMasterContext.getAMContainerSpec();
|
||||
LOG.info("Command to launch container "
|
||||
+ containerID
|
||||
+ " : "
|
||||
+ StringUtils.arrayToString(container.getCommands().toArray(
|
||||
new String[0])));
|
||||
|
||||
|
||||
// Finalize the container
|
||||
setupTokens(container, containerID);
|
||||
|
||||
|
||||
return container;
|
||||
}
|
||||
|
||||
@ -209,7 +209,7 @@ protected void setupTokens(
|
||||
Map<String, String> environment = container.getEnvironment();
|
||||
environment.put(ApplicationConstants.APPLICATION_WEB_PROXY_BASE_ENV,
|
||||
application.getWebProxyBase());
|
||||
// Set AppSubmitTime and MaxAppAttempts to be consumable by the AM.
|
||||
// Set AppSubmitTime to be consumable by the AM.
|
||||
ApplicationId applicationId =
|
||||
application.getAppAttemptId().getApplicationId();
|
||||
environment.put(
|
||||
@ -217,9 +217,6 @@ protected void setupTokens(
|
||||
String.valueOf(rmContext.getRMApps()
|
||||
.get(applicationId)
|
||||
.getSubmitTime()));
|
||||
environment.put(ApplicationConstants.MAX_APP_ATTEMPTS_ENV,
|
||||
String.valueOf(rmContext.getRMApps().get(
|
||||
applicationId).getMaxAppAttempts()));
|
||||
|
||||
Credentials credentials = new Credentials();
|
||||
DataInputByteBuffer dibb = new DataInputByteBuffer();
|
||||
@ -249,7 +246,7 @@ protected Token<AMRMTokenIdentifier> createAndSetAMRMToken() {
|
||||
((RMAppAttemptImpl)application).setAMRMToken(amrmToken);
|
||||
return amrmToken;
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void run() {
|
||||
switch (eventType) {
|
||||
@ -279,7 +276,7 @@ public void run() {
|
||||
sb.append(" is not handled by this NodeManager");
|
||||
if (!e.getMessage().contains(sb.toString())) {
|
||||
// Ignoring if container is already killed by Node Manager.
|
||||
LOG.info("Error cleaning master ", e);
|
||||
LOG.info("Error cleaning master ", e);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -107,8 +107,7 @@ private static final class MyContainerManagerImpl implements
|
||||
nmHostAtContainerManager = tokenId.getNmHostAddress();
|
||||
submitTimeAtContainerManager =
|
||||
Long.parseLong(env.get(ApplicationConstants.APP_SUBMIT_TIME_ENV));
|
||||
maxAppAttempts =
|
||||
Integer.parseInt(env.get(ApplicationConstants.MAX_APP_ATTEMPTS_ENV));
|
||||
maxAppAttempts = YarnConfiguration.DEFAULT_RM_AM_MAX_ATTEMPTS;
|
||||
return StartContainersResponse.newInstance(
|
||||
new HashMap<String, ByteBuffer>(), new ArrayList<ContainerId>(),
|
||||
new HashMap<ContainerId, SerializedException>());
|
||||
@ -184,8 +183,8 @@ public void testAMLaunchAndCleanup() throws Exception {
|
||||
am.waitForState(RMAppAttemptState.FINISHED);
|
||||
rm.stop();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
@Test(timeout = 100000)
|
||||
public void testallocateBeforeAMRegistration() throws Exception {
|
||||
|
Loading…
Reference in New Issue
Block a user