浏览代码

YARN-11006. Allow overriding user limit factor and maxAMResourcePercent with AQCv2 templates. Contributed by Benjamin Teke

Szilard Nemeth 3 年之前
父节点
当前提交
7284d23476

+ 1 - 1
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

@@ -1707,12 +1707,12 @@ public class LeafQueue extends AbstractCSQueue {
   @Override
   protected void setDynamicQueueProperties(
       CapacitySchedulerConfiguration configuration) {
-    super.setDynamicQueueProperties(configuration);
     // set to -1, to disable it
     configuration.setUserLimitFactor(getQueuePath(), -1);
     // Set Max AM percentage to a higher value
     configuration.setMaximumApplicationMasterResourcePerQueuePercent(
         getQueuePath(), 1f);
+    super.setDynamicQueueProperties(configuration);
   }
 
   private void updateSchedulerHealthForCompletedContainer(

+ 16 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacitySchedulerNewQueueAutoCreation.java

@@ -688,11 +688,27 @@ public class TestCapacitySchedulerNewQueueAutoCreation
     LeafQueue a2 = createQueue("root.a.a-auto.a2");
     Assert.assertEquals("weight is not set by template", 6f,
         a2.getQueueCapacities().getWeight(), 1e-6);
+    Assert.assertEquals("user limit factor should be disabled with dynamic queues",
+        -1f, a2.getUserLimitFactor(), 1e-6);
+    Assert.assertEquals("maximum AM resource percent should be 1 with dynamic queues",
+        1f, a2.getMaxAMResourcePerQueuePercent(), 1e-6);
+
+    // Set the user-limit-factor and maximum-am-resource-percent via templates to ensure their
+    // modified defaults are indeed overridden
+    csConf.set(AutoCreatedQueueTemplate.getAutoQueueTemplatePrefix(
+        "root.a.*") + "user-limit-factor", "10");
+    csConf.set(AutoCreatedQueueTemplate.getAutoQueueTemplatePrefix(
+        "root.a.*") + "maximum-am-resource-percent", "0.8");
 
     cs.reinitialize(csConf, mockRM.getRMContext());
     a2 = (LeafQueue) cs.getQueue("root.a.a-auto.a2");
     Assert.assertEquals("weight is overridden", 6f,
         a2.getQueueCapacities().getWeight(), 1e-6);
+    Assert.assertEquals("user limit factor should be modified by templates",
+        10f, a2.getUserLimitFactor(), 1e-6);
+    Assert.assertEquals("maximum AM resource percent should be modified by templates",
+        0.8f, a2.getMaxAMResourcePerQueuePercent(), 1e-6);
+
 
     csConf.setNonLabeledQueueWeight("root.a.a-auto.a2", 4f);
     cs.reinitialize(csConf, mockRM.getRMContext());