diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeStatusUpdaterImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeStatusUpdaterImpl.java index 98e2e87cc99..57f19fb4dc6 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeStatusUpdaterImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeStatusUpdaterImpl.java @@ -519,7 +519,12 @@ private OpportunisticContainersStatus getOpportunisticContainersStatus() { private ResourceUtilization getContainersUtilization() { ContainersMonitor containersMonitor = this.context.getContainerManager().getContainersMonitor(); - return containersMonitor.getContainersUtilization(); + ResourceUtilization utilization = containersMonitor + .getContainersUtilization(); + metrics.setContainerUsedMemGB(utilization.getPhysicalMemory()); + metrics.setContainerUsedVMemGB(utilization.getVirtualMemory()); + metrics.setContainerCpuUtilization(utilization.getCPU()); + return utilization; } /** @@ -529,7 +534,11 @@ private ResourceUtilization getContainersUtilization() { private ResourceUtilization getNodeUtilization() { NodeResourceMonitorImpl nodeResourceMonitor = (NodeResourceMonitorImpl) this.context.getNodeResourceMonitor(); - return nodeResourceMonitor.getUtilization(); + ResourceUtilization utilization = nodeResourceMonitor.getUtilization(); + metrics.setNodeUsedMemGB(utilization.getPhysicalMemory()); + metrics.setNodeUsedVMemGB(utilization.getVirtualMemory()); + metrics.setNodeCpuUtilization(utilization.getCPU()); + return utilization; } /* Get the containers whose resource has been increased since last diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/metrics/NodeManagerMetrics.java b/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 a59bb5c6098..f0abfd4ff75 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/metrics/NodeManagerMetrics.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/metrics/NodeManagerMetrics.java @@ -24,6 +24,7 @@ import org.apache.hadoop.metrics2.lib.MutableCounterInt; import org.apache.hadoop.metrics2.lib.MutableGaugeInt; import org.apache.hadoop.metrics2.lib.MutableGaugeLong; +import org.apache.hadoop.metrics2.lib.MutableGaugeFloat; import org.apache.hadoop.metrics2.lib.MutableRate; import org.apache.hadoop.metrics2.source.JvmMetrics; import org.apache.hadoop.yarn.api.records.Resource; @@ -77,6 +78,18 @@ MutableGaugeLong publicBytesDeleted; @Metric("# of bytes deleted from the private local cache") MutableGaugeLong privateBytesDeleted; + @Metric("Current used physical memory by all containers in GB") + MutableGaugeInt containerUsedMemGB; + @Metric("Current used virtual memory by all containers in GB") + MutableGaugeInt containerUsedVMemGB; + @Metric("Aggregated CPU utilization of all containers") + MutableGaugeFloat containerCpuUtilization; + @Metric("Current used memory by this node in GB") + MutableGaugeInt nodeUsedMemGB; + @Metric("Current used virtual memory by this node in GB") + MutableGaugeInt nodeUsedVMemGB; + @Metric("Current CPU utilization") + MutableGaugeFloat nodeCpuUtilization; // CHECKSTYLE:ON:VisibilityModifier @@ -316,4 +329,52 @@ public long getPublicBytesDeleted() { public long getPrivateBytesDeleted() { return this.privateBytesDeleted.value(); } + + public void setContainerUsedMemGB(long usedMem) { + this.containerUsedMemGB.set((int)Math.floor(usedMem/1024d)); + } + + public int getContainerUsedMemGB() { + return this.containerUsedMemGB.value(); + } + + public void setContainerUsedVMemGB(long usedVMem) { + this.containerUsedVMemGB.set((int)Math.floor(usedVMem/1024d)); + } + + public int getContainerUsedVMemGB() { + return this.containerUsedVMemGB.value(); + } + + public void setContainerCpuUtilization(float cpuUtilization) { + this.containerCpuUtilization.set(cpuUtilization); + } + + public float getContainerCpuUtilization() { + return this.containerCpuUtilization.value(); + } + + public void setNodeUsedMemGB(long totalUsedMemGB) { + this.nodeUsedMemGB.set((int)Math.floor(totalUsedMemGB/1024d)); + } + + public int getNodeUsedMemGB() { + return nodeUsedMemGB.value(); + } + + public void setNodeUsedVMemGB(long totalUsedVMemGB) { + this.nodeUsedVMemGB.set((int)Math.floor(totalUsedVMemGB/1024d)); + } + + public int getNodeUsedVMemGB() { + return nodeUsedVMemGB.value(); + } + + public float getNodeCpuUtilization() { + return nodeCpuUtilization.value(); + } + + public void setNodeCpuUtilization(float cpuUtilization) { + this.nodeCpuUtilization.set(cpuUtilization); + } }