diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/metrics/NodeManagerMetrics.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/metrics/NodeManagerMetrics.java index 3da21f0..b0562e5 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/metrics/NodeManagerMetrics.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/metrics/NodeManagerMetrics.java @@ -44,6 +44,9 @@ MutableGaugeInt allocatedVCores; @Metric MutableGaugeInt availableVCores; + private int allocatedMB; + private int availableMB; + public static NodeManagerMetrics create() { return create(DefaultMetricsSystem.instance()); } @@ -89,22 +92,27 @@ public void endRunningContainer() { public void allocateContainer(Resource res) { allocatedContainers.incr(); - allocatedGB.incr(res.getMemory() / 1024); - availableGB.decr(res.getMemory() / 1024); + allocatedMB += res.getMemory(); + availableMB -= res.getMemory(); + allocatedGB.set(allocatedMB / 1024); + availableGB.set(availableMB / 1024); allocatedVCores.incr(res.getVirtualCores()); availableVCores.decr(res.getVirtualCores()); } public void releaseContainer(Resource res) { allocatedContainers.decr(); - allocatedGB.decr(res.getMemory() / 1024); - availableGB.incr(res.getMemory() / 1024); + allocatedMB -= res.getMemory(); + availableMB += res.getMemory(); + allocatedGB.set(allocatedMB / 1024); + availableGB.set(availableMB / 1024); allocatedVCores.decr(res.getVirtualCores()); availableVCores.incr(res.getVirtualCores()); } public void addResource(Resource res) { - availableGB.incr(res.getMemory() / 1024); + availableMB += res.getMemory(); + availableGB.set(availableMB / 1024); availableVCores.incr(res.getVirtualCores()); } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/metrics/TestNodeManagerMetrics.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/metrics/TestNodeManagerMetrics.java index a54450d..df3b68e 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/metrics/TestNodeManagerMetrics.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/metrics/TestNodeManagerMetrics.java @@ -25,17 +25,15 @@ import org.junit.Test; public class TestNodeManagerMetrics { - static final int GiB = 1024; // MiB @Test public void testNames() { NodeManagerMetrics metrics = NodeManagerMetrics.create(); Resource total = Records.newRecord(Resource.class); - total.setMemory(8*GiB); + total.setMemory(8*1024); total.setVirtualCores(16); Resource resource = Records.newRecord(Resource.class); - resource.setMemory(1*GiB); - resource.setVirtualCores(2); - + resource.setMemory(512); + resource.setVirtualCores(1); metrics.addResource(total); @@ -60,12 +58,12 @@ metrics.initingContainer(); metrics.runningContainer(); - checkMetrics(5, 1, 1, 1, 1, 1, 2, 2, 6, 4, 12); + checkMetrics(5, 1, 1, 1, 1, 1, 2, 1, 7, 2, 14); } private void checkMetrics(int launched, int completed, int failed, int killed, - int initing, int running, int allocatedGB, - int allocatedContainers, int availableGB, int allocatedVCores, int availableVCores) { + int initing, int running, int allocatedContainers, int allocatedGB, + int availableGB, int allocatedVCores, int availableVCores) { MetricsRecordBuilder rb = getMetrics("NodeManagerMetrics"); assertCounter("ContainersLaunched", launched, rb); assertCounter("ContainersCompleted", completed, rb); @@ -78,6 +76,5 @@ private void checkMetrics(int launched, int completed, int failed, int killed, assertGauge("AllocatedContainers", allocatedContainers, rb); assertGauge("AvailableGB", availableGB, rb); assertGauge("AvailableVCores",availableVCores, rb); - } }