Skip to content

Commit 0ccf4b0

Browse files
committed
YARN-9810. Add queue capacity/maxcapacity percentage metrics. Contributed by Shubham Gupta
1 parent 2e2e540 commit 0ccf4b0

File tree

3 files changed

+63
-0
lines changed

3 files changed

+63
-0
lines changed

hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CSQueueMetrics.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,14 @@ public class CSQueueMetrics extends QueueMetrics {
5555
MutableGaugeLong maxCapacityMB;
5656
@Metric("Maximum CPU in virtual cores")
5757
MutableGaugeInt maxCapacityVCores;
58+
@Metric("Guaranteed capacity in percentage relative to parent")
59+
private MutableGaugeFloat guaranteedCapacity;
60+
@Metric("Guaranteed capacity in percentage relative to total partition")
61+
private MutableGaugeFloat guaranteedAbsoluteCapacity;
62+
@Metric("Maximum capacity in percentage relative to parent")
63+
private MutableGaugeFloat maxCapacity;
64+
@Metric("Maximum capacity in percentage relative to total partition")
65+
private MutableGaugeFloat maxAbsoluteCapacity;
5866

5967
CSQueueMetrics(MetricsSystem ms, String queueName, Queue parent,
6068
boolean enableUserMetrics, Configuration conf) {
@@ -204,4 +212,35 @@ public synchronized QueueMetrics getUserMetrics(String userName) {
204212
return metrics;
205213
}
206214

215+
public float getGuaranteedCapacity() {
216+
return guaranteedCapacity.value();
217+
}
218+
219+
public float getGuaranteedAbsoluteCapacity() {
220+
return guaranteedAbsoluteCapacity.value();
221+
}
222+
223+
public void setGuaranteedCapacities(String partition, float capacity,
224+
float absoluteCapacity) {
225+
if (partition == null || partition.equals(RMNodeLabelsManager.NO_LABEL)) {
226+
guaranteedCapacity.set(capacity);
227+
guaranteedAbsoluteCapacity.set(absoluteCapacity);
228+
}
229+
}
230+
231+
public float getMaxCapacity() {
232+
return maxCapacity.value();
233+
}
234+
235+
public float getMaxAbsoluteCapacity() {
236+
return maxAbsoluteCapacity.value();
237+
}
238+
239+
public void setMaxCapacities(String partition, float capacity,
240+
float absoluteCapacity) {
241+
if (partition == null || partition.equals(RMNodeLabelsManager.NO_LABEL)) {
242+
maxCapacity.set(capacity);
243+
maxAbsoluteCapacity.set(absoluteCapacity);
244+
}
245+
}
207246
}

hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CSQueueUtils.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,5 +336,11 @@ public static void updateConfiguredCapacityMetrics(ResourceCalculator rc,
336336
queue.getMetrics().setMaxCapacityResources(partition, rc.multiplyAndNormalizeDown(
337337
partitionResource, queue.getQueueCapacities().getAbsoluteMaximumCapacity(partition),
338338
queue.getMinimumAllocation()));
339+
queue.getMetrics().setGuaranteedCapacities(partition,
340+
queue.getQueueCapacities().getCapacity(partition),
341+
queue.getQueueCapacities().getAbsoluteCapacity(partition));
342+
queue.getMetrics().setMaxCapacities(partition,
343+
queue.getQueueCapacities().getMaximumCapacity(partition),
344+
queue.getQueueCapacities().getAbsoluteMaximumCapacity(partition));
339345
}
340346
}

hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacityScheduler.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,8 @@ public class TestCapacityScheduler extends CapacitySchedulerTestBase {
195195
private ResourceManager resourceManager = null;
196196
private RMContext mockContext;
197197

198+
private static final double DELTA = 0.000001;
199+
198200
@Before
199201
public void setUp() throws Exception {
200202
resourceManager = new ResourceManager() {
@@ -5502,6 +5504,22 @@ public void testCSQueueMetrics() throws Exception {
55025504
assertEquals(35840, ((CSQueueMetrics)cs.getQueue("b1").getMetrics()).getGuaranteedMB());
55035505
assertEquals(51200, ((CSQueueMetrics)cs.getQueue("a").getMetrics()).getMaxCapacityMB());
55045506
assertEquals(51200, ((CSQueueMetrics)cs.getQueue("b1").getMetrics()).getMaxCapacityMB());
5507+
assertEquals(A_CAPACITY / 100, ((CSQueueMetrics)cs.getQueue("a")
5508+
.getMetrics()).getGuaranteedCapacity(), DELTA);
5509+
assertEquals(A_CAPACITY / 100, ((CSQueueMetrics)cs.getQueue("a")
5510+
.getMetrics()).getGuaranteedAbsoluteCapacity(), DELTA);
5511+
assertEquals(B1_CAPACITY / 100, ((CSQueueMetrics)cs.getQueue("b1")
5512+
.getMetrics()).getGuaranteedCapacity(), DELTA);
5513+
assertEquals((B_CAPACITY / 100) * (B1_CAPACITY / 100), ((CSQueueMetrics)cs
5514+
.getQueue("b1").getMetrics()).getGuaranteedAbsoluteCapacity(), DELTA);
5515+
assertEquals(1, ((CSQueueMetrics)cs.getQueue("a").getMetrics())
5516+
.getMaxCapacity(), DELTA);
5517+
assertEquals(1, ((CSQueueMetrics)cs.getQueue("a").getMetrics())
5518+
.getMaxAbsoluteCapacity(), DELTA);
5519+
assertEquals(1, ((CSQueueMetrics)cs.getQueue("b1").getMetrics())
5520+
.getMaxCapacity(), DELTA);
5521+
assertEquals(1, ((CSQueueMetrics)cs.getQueue("b1").getMetrics())
5522+
.getMaxAbsoluteCapacity(), DELTA);
55055523

55065524
// Add child queue to a, and reinitialize. Metrics should be updated
55075525
conf.setQueues(CapacitySchedulerConfiguration.ROOT + ".a", new String[] {"a1", "a2", "a3"} );

0 commit comments

Comments
 (0)