diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/QueueMetrics.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/QueueMetrics.java index c126338ef0d..e458c477fea 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/QueueMetrics.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/QueueMetrics.java @@ -77,6 +77,10 @@ @Metric("# of active applications") MutableGaugeInt activeApplications; @Metric("App Attempt First Container Allocation Delay") MutableRate appAttemptFirstContainerAllocationDelay; + @Metric("Aggregate # of preempted memory") + MutableCounterLong aggregateMemoryMBPreempted; + @Metric("Aggregate # of preempted vcores") + MutableCounterLong aggregateVcorePreempted; //Metrics updated only for "default" partition @Metric("Allocated memory in MB") MutableGaugeLong allocatedMB; @@ -586,6 +590,23 @@ public void updatePreemptedVcoreSeconds(long vcoreSeconds) { } } + public void updatePreemptedResources(Resource res) { + aggregateMemoryMBPreempted.incr(res.getMemorySize()); + aggregateVcorePreempted.incr(res.getVirtualCores()); + if (parent != null) { + parent.updatePreemptedResources(res); + } + } + + public void updatePreemptedForCustomResources(Resource res) { + if (queueMetricsForCustomResources != null) { + queueMetricsForCustomResources.increaseAggregatedPreempted(res); + } + if (parent != null) { + parent.updatePreemptedForCustomResources(res); + } + } + public void updatePreemptedSecondsForCustomResources(Resource res, long seconds) { if (queueMetricsForCustomResources != null) { diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/QueueMetricsForCustomResources.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/QueueMetricsForCustomResources.java index 34708580274..ddfffc8d13b 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/QueueMetricsForCustomResources.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/QueueMetricsForCustomResources.java @@ -28,6 +28,8 @@ public class QueueMetricsForCustomResources { private final QueueMetricsCustomResource aggregatePreemptedSeconds = new QueueMetricsCustomResource(); + private final QueueMetricsCustomResource aggregatePreempted = + new QueueMetricsCustomResource(); private final QueueMetricsCustomResource allocated = new QueueMetricsCustomResource(); private final QueueMetricsCustomResource available = @@ -82,6 +84,10 @@ public void increaseAggregatedPreemptedSeconds(Resource res, long seconds) { aggregatePreemptedSeconds.increaseWithMultiplier(res, seconds); } + public void increaseAggregatedPreempted(Resource res) { + aggregatePreempted.increase(res); + } + Map getAllocatedValues() { return allocated.getValues(); } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/LeafQueue.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/LeafQueue.java index a178f9e9a0b..4d2b8e7c30b 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/LeafQueue.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/LeafQueue.java @@ -2222,7 +2222,9 @@ private void updateQueuePreemptionMetrics(RMContainer rmc) { / DateUtils.MILLIS_PER_SECOND; metrics.updatePreemptedMemoryMBSeconds(mbSeconds); metrics.updatePreemptedVcoreSeconds(vcSeconds); + metrics.updatePreemptedResources(containerResource); metrics.updatePreemptedSecondsForCustomResources(containerResource, usedSeconds); + metrics.updatePreemptedForCustomResources(containerResource); } }