YARN-7386. Duplicate Strings in various places in Yarn memory (misha@cloudera.com via rkanter)

This commit is contained in:
Robert Kanter 2017-11-09 12:07:46 -08:00
parent ba8136615a
commit a2c150a736
4 changed files with 19 additions and 9 deletions

View File

@ -27,6 +27,7 @@
import org.apache.hadoop.classification.InterfaceAudience.Private; import org.apache.hadoop.classification.InterfaceAudience.Private;
import org.apache.hadoop.classification.InterfaceStability.Unstable; import org.apache.hadoop.classification.InterfaceStability.Unstable;
import org.apache.hadoop.util.StringInterner;
import org.apache.hadoop.yarn.api.records.ApplicationAccessType; import org.apache.hadoop.yarn.api.records.ApplicationAccessType;
import org.apache.hadoop.yarn.api.records.ContainerLaunchContext; import org.apache.hadoop.yarn.api.records.ContainerLaunchContext;
import org.apache.hadoop.yarn.api.records.ContainerRetryContext; import org.apache.hadoop.yarn.api.records.ContainerRetryContext;
@ -392,7 +393,8 @@ private void initEnv() {
this.environment = new HashMap<String, String>(); this.environment = new HashMap<String, String>();
for (StringStringMapProto c : list) { for (StringStringMapProto c : list) {
this.environment.put(c.getKey(), c.getValue()); this.environment.put(StringInterner.weakIntern(c.getKey()),
StringInterner.weakIntern(c.getValue()));
} }
} }
@ -402,7 +404,10 @@ public void setEnvironment(final Map<String, String> env) {
return; return;
initEnv(); initEnv();
this.environment.clear(); this.environment.clear();
this.environment.putAll(env); for (Map.Entry<String, String> e : env.entrySet()) {
this.environment.put(StringInterner.weakIntern(e.getKey()),
StringInterner.weakIntern(e.getValue()));
}
} }
private void addEnvToProto() { private void addEnvToProto() {
@ -464,7 +469,7 @@ private void initApplicationACLs() {
for (ApplicationACLMapProto aclProto : list) { for (ApplicationACLMapProto aclProto : list) {
this.applicationACLS.put(ProtoUtils.convertFromProtoFormat(aclProto this.applicationACLS.put(ProtoUtils.convertFromProtoFormat(aclProto
.getAccessType()), aclProto.getAcl()); .getAccessType()), StringInterner.weakIntern(aclProto.getAcl()));
} }
} }
@ -513,7 +518,10 @@ public void setApplicationACLs(
return; return;
initApplicationACLs(); initApplicationACLs();
this.applicationACLS.clear(); this.applicationACLS.clear();
this.applicationACLS.putAll(appACLs); for (Map.Entry<ApplicationAccessType, String> e : appACLs.entrySet()) {
this.applicationACLS.put(e.getKey(),
StringInterner.weakIntern(e.getValue()));
}
} }
public ContainerRetryContext getContainerRetryContext() { public ContainerRetryContext getContainerRetryContext() {

View File

@ -181,7 +181,7 @@ public void setNodeHttpAddress(String nodeHttpAddress) {
builder.clearNodeHttpAddress(); builder.clearNodeHttpAddress();
return; return;
} }
builder.setNodeHttpAddress(nodeHttpAddress); builder.setNodeHttpAddress(nodeHttpAddress.intern());
} }
@Override @Override

View File

@ -46,6 +46,7 @@
import org.apache.hadoop.ipc.CallerContext; import org.apache.hadoop.ipc.CallerContext;
import org.apache.hadoop.security.UserGroupInformation; import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.security.token.Token; import org.apache.hadoop.security.token.Token;
import org.apache.hadoop.util.StringInterner;
import org.apache.hadoop.yarn.api.records.ApplicationAttemptId; import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
import org.apache.hadoop.yarn.api.records.ApplicationId; import org.apache.hadoop.yarn.api.records.ApplicationId;
import org.apache.hadoop.yarn.api.records.ApplicationReport; import org.apache.hadoop.yarn.api.records.ApplicationReport;
@ -425,12 +426,12 @@ public RMAppImpl(ApplicationId applicationId, RMContext rmContext,
this.systemClock = SystemClock.getInstance(); this.systemClock = SystemClock.getInstance();
this.applicationId = applicationId; this.applicationId = applicationId;
this.name = name; this.name = StringInterner.weakIntern(name);
this.rmContext = rmContext; this.rmContext = rmContext;
this.dispatcher = rmContext.getDispatcher(); this.dispatcher = rmContext.getDispatcher();
this.handler = dispatcher.getEventHandler(); this.handler = dispatcher.getEventHandler();
this.conf = config; this.conf = config;
this.user = user; this.user = StringInterner.weakIntern(user);
this.queue = queue; this.queue = queue;
this.submissionContext = submissionContext; this.submissionContext = submissionContext;
this.scheduler = scheduler; this.scheduler = scheduler;
@ -441,7 +442,7 @@ public RMAppImpl(ApplicationId applicationId, RMContext rmContext,
} else { } else {
this.startTime = startTime; this.startTime = startTime;
} }
this.applicationType = applicationType; this.applicationType = StringInterner.weakIntern(applicationType);
this.applicationTags = applicationTags; this.applicationTags = applicationTags;
this.amReqs = amReqs; this.amReqs = amReqs;
if (submissionContext.getPriority() != null) { if (submissionContext.getPriority() != null) {

View File

@ -44,6 +44,7 @@
import org.apache.hadoop.security.Credentials; import org.apache.hadoop.security.Credentials;
import org.apache.hadoop.security.UserGroupInformation; import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.security.token.Token; import org.apache.hadoop.security.token.Token;
import org.apache.hadoop.util.StringInterner;
import org.apache.hadoop.yarn.api.records.ApplicationAttemptId; import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
import org.apache.hadoop.yarn.api.records.ApplicationAttemptReport; import org.apache.hadoop.yarn.api.records.ApplicationAttemptReport;
import org.apache.hadoop.yarn.api.records.ApplicationId; import org.apache.hadoop.yarn.api.records.ApplicationId;
@ -1614,7 +1615,7 @@ public void transition(RMAppAttemptImpl appAttempt,
ClusterMetrics.getMetrics().addAMRegisterDelay(delay); ClusterMetrics.getMetrics().addAMRegisterDelay(delay);
RMAppAttemptRegistrationEvent registrationEvent RMAppAttemptRegistrationEvent registrationEvent
= (RMAppAttemptRegistrationEvent) event; = (RMAppAttemptRegistrationEvent) event;
appAttempt.host = registrationEvent.getHost(); appAttempt.host = StringInterner.weakIntern(registrationEvent.getHost());
appAttempt.rpcPort = registrationEvent.getRpcport(); appAttempt.rpcPort = registrationEvent.getRpcport();
appAttempt.originalTrackingUrl = appAttempt.originalTrackingUrl =
sanitizeTrackingUrl(registrationEvent.getTrackingurl()); sanitizeTrackingUrl(registrationEvent.getTrackingurl());