Uploaded image for project: 'Hadoop YARN'
  1. Hadoop YARN
  2. YARN-10528

maxAMShare should only be accepted for leaf queues, not parent queues

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 3.4.0, 3.3.1, 3.1.5, 3.2.3
    • Component/s: None
    • Labels:
      None
    • Hadoop Flags:
      Reviewed

      Description

      Based on Hadoop documentation, it is clear that maxAMShare property can only be used for leaf queues. This is similar to the reservation setting.

      However, existing code only ensures that the reservation setting is not accepted for "parent" queues (see https://github.com/apache/hadoop/blob/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/allocation/AllocationFileQueueParser.java#L226 and https://github.com/apache/hadoop/blob/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/allocation/AllocationFileQueueParser.java#L233) but it is missing the checks for maxAMShare. Due to this, it is currently possible to have an allocation similar to below:

      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <allocations>
          <queue name="root">
              <weight>1.0</weight>
              <schedulingPolicy>drf</schedulingPolicy>
              <aclSubmitApps>*</aclSubmitApps>
              <aclAdministerApps>*</aclAdministerApps>
              <queue name="default">
                  <weight>1.0</weight>
                  <schedulingPolicy>drf</schedulingPolicy>
              </queue>
              <queue name="users" type="parent">
                  <weight>1.0</weight>
                  <schedulingPolicy>drf</schedulingPolicy>
                  <maxAMShare>1.0</maxAMShare>
              </queue>
          </queue>
          <defaultQueueSchedulingPolicy>fair</defaultQueueSchedulingPolicy>
          <queuePlacementPolicy>
              <rule name="specified" create="true"/>
              <rule name="nestedUserQueue" create="true">
                  <rule name="default" create="true" queue="users"/>
              </rule>
              <rule name="default"/>
          </queuePlacementPolicy>
      </allocations>
      

      where maxAMShare is 1.0f meaning, it is possible allocate 100% of the queue's resources for Application Masters. Notice above that root.users is a parent queue, however, it still gladly accepts maxAMShare. This is contrary to the documentation and in fact, it is very misleading because the child queues like root.users.<user> actually do not inherit this setting at all and they still go on and use the default of 0.5 instead of 1.0, see the attached screenshot as an example.

        Attachments

        1. maxAMShare for root.users (parent queue) has no effect as child queue does not inherit it.png
          871 kB
          Siddharth Ahuja
        2. YARN-10528.001.patch
          7 kB
          Siddharth Ahuja
        3. YARN-10528.002.patch
          7 kB
          Siddharth Ahuja
        4. YARN-10528-branch-3.2.001.patch
          7 kB
          Siddharth Ahuja
        5. YARN-10528-branch-3.1.001.patch
          7 kB
          Siddharth Ahuja
        6. YARN-10528-branch-3.3.001.patch
          7 kB
          Siddharth Ahuja

          Activity

            People

            • Assignee:
              sahuja Siddharth Ahuja
              Reporter:
              sahuja Siddharth Ahuja
            • Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: