<?xml version="1.0"?>
<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<!--
     This is the template for queue configuration when the configured
     scheduler to use is capacity-scheduler
     (org.apache.hadoop.mapred.CapacityTaskScheduler). To use this,
     copy this file into conf directory renaming it to mapred-queues.xml.
-->
<queues aclsEnabled="false">
  <queue>

    <name>default</name>

    <state>running</state>

    <acl-submit-job>*</acl-submit-job>
    <acl-administer-jobs>*</acl-administer-jobs>

    <properties>

      <property key="capacity" value="100">
		<!--
        <description>
        For a root-level container queue, this is the percentage of the
      	number of slots in the cluster that will be available for all its
      	immediate children together. For a root-level leaf-queue, this is
      	the percentage of the number of slots in the cluster that will be
      	available for all its jobs.	For a non-root level container queue,
      	this is the percentage of the number of slots in its parent queue
      	that will be available for all its	children together. For a
      	non-root-level leaf queue, this	is the percentage of the number of
      	slots in its parent queue that will be available for jobs in this
      	queue. The sum of capacities for all children of a container queue
      	should be less than or equal 100. The sum of capacities of all the
      	root-level queues should be less than or equal to 100.

          This property can be refreshed.
        </description>
        -->    
      </property>

      <property key="maximum-capacity" value="-1">
        <!--
        <description>
          A limit in percentage beyond which a non-root-level queue cannot use
          the capacity of its parent queue; for a root-level queue, this is
          the limit in percentage beyond which it cannot use the
          cluster-capacity. This property provides a means to limit how much
          excess capacity a queue can use.  It can be used to prevent queues
          with long running jobs from occupying more than a certain percentage
          of the parent-queue or the cluster, which, in the absence of
          pre-emption, can lead to capacity guarantees of other queues getting
          affected.

          The maximum-capacity of a queue can only be greater than or equal to
          its capacity. By default, there is no limit for a queue. For a
          non-root-level queue this means it can occupy till the
          maximum-capacity of its parent, for a root-level queue, it means that
          it can occupy the whole cluster. A value of 100 implies that a queue
          can use the complete capacity of its parent, or the complete
          cluster-capacity in case of root-level-queues.

          This property can be refreshed.
        </description>
        -->
      </property>

      <property key="supports-priority" value="false">
        <!--
        <description>This is only applicable to leaf queues. If true,
          priorities of jobs will be taken into account in scheduling
          decisions.

          This property CANNOT be refreshed.
        </description>
        -->
      </property>

      <property key="minimum-user-limit-percent" value="100">
        <!--
        <description>This is only applicable to leaf queues. Each queue
        enforces a limit on the percentage of resources allocated to a user at
        any given time, if there is competition for them. This user limit can
        vary between a minimum and maximum value. The former depends on the
        number of users who have submitted jobs, and the latter is set to this
        property value. For example, suppose the value of this property is 25.
        If two users have submitted jobs to a queue, no single user can use
        more than 50% of the queue resources. If a third user submits a job,
        no single user can use more than 33% of the queue resources. With 4 
        or more users, no user can use more than 25% of the queue's resources.
        A value of 100 implies no user limits are imposed.

        This property can be refreshed.
        </description>
        -->
      </property>

      <property key="maximum-initialized-jobs-per-user" value="2">
      <!--
        <description>This is only applicable to leaf queues. The maximum number
        of jobs to be pre-initialized for a user of the job queue.

        This property can be refreshed.
        </description>
      -->
      </property>

    </properties>
  </queue>

  <!-- Here is a sample of a hierarchical queue configuration
       where q2 and q3 are children of q1 sharing the capacity
       of q1. In this example, q2 and q3 are leaf level
       queues as it has no queues configured within it. Currently, ACLs
       and state are only supported for the leaf level queues.
  <queue>
    <name>q1</name>
    <properties>
      <property key="capacity" value="100"/>
    </properties>
    <queue>
      <name>q2</name>
      <state>stopped</state>
      <acl-submit-job>*</acl-submit-job>
      <acl-administer-jobs>*</acl-administer-jobs>
      <properties>
        <property key="capacity" value="50"/>
        <property key="maximum-capacity" value="60"/>
        <property key="supports-priority" value="false"/>
        <property key="minimum-user-limit-percent" value="100"/>
        <property key="maximum-initialized-jobs-per-user" value="2"/>
      </properties>
    </queue>
    <queue>
      <name>q3</name>
      <state>stopped</state>
      <acl-submit-job>*</acl-submit-job>
      <acl-administer-jobs>*</acl-administer-jobs>
      <properties>
        <property key="capacity" value="50"/>
        <property key="maximum-capacity" value="-1"/>
        <property key="supports-priority" value="false"/>
        <property key="minimum-user-limit-percent" value="100"/>
        <property key="maximum-initialized-jobs-per-user" value="2"/>
      </properties>
    </queue>
  </queue>
 -->
</queues>
