[48/50] [abbrv] hadoop git commit: YARN-5473. Expose per-application over-allocation info in the Resource Manager. Contributed by Haibo Chen.
http://git-wip-us.apache.org/repos/asf/hadoop/blob/eca4df88/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/records/impl/pb/ApplicationAttemptStateDataPBImpl.java -- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/records/impl/pb/ApplicationAttemptStateDataPBImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/records/impl/pb/ApplicationAttemptStateDataPBImpl.java index ed71ea2..0243443 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/records/impl/pb/ApplicationAttemptStateDataPBImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/records/impl/pb/ApplicationAttemptStateDataPBImpl.java @@ -31,6 +31,7 @@ import org.apache.hadoop.security.Credentials; import org.apache.hadoop.yarn.api.records.ApplicationAttemptId; import org.apache.hadoop.yarn.api.records.Container; import org.apache.hadoop.yarn.api.records.FinalApplicationStatus; +import org.apache.hadoop.yarn.api.records.ResourceInformation; import org.apache.hadoop.yarn.api.records.impl.pb.ApplicationAttemptIdPBImpl; import org.apache.hadoop.yarn.api.records.impl.pb.ContainerPBImpl; import org.apache.hadoop.yarn.api.records.impl.pb.ProtoUtils; @@ -56,8 +57,9 @@ public class ApplicationAttemptStateDataPBImpl extends private Container masterContainer = null; private ByteBuffer appAttemptTokens = null; - private Map resourceSecondsMap; + private Map guaranteedResourceSecondsMap; private Map preemptedResourceSecondsMap; + private Map opportunisticResourceSecondsMap; public ApplicationAttemptStateDataPBImpl() { builder = ApplicationAttemptStateDataProto.newBuilder(); @@ -243,30 +245,72 @@ public class ApplicationAttemptStateDataPBImpl extends } @Override + @Deprecated public long getMemorySeconds() { -ApplicationAttemptStateDataProtoOrBuilder p = viaProto ? proto : builder; -return p.getMemorySeconds(); +return getGuaranteedMemorySeconds(); } @Override + @Deprecated public long getVcoreSeconds() { -ApplicationAttemptStateDataProtoOrBuilder p = viaProto ? proto : builder; -return p.getVcoreSeconds(); +return getGuaranteedVcoreSeconds(); } @Override + @Deprecated public void setMemorySeconds(long memorySeconds) { -maybeInitBuilder(); -builder.setMemorySeconds(memorySeconds); +setGuaranteedMemorySeconds(memorySeconds); } @Override + @Deprecated public void setVcoreSeconds(long vcoreSeconds) { +setGuaranteedVcoreSeconds(vcoreSeconds); + } + + @Override + public long getGuaranteedMemorySeconds() { +ApplicationAttemptStateDataProtoOrBuilder p = viaProto ? proto : builder; +return p.getMemorySeconds(); + } + + @Override + public void setGuaranteedMemorySeconds(long memorySeconds) { +maybeInitBuilder(); +builder.setMemorySeconds(memorySeconds); + } + + @Override + public long getGuaranteedVcoreSeconds() { +ApplicationAttemptStateDataProtoOrBuilder p = viaProto ? proto : builder; +return p.getVcoreSeconds(); + } + + @Override + public void setGuaranteedVcoreSeconds(long vcoreSeconds) { maybeInitBuilder(); builder.setVcoreSeconds(vcoreSeconds); } @Override + public long getOpportunisticMemorySeconds() { +Map tmp = getOpportunisticResourceSecondsMap(); +if (tmp.containsKey(ResourceInformation.MEMORY_MB.getName())) { + return tmp.get(ResourceInformation.MEMORY_MB.getName()); +} +return 0; + } + + @Override + public long getOpportunisticVcoreSeconds() { +Map tmp = getOpportunisticResourceSecondsMap(); +if (tmp.containsKey(ResourceInformation.VCORES.getName())) { + return tmp.get(ResourceInformation.VCORES.getName()); +} +return 0; + } + + @Override public long getPreemptedMemorySeconds() { ApplicationAttemptStateDataProtoOrBuilder p = viaProto ? proto : builder; return p.getPreemptedMemorySeconds(); @@ -410,21 +454,35 @@ public class ApplicationAttemptStateDataPBImpl extends } @Override + @Deprecated public Map getResourceSecondsMap() { -if (this.resourceSecondsMap != null) { - return this.resourceSecondsMap; +return getGuaranteedResourceSecondsMap(); + } + + @Override + @Deprecated + public void setResourceSecondsMap(Map resourceSecondsMap) { +setGuaranteedResourceSecondsMap(resourceSecondsMap); + } + + @Override + public Map getGuaranteedResourceSecondsMap() { +if
[48/50] [abbrv] hadoop git commit: YARN-5473. Expose per-application over-allocation info in the Resource Manager. Contributed by Haibo Chen.
http://git-wip-us.apache.org/repos/asf/hadoop/blob/13d61cc4/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestContainerResourceUsage.java -- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestContainerResourceUsage.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestContainerResourceUsage.java index 3508ab4..ad3413f 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestContainerResourceUsage.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestContainerResourceUsage.java @@ -23,17 +23,12 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; -import java.util.Map; -import org.apache.commons.lang.time.DateUtils; import org.apache.hadoop.security.UserGroupInformation; -import org.apache.hadoop.yarn.api.records.ApplicationAccessType; import org.apache.hadoop.yarn.api.records.ApplicationAttemptId; import org.apache.hadoop.yarn.api.records.Container; import org.apache.hadoop.yarn.api.records.ContainerId; import org.apache.hadoop.yarn.api.records.ContainerState; -import org.apache.hadoop.yarn.api.records.Resource; -import org.apache.hadoop.yarn.api.records.ResourceInformation; import org.apache.hadoop.yarn.api.records.ResourceRequest; import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.server.resourcemanager.recovery.MemoryRMStateStore; @@ -43,6 +38,7 @@ import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppState; import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttempt; import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttemptState; import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.AggregateAppResourceUsage; +import org.apache.hadoop.yarn.server.resourcemanager.rmcontainer.ContainerResourceUsageReport; import org.apache.hadoop.yarn.server.resourcemanager.rmcontainer.RMContainer; import org.apache.hadoop.yarn.server.resourcemanager.rmcontainer.RMContainerState; import org.apache.log4j.Level; @@ -84,13 +80,13 @@ public class TestContainerResourceUsage { RMAppMetrics rmAppMetrics = app0.getRMAppMetrics(); Assert.assertTrue( -"Before app submittion, memory seconds should have been 0 but was " - + rmAppMetrics.getMemorySeconds(), -rmAppMetrics.getMemorySeconds() == 0); +"Before app submission, memory seconds should have been 0 but was " + + rmAppMetrics.getGuaranteedMemorySeconds(), +rmAppMetrics.getGuaranteedMemorySeconds() == 0); Assert.assertTrue( "Before app submission, vcore seconds should have been 0 but was " - + rmAppMetrics.getVcoreSeconds(), -rmAppMetrics.getVcoreSeconds() == 0); + + rmAppMetrics.getGuaranteedVcoreSeconds(), +rmAppMetrics.getGuaranteedVcoreSeconds() == 0); RMAppAttempt attempt0 = app0.getCurrentAppAttempt(); @@ -105,7 +101,8 @@ public class TestContainerResourceUsage { // Allow metrics to accumulate. int sleepInterval = 1000; int cumulativeSleepTime = 0; -while (rmAppMetrics.getMemorySeconds() <= 0 && cumulativeSleepTime < 5000) { +while (rmAppMetrics.getGuaranteedMemorySeconds() <= 0 +&& cumulativeSleepTime < 5000) { Thread.sleep(sleepInterval); cumulativeSleepTime += sleepInterval; } @@ -113,27 +110,35 @@ public class TestContainerResourceUsage { rmAppMetrics = app0.getRMAppMetrics(); Assert.assertTrue( "While app is running, memory seconds should be >0 but is " -+ rmAppMetrics.getMemorySeconds(), -rmAppMetrics.getMemorySeconds() > 0); ++ rmAppMetrics.getGuaranteedMemorySeconds(), +rmAppMetrics.getGuaranteedMemorySeconds() > 0); Assert.assertTrue( "While app is running, vcore seconds should be >0 but is " -+ rmAppMetrics.getVcoreSeconds(), -rmAppMetrics.getVcoreSeconds() > 0); ++ rmAppMetrics.getGuaranteedVcoreSeconds(), +rmAppMetrics.getGuaranteedVcoreSeconds() > 0); MockRM.finishAMAndVerifyAppState(app0, rm, nm, am0); AggregateAppResourceUsage ru = calculateContainerResourceMetrics(rmContainer); rmAppMetrics = app0.getRMAppMetrics(); -Assert.assertEquals("Unexpected MemorySeconds value", -ru.getMemorySeconds(), rmAppMetrics.getMemorySec