<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!--
   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.
-->

<!-- Do not modify this file directly.  Instead, copy entries that you -->
<!-- wish to modify from this file into yarn-site.xml and change them -->
<!-- there.  If yarn-site.xml does not already exist, create it.      -->

<configuration>

  <!-- IPC Configuration -->

  <property>
    <description>Factory to create client IPC classes.</description>
    <name>yarn.ipc.client.factory.class</name>
  </property>

  <property>
    <description>Factory to create server IPC classes.</description>
    <name>yarn.ipc.server.factory.class</name>
  </property>

  <property>
    <description>Factory to create serializeable records.</description>
    <name>yarn.ipc.record.factory.class</name>
  </property>

  <property>
    <description>RPC class implementation</description>
    <name>yarn.ipc.rpc.class</name>
    <value>org.apache.hadoop.yarn.ipc.HadoopYarnProtoRPC</value>
  </property>
  
  <!-- Resource Manager Configuration -->

  <property>
    <description>The hostname of the RM.</description>
    <name>yarn.resourcemanager.hostname</name>
    <value>0.0.0.0</value>
  </property>    
  
  <property>
    <description>The address of the applications manager interface in the RM.</description>
    <name>yarn.resourcemanager.address</name>
    <value>${yarn.resourcemanager.hostname}:8032</value>
  </property>

  <property>
    <description>
      The actual address the server will bind to. If this optional address is
      set, the RPC and webapp servers will bind to this address and the port specified in
      yarn.resourcemanager.address and yarn.resourcemanager.webapp.address, respectively. This
      is most useful for making RM listen to all interfaces by setting to 0.0.0.0.
    </description>
    <name>yarn.resourcemanager.bind-host</name>
    <value></value>
  </property>

  <property>
    <description>
      If set to true, then ALL container updates will be automatically sent to
      the NM in the next heartbeat</description>
    <name>yarn.resourcemanager.auto-update.containers</name>
    <value>false</value>
  </property>

  <property>
    <description>The number of threads used to handle applications manager requests.</description>
    <name>yarn.resourcemanager.client.thread-count</name>
    <value>50</value>
  </property>

  <property>
    <description>Number of threads used to launch/cleanup AM.</description>
    <name>yarn.resourcemanager.amlauncher.thread-count</name>
    <value>50</value>
  </property>

  <property>
    <description>Retry times to connect with NM.</description>
    <name>yarn.resourcemanager.nodemanager-connect-retries</name>
    <value>10</value>
  </property>

  <property>
    <description>Timeout in milliseconds when YARN dispatcher tries to drain the
      events. Typically, this happens when service is stopping. e.g. RM drains
      the ATS events dispatcher when stopping.
    </description>
    <name>yarn.dispatcher.drain-events.timeout</name>
    <value>300000</value>
  </property>

  <property>
    <description>
      The threshold used to trigger the logging of event types
      and counts in RM's main event dispatcher. Default length is 5000,
      which means RM will print events info when the queue size cumulatively
      reaches 5000 every time. Such info can be used to reveal what kind of events
      that RM is stuck at processing mostly, it can help to
      narrow down certain performance issues.
    </description>
    <name>yarn.dispatcher.print-events-info.threshold</name>
    <value>5000</value>
  </property>

  <property>
    <description>
      Resource manager dispatcher thread cpu monitor sampling rate.
      Units are samples per minute.  This controls how often to sample
      the cpu utilization of the resource manager dispatcher thread.
      The cpu utilization is displayed on the RM UI as scheduler busy %.
      Set this to zero to disable the dispatcher thread monitor.  Defaults
      to 60 samples per minute.
    </description>
    <name>yarn.dispatcher.cpu-monitor.samples-per-min</name>
    <value>60</value>
  </property>

  <property>
    <description>
      Resource manager dispatcher has a thread pool that prints EventQueue,
      configure the corePoolSize of this thread pool,
      the meaning of corePoolSize is the number of threads to keep in the pool.
      the default value is 1.
    </description>
    <name>yarn.dispatcher.print-thread-pool.core-pool-size</name>
    <value>1</value>
  </property>

  <property>
    <description>
      Resource manager dispatcher has a thread pool that prints EventQueue,
      configure the maximumPoolSize of this thread pool,
      the meaning of maximumPoolSize is the maximum number of threads to allow in the pool.
      the default value is 5.
    </description>
    <name>yarn.dispatcher.print-thread-pool.maximum-pool-size</name>
    <value>5</value>
  </property>

  <property>
    <description>
      Resource manager dispatcher has a thread pool that prints EventQueue,
      configure the keepAliveTime of this thread pool,
      The meaning of keepAliveTime is as follows
      when the number of threads is greater than the core,
      this is the maximum time that excess idle threads will wait for new tasks before terminating.
      the default value is 10s.
    </description>
    <name>yarn.dispatcher.print-thread-pool.keep-alive-time</name>
    <value>10s</value>
  </property>

  <property>
    <description>
      The expiry interval for application master reporting.
      The default is 900000 ms, or 15m.
    </description>
    <name>yarn.am.liveness-monitor.expiry-interval-ms</name>
    <value>900000</value>
  </property>

  <property>
    <description>The Kerberos principal for the resource manager.</description>
    <name>yarn.resourcemanager.principal</name>
  </property>

  <property>
    <description>The address of the scheduler interface.</description>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>${yarn.resourcemanager.hostname}:8030</value>
  </property>

  <property>
    <description>Number of threads to handle scheduler interface.</description>
    <name>yarn.resourcemanager.scheduler.client.thread-count</name>
    <value>50</value>
  </property>

  <property>
    <description>
      Specify which handler will be used to process PlacementConstraints.
      Acceptable values are: `placement-processor`, `scheduler` and `disabled`.
      For a detailed explanation of these values, please refer to documentation.
    </description>
    <name>yarn.resourcemanager.placement-constraints.handler</name>
    <value>disabled</value>
  </property>

  <property>
    <description>Number of times to retry placing of rejected SchedulingRequests</description>
    <name>yarn.resourcemanager.placement-constraints.retry-attempts</name>
    <value>3</value>
  </property>

  <property>
    <description>Constraint Placement Algorithm to be used.</description>
    <name>yarn.resourcemanager.placement-constraints.algorithm.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.constraint.algorithm.DefaultPlacementAlgorithm</value>
  </property>

  <property>
    <description>Placement Algorithm Requests Iterator to be used.</description>
    <name>yarn.resourcemanager.placement-constraints.algorithm.iterator</name>
    <value>SERIAL</value>
  </property>

  <property>
    <description>Threadpool size for the Algorithm used for placement constraint processing.</description>
    <name>yarn.resourcemanager.placement-constraints.algorithm.pool-size</name>
    <value>1</value>
  </property>

  <property>
    <description>Threadpool size for the Scheduler invocation phase of placement constraint processing.</description>
    <name>yarn.resourcemanager.placement-constraints.scheduler.pool-size</name>
    <value>1</value>
  </property>

  <property>
    <description>
      Comma separated class names of ApplicationMasterServiceProcessor
      implementations. The processors will be applied in the order
      they are specified.
    </description>
    <name>yarn.resourcemanager.application-master-service.processors</name>
    <value></value>
  </property>

  <property>
      <description>
        This configures the HTTP endpoint for YARN Daemons.The following
        values are supported:
        - HTTP_ONLY : Service is provided only on http
        - HTTPS_ONLY : Service is provided only on https
      </description>
      <name>yarn.http.policy</name>
      <value>HTTP_ONLY</value>
  </property>

  <property>
    <description>
      The http address of the RM web application.
      If only a host is provided as the value,
      the webapp will be served on a random port.
    </description>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>${yarn.resourcemanager.hostname}:8088</value>
  </property>

  <property>
    <description>
      The https address of the RM web application.
      If only a host is provided as the value,
      the webapp will be served on a random port.
    </description>
    <name>yarn.resourcemanager.webapp.https.address</name>
    <value>${yarn.resourcemanager.hostname}:8090</value>
  </property>

  <property>
    <description>
    The Kerberos keytab file to be used for spnego filter for the RM web
    interface.
    </description>
    <name>yarn.resourcemanager.webapp.spnego-keytab-file</name>
    <value></value>
  </property>

  <property>
    <description>
    The Kerberos principal to be used for spnego filter for the RM web
    interface.
    </description>
    <name>yarn.resourcemanager.webapp.spnego-principal</name>
    <value></value>
  </property>

  <property>
    <description>
    Add button to kill application in the RM Application view.
    </description>
    <name>yarn.resourcemanager.webapp.ui-actions.enabled</name>
    <value>true</value>
  </property>

  <property>
    <description>To enable RM web ui2 application.</description>
    <name>yarn.webapp.ui2.enable</name>
    <value>false</value>
  </property>

  <property>
    <description>Enable tools section in all ui1 webapp.</description>
    <name>yarn.webapp.ui1.tools.enable</name>
    <value>true</value>
  </property>

  <property>
    <description>
      Explicitly provide WAR file path for ui2 if needed.
    </description>
    <name>yarn.webapp.ui2.war-file-path</name>
    <value></value>
  </property>

  <property>
    <description>
      Enable services rest api on ResourceManager.
    </description>
    <name>yarn.webapp.api-service.enable</name>
    <value>false</value>
  </property>

  <property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>${yarn.resourcemanager.hostname}:8031</value>
  </property>

  <property>
   <name>yarn.resourcemanager.resource-tracker.nm.ip-hostname-check</name>
   <value>false</value>
  </property>

  <property>
    <description>Are acls enabled.</description>
    <name>yarn.acl.enable</name>
    <value>false</value>
  </property>

  <property>
    <description>Are reservation acls enabled.</description>
    <name>yarn.acl.reservation-enable</name>
    <value>false</value>
  </property>

  <property>
    <description>ACL of who can be admin of the YARN cluster.</description>
    <name>yarn.admin.acl</name>
    <value>*</value>
  </property>

  <property>
    <description>The address of the RM admin interface.</description>
    <name>yarn.resourcemanager.admin.address</name>
    <value>${yarn.resourcemanager.hostname}:8033</value>
  </property>

  <property>
    <description>Number of threads used to handle RM admin interface.</description>
    <name>yarn.resourcemanager.admin.client.thread-count</name>
    <value>1</value>
  </property>

  <property>
    <description>Maximum time to wait to establish connection to
    ResourceManager.</description>
    <name>yarn.resourcemanager.connect.max-wait.ms</name>
    <value>900000</value>
  </property>

  <property>
    <description>How often to try connecting to the
    ResourceManager.</description>
    <name>yarn.resourcemanager.connect.retry-interval.ms</name>
    <value>30000</value>
  </property>

  <property>
    <description>The default maximum number of application attempts, if unset by
    the user. Each application master can specify its individual maximum number of application
    attempts via the API, but the individual number cannot be more than the global upper bound in
    yarn.resourcemanager.am.global.max-attempts. The default number is set to 2, to
    allow at least one retry for AM.</description>
    <name>yarn.resourcemanager.am.max-attempts</name>
    <value>2</value>
  </property>

  <property>
    <description>How often to check that containers are still alive. </description>
    <name>yarn.resourcemanager.container.liveness-monitor.interval-ms</name>
    <value>600000</value>
  </property>

  <property>
    <description>The keytab for the resource manager.</description>
    <name>yarn.resourcemanager.keytab</name>
    <value>/etc/krb5.keytab</value>
  </property>

  <property>
    <description>Flag to enable override of the default kerberos authentication
    filter with the RM authentication filter to allow authentication using
    delegation tokens(fallback to kerberos if the tokens are missing). Only
    applicable when the http authentication type is kerberos.</description>
    <name>yarn.resourcemanager.webapp.delegation-token-auth-filter.enabled</name>
    <value>true</value>
  </property>

  <property>
    <description>Flag to enable cross-origin (CORS) support in the RM. This flag
    requires the CORS filter initializer to be added to the filter initializers
    list in core-site.xml.</description>
    <name>yarn.resourcemanager.webapp.cross-origin.enabled</name>
    <value>false</value>
  </property>

  <property>
    <description>How long to wait until a node manager is considered dead.</description>
    <name>yarn.nm.liveness-monitor.expiry-interval-ms</name>
    <value>600000</value>
  </property>

  <property>
    <description>Path to file with nodes to include.</description>
    <name>yarn.resourcemanager.nodes.include-path</name>
    <value></value>
  </property>

  <property>
    <description>Path to file with nodes to exclude.</description>
    <name>yarn.resourcemanager.nodes.exclude-path</name>
    <value></value>
  </property>

  <property>
    <description>The expiry interval for node IP caching. -1 disables the caching</description>
    <name>yarn.resourcemanager.node-ip-cache.expiry-interval-secs</name>
    <value>-1</value>
  </property>

  <property>
    <description>Number of threads to handle resource tracker calls.</description>
    <name>yarn.resourcemanager.resource-tracker.client.thread-count</name>
    <value>50</value>
  </property>

  <property>
    <description>The class to use as the resource scheduler.</description>
    <name>yarn.resourcemanager.scheduler.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
  </property>

  <property>
    <description>The minimum allocation for every container request at the RM
    in MBs. Memory requests lower than this will be set to the value of this
    property. Additionally, a node manager that is configured to have less memory
    than this value will be shut down by the resource manager.</description>
    <name>yarn.scheduler.minimum-allocation-mb</name>
    <value>1024</value>
  </property>

  <property>
    <description>The maximum allocation for every container request at the RM
    in MBs. Memory requests higher than this will throw an
    InvalidResourceRequestException.</description>
    <name>yarn.scheduler.maximum-allocation-mb</name>
    <value>8192</value>
  </property>

  <property>
    <description>The minimum allocation for every container request at the RM
    in terms of virtual CPU cores. Requests lower than this will be set to the
    value of this property. Additionally, a node manager that is configured to
    have fewer virtual cores than this value will be shut down by the resource
    manager.</description>
    <name>yarn.scheduler.minimum-allocation-vcores</name>
    <value>1</value>
  </property>

  <property>
    <description>The maximum allocation for every container request at the RM
    in terms of virtual CPU cores. Requests higher than this will throw an
    InvalidResourceRequestException.</description>
    <name>yarn.scheduler.maximum-allocation-vcores</name>
    <value>4</value>
  </property>

  <property>
    <description>
    Used by node labels.  If set to true, the port should be included in the
    node name.  Only usable if your scheduler supports node labels.
    </description>
    <name>yarn.scheduler.include-port-in-node-name</name>
    <value>false</value>
  </property>

  <property>
    <description>Enable RM to recover state after starting. If true, then
      yarn.resourcemanager.store.class must be specified. </description>
    <name>yarn.resourcemanager.recovery.enabled</name>
    <value>false</value>
  </property>

  <property>
    <description>Should RM fail fast if it encounters any errors. By defalt, it
      points to ${yarn.fail-fast}. Errors include:
      1) exceptions when state-store write/read operations fails.
    </description>
    <name>yarn.resourcemanager.fail-fast</name>
    <value>${yarn.fail-fast}</value>
  </property>

  <property>
    <description>Should YARN fail fast if it encounters any errors.
      This is a global config for all other components including RM,NM etc.
      If no value is set for component-specific config (e.g yarn.resourcemanager.fail-fast),
      this value will be the default.
    </description>
    <name>yarn.fail-fast</name>
    <value>false</value>
  </property>

  <property>
    <description>Enable RM work preserving recovery. This configuration is private
    to YARN for experimenting the feature.
    </description>
    <name>yarn.resourcemanager.work-preserving-recovery.enabled</name>
    <value>true</value>
  </property>

  <property>
    <description>Set the amount of time RM waits before allocating new
    containers on work-preserving-recovery. Such wait period gives RM a chance
    to settle down resyncing with NMs in the cluster on recovery, before assigning
    new containers to applications.
    </description>
    <name>yarn.resourcemanager.work-preserving-recovery.scheduling-wait-ms</name>
    <value>10000</value>
  </property>

  <property>
    <description>The class to use as the persistent store.

      If org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore
      is used, the store is implicitly fenced; meaning a single ResourceManager
      is able to use the store at any point in time. More details on this
      implicit fencing, along with setting up appropriate ACLs is discussed
      under yarn.resourcemanager.zk-state-store.root-node.acl.
    </description>
    <name>yarn.resourcemanager.store.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.FileSystemRMStateStore</value>
  </property>

  <property>
    <description>When automatic failover is enabled, number of zookeeper
      operation retry times in ActiveStandbyElector</description>
    <name>yarn.resourcemanager.ha.failover-controller.active-standby-elector.zk.retries</name>
    <!--<value>3</value>-->
  </property>

  <property>
    <description>The maximum number of completed applications RM state
    store keeps, less than or equals to ${yarn.resourcemanager.max-completed-applications}.
    By default, it equals to ${yarn.resourcemanager.max-completed-applications}.
    This ensures that the applications kept in the state store are consistent with
    the applications remembered in RM memory.
    Any values larger than ${yarn.resourcemanager.max-completed-applications} will
    be reset to ${yarn.resourcemanager.max-completed-applications}.
    Note that this value impacts the RM recovery performance. Typically,
    a smaller value indicates better performance on RM recovery.
    </description>
    <name>yarn.resourcemanager.state-store.max-completed-applications</name>
    <value>${yarn.resourcemanager.max-completed-applications}</value>
  </property>

  <property>
    <description>Full path of the ZooKeeper znode where RM state will be
    stored. This must be supplied when using
    org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore
    as the value for yarn.resourcemanager.store.class</description>
    <name>yarn.resourcemanager.zk-state-store.parent-path</name>
    <value>/rmstore</value>
  </property>

  <property>
    <description>
      ACLs to be used for the root znode when using ZKRMStateStore in an HA
      scenario for fencing.

      ZKRMStateStore supports implicit fencing to allow a single
      ResourceManager write-access to the store. For fencing, the
      ResourceManagers in the cluster share read-write-admin privileges on the
      root node, but the Active ResourceManager claims exclusive create-delete
      permissions.

      By default, when this property is not set, we use the ACLs from
      yarn.resourcemanager.zk-acl for shared admin access and
      rm-address:random-number for username-based exclusive create-delete
      access.

      This property allows users to set ACLs of their choice instead of using
      the default mechanism. For fencing to work, the ACLs should be
      carefully set differently on each ResourceManager such that all the
      ResourceManagers have shared admin access and the Active ResourceManager
      takes over (exclusively) the create-delete access.
    </description>
    <name>yarn.resourcemanager.zk-state-store.root-node.acl</name>
  </property>

  <property>
    <description>URI pointing to the location of the FileSystem path where
    RM state will be stored. This must be supplied when using
    org.apache.hadoop.yarn.server.resourcemanager.recovery.FileSystemRMStateStore
    as the value for yarn.resourcemanager.store.class</description>
    <name>yarn.resourcemanager.fs.state-store.uri</name>
    <value>${hadoop.tmp.dir}/yarn/system/rmstore</value>
    <!--value>hdfs://localhost:9000/rmstore</value-->
  </property>

  <property>
    <description>the number of retries to recover from IOException in
    FileSystemRMStateStore.
    </description>
    <name>yarn.resourcemanager.fs.state-store.num-retries</name>
    <value>0</value>
  </property>

  <property>
    <description>Retry interval in milliseconds in FileSystemRMStateStore.
    </description>
    <name>yarn.resourcemanager.fs.state-store.retry-interval-ms</name>
    <value>1000</value>
  </property>

  <property>
    <description>Local path where the RM state will be stored when using
    org.apache.hadoop.yarn.server.resourcemanager.recovery.LeveldbRMStateStore
    as the value for yarn.resourcemanager.store.class</description>
    <name>yarn.resourcemanager.leveldb-state-store.path</name>
    <value>${hadoop.tmp.dir}/yarn/system/rmstore</value>
  </property>

  <property>
    <description>The time in seconds between full compactions of the leveldb
    database. Setting the interval to zero disables the full compaction
    cycles.</description>
    <name>yarn.resourcemanager.leveldb-state-store.compaction-interval-secs</name>
    <value>3600</value>
  </property>

  <property>
    <description>Enable RM high-availability. When enabled,
      (1) The RM starts in the Standby mode by default, and transitions to
      the Active mode when prompted to.
      (2) The nodes in the RM ensemble are listed in
      yarn.resourcemanager.ha.rm-ids
      (3) The id of each RM either comes from yarn.resourcemanager.ha.id
      if yarn.resourcemanager.ha.id is explicitly specified or can be
      figured out by matching yarn.resourcemanager.address.{id} with local address
      (4) The actual physical addresses come from the configs of the pattern
      - {rpc-config}.{id}</description>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>false</value>
  </property>

  <property>
    <description>Enable automatic failover.
      By default, it is enabled only when HA is enabled</description>
    <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
    <value>true</value>
  </property>

  <property>
    <description>Enable embedded automatic failover.
      By default, it is enabled only when HA is enabled.
      The embedded elector relies on the RM state store to handle fencing,
      and is primarily intended to be used in conjunction with ZKRMStateStore.
    </description>
    <name>yarn.resourcemanager.ha.automatic-failover.embedded</name>
    <value>true</value>
  </property>

  <property>
    <description>The base znode path to use for storing leader information,
      when using ZooKeeper based leader election.</description>
    <name>yarn.resourcemanager.ha.automatic-failover.zk-base-path</name>
    <value>/yarn-leader-election</value>
  </property>

  <property>
    <description>Index at which last section of application id (with each section
      separated by _ in application id) will be split so that application znode
      stored in zookeeper RM state store will be stored as two different znodes
      (parent-child). Split is done from the end.
      For instance, with no split, appid znode will be of the form
      application_1352994193343_0001. If the value of this config is 1, the
      appid znode will be broken into two parts application_1352994193343_000
      and 1 respectively with former being the parent node.
      application_1352994193343_0002 will then be stored as 2 under the parent
      node application_1352994193343_000. This config can take values from 0 to 4.
      0 means there will be no split. If configuration value is outside this
      range, it will be treated as config value of 0(i.e. no split). A value
      larger than 0 (up to 4) should be configured if you are storing a large number
      of apps in ZK based RM state store and state store operations are failing due to
      LenError in Zookeeper.</description>
    <name>yarn.resourcemanager.zk-appid-node.split-index</name>
    <value>0</value>
  </property>

  <property>
    <description>Index at which the RM Delegation Token ids will be split so
      that the delegation token znodes stored in the zookeeper RM state store
      will be stored as two different znodes (parent-child). The split is done
      from the end. For instance, with no split, a delegation token znode will
      be of the form RMDelegationToken_123456789. If the value of this config is
      1, the delegation token znode will be broken into two parts:
      RMDelegationToken_12345678 and 9 respectively with former being the parent
      node. This config can take values from 0 to 4. 0 means there will be no
      split. If the value is outside this range, it will be treated as 0 (i.e.
      no split). A value larger than 0 (up to 4) should be configured if you are
      running a large number of applications, with long-lived delegation tokens
      and state store operations (e.g. failover) are failing due to LenError in
      Zookeeper.</description>
    <name>yarn.resourcemanager.zk-delegation-token-node.split-index</name>
    <value>0</value>
  </property>

  <property>
    <description>Specifies the maximum size of the data that can be stored
      in a znode. Value should be same or less than jute.maxbuffer configured
      in zookeeper. Default value configured is 1MB.</description>
    <name>yarn.resourcemanager.zk-max-znode-size.bytes</name>
    <value>1048576</value>
  </property>

  <property>
    <description>Name of the cluster. In a HA setting,
      this is used to ensure the RM participates in leader
      election for this cluster and ensures it does not affect
      other clusters</description>
    <name>yarn.resourcemanager.cluster-id</name>
    <!--value>yarn-cluster</value-->
  </property>

  <property>
    <description>The range of values above base epoch that the RM will use before
      wrapping around</description>
    <name>yarn.resourcemanager.epoch.range</name>
    <value>0</value>
  </property>

  <property>
    <description>The list of RM nodes in the cluster when HA is
      enabled. See description of yarn.resourcemanager.ha
      .enabled for full details on how this is used.</description>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <!--value>rm1,rm2</value-->
  </property>

  <property>
    <description>The id (string) of the current RM. When HA is enabled, this
      is an optional config. The id of current RM can be set by explicitly
      specifying yarn.resourcemanager.ha.id or figured out by matching
      yarn.resourcemanager.address.{id} with local address
      See description of yarn.resourcemanager.ha.enabled
      for full details on how this is used.</description>
    <name>yarn.resourcemanager.ha.id</name>
    <!--value>rm1</value-->
  </property>

  <property>
    <description>When HA is enabled, the class to be used by Clients, AMs and
      NMs to failover to the Active RM. It should extend
      org.apache.hadoop.yarn.client.RMFailoverProxyProvider</description>
    <name>yarn.client.failover-proxy-provider</name>
    <value>org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider</value>
  </property>

  <property>
    <description>When HA is not enabled, the class to be used by Clients, AMs and
      NMs to retry connecting to the Active RM. It should extend
      org.apache.hadoop.yarn.client.RMFailoverProxyProvider</description>
    <name>yarn.client.failover-no-ha-proxy-provider</name>
    <value>org.apache.hadoop.yarn.client.DefaultNoHARMFailoverProxyProvider</value>
  </property>

  <property>
    <description>When HA is enabled, the max number of times
      FailoverProxyProvider should attempt failover. When set,
      this overrides the yarn.resourcemanager.connect.max-wait.ms. When
      not set, this is inferred from
      yarn.resourcemanager.connect.max-wait.ms.</description>
    <name>yarn.client.failover-max-attempts</name>
    <!--value>15</value-->
  </property>

  <property>
    <description>When HA is enabled, the sleep base (in milliseconds) to be
      used for calculating the exponential delay between failovers. When set,
      this overrides the yarn.resourcemanager.connect.* settings. When
      not set, yarn.resourcemanager.connect.retry-interval.ms is used instead.
    </description>
    <name>yarn.client.failover-sleep-base-ms</name>
    <!--value>500</value-->
  </property>

  <property>
    <description>When HA is enabled, the maximum sleep time (in milliseconds)
      between failovers. When set, this overrides the
      yarn.resourcemanager.connect.* settings. When not set,
      yarn.resourcemanager.connect.retry-interval.ms is used instead.</description>
    <name>yarn.client.failover-sleep-max-ms</name>
    <!--value>15000</value-->
  </property>

  <property>
    <description>When HA is enabled, the number of retries per
      attempt to connect to a ResourceManager. In other words,
      it is the ipc.client.connect.max.retries to be used during
      failover attempts</description>
    <name>yarn.client.failover-retries</name>
    <value>0</value>
  </property>

  <property>
    <description>When HA is enabled, the number of retries per
      attempt to connect to a ResourceManager on socket timeouts. In other
      words, it is the ipc.client.connect.max.retries.on.timeouts to be used
      during failover attempts</description>
    <name>yarn.client.failover-retries-on-socket-timeouts</name>
    <value>0</value>
  </property>

  <property>
    <description>The maximum number of completed applications RM keeps. </description>
    <name>yarn.resourcemanager.max-completed-applications</name>
    <value>1000</value>
  </property>

  <property>
    <description>Interval at which the delayed token removal thread runs</description>
    <name>yarn.resourcemanager.delayed.delegation-token.removal-interval-ms</name>
    <value>30000</value>
  </property>

  <property>
    <description>Maximum size in bytes for configurations that can be provided
      by application to RM for delegation token renewal.
      By experiment, its roughly 128 bytes per key-value pair.
      The default value 12800 allows roughly 100 configs, may be less.
    </description>
    <name>yarn.resourcemanager.delegation-token.max-conf-size-bytes</name>
    <value>12800</value>
  </property>

  <property>
    <description>If true, ResourceManager will always try to cancel delegation
      tokens after the application completes, even if the client sets
      shouldCancelAtEnd false.  References to delegation tokens are tracked,
      so they will not be canceled until all sub-tasks are done using them.
    </description>
    <name>yarn.resourcemanager.delegation-token.always-cancel</name>
    <value>false</value>
  </property>

  <property>
  <description>If true, ResourceManager will have proxy-user privileges.
    Use case: In a secure cluster, YARN requires the user hdfs delegation-tokens to
    do localization and log-aggregation on behalf of the user. If this is set to true,
    ResourceManager is able to request new hdfs delegation tokens on behalf of
    the user. This is needed by long-running-service, because the hdfs tokens
    will eventually expire and YARN requires new valid tokens to do localization
    and log-aggregation. Note that to enable this use case, the corresponding
    HDFS NameNode has to configure ResourceManager as the proxy-user so that
    ResourceManager can itself ask for new tokens on behalf of the user when
    tokens are past their max-life-time.</description>
    <name>yarn.resourcemanager.proxy-user-privileges.enabled</name>
    <value>false</value>
  </property>

  <property>
    <description>Interval for the roll over for the master key used to generate
        application tokens
    </description>
    <name>yarn.resourcemanager.am-rm-tokens.master-key-rolling-interval-secs</name>
    <value>86400</value>
  </property>

  <property>
    <description>Interval for the roll over for the master key used to generate
        container tokens. It is expected to be much greater than
        yarn.nm.liveness-monitor.expiry-interval-ms and
        yarn.resourcemanager.rm.container-allocation.expiry-interval-ms. Otherwise the
        behavior is undefined.
    </description>
    <name>yarn.resourcemanager.container-tokens.master-key-rolling-interval-secs</name>
    <value>86400</value>
  </property>

  <property>
    <description>The heart-beat interval in milliseconds for every NodeManager in the cluster.</description>
    <name>yarn.resourcemanager.nodemanagers.heartbeat-interval-ms</name>
    <value>1000</value>
  </property>

  <property>
    <description>Enables heart-beat interval scaling.  The NodeManager
      heart-beat interval will scale based on the difference between the CPU
      utilization on the node and the cluster-wide average CPU utilization.
    </description>
    <name>
      yarn.resourcemanager.nodemanagers.heartbeat-interval-scaling-enable
    </name>
    <value>false</value>
  </property>

  <property>
    <description>If heart-beat interval scaling is enabled, this is the
      minimum heart-beat interval in milliseconds
    </description>
    <name>yarn.resourcemanager.nodemanagers.heartbeat-interval-min-ms</name>
    <value>1000</value>
  </property>

  <property>
    <description>If heart-beat interval scaling is enabled, this is the
      maximum heart-beat interval in milliseconds</description>
    <name>yarn.resourcemanager.nodemanagers.heartbeat-interval-max-ms</name>
    <value>1000</value>
  </property>

  <property>
    <description>If heart-beat interval scaling is enabled, this controls
      the degree of adjustment when speeding up heartbeat intervals.
      At 1.0, 20% less than average CPU utilization will result in a 20%
      decrease in heartbeat interval.
    </description>
    <name>
      yarn.resourcemanager.nodemanagers.heartbeat-interval-speedup-factor
    </name>
    <value>1.0</value>
  </property>

  <property>
    <description>If heart-beat interval scaling is enabled, this controls
      the degree of adjustment when slowing down heartbeat intervals.
      At 1.0, 20% greater than average CPU utilization will result in a 20%
      increase in heartbeat interval.
    </description>
    <name>
      yarn.resourcemanager.nodemanagers.heartbeat-interval-slowdown-factor
    </name>
    <value>1.0</value>
  </property>

  <property>
    <description>The Number of consecutive missed heartbeats after which node will be
    skipped from scheduling</description>
    <name>yarn.scheduler.skip.node.multiplier</name>
    <value>2</value>
  </property>

  <property>
    <description>The minimum allowed version of a connecting nodemanager.  The valid values are
      NONE (no version checking), EqualToRM (the nodemanager's version is equal to
      or greater than the RM version), or a Version String.</description>
    <name>yarn.resourcemanager.nodemanager.minimum.version</name>
    <value>NONE</value>
  </property>

  <property>
    <description>Enable a set of periodic monitors (specified in
        yarn.resourcemanager.scheduler.monitor.policies) that affect the
        scheduler.</description>
    <name>yarn.resourcemanager.scheduler.monitor.enable</name>
    <value>false</value>
  </property>

  <property>
    <description>The list of SchedulingEditPolicy classes that interact with
        the scheduler. A particular module may be incompatible with the
        scheduler, other policies, or a configuration of either.</description>
    <name>yarn.resourcemanager.scheduler.monitor.policies</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.monitor.capacity.ProportionalCapacityPreemptionPolicy</value>
  </property>

  <property>
    <description>The class to use as the configuration provider.
    If org.apache.hadoop.yarn.LocalConfigurationProvider is used,
    the local configuration will be loaded.
    If org.apache.hadoop.yarn.FileSystemBasedConfigurationProvider is used,
    the configuration which will be loaded should be uploaded to remote File system first.
    </description>
    <name>yarn.resourcemanager.configuration.provider-class</name>
    <value>org.apache.hadoop.yarn.LocalConfigurationProvider</value>
    <!-- <value>org.apache.hadoop.yarn.FileSystemBasedConfigurationProvider</value> -->
  </property>

  <property>
    <description>
    The value specifies the file system (e.g. HDFS) path where ResourceManager
    loads configuration if yarn.resourcemanager.configuration.provider-class
    is set to org.apache.hadoop.yarn.FileSystemBasedConfigurationProvider.
    </description>
    <name>yarn.resourcemanager.configuration.file-system-based-store</name>
    <value>/yarn/conf</value>
  </property>

  <property>
    <description>The setting that controls whether yarn system metrics is
    published to the Timeline server (version one) or not, by RM.
    This configuration is now deprecated in favor of
    yarn.system-metrics-publisher.enabled.</description>
    <name>yarn.resourcemanager.system-metrics-publisher.enabled</name>
    <value>false</value>
  </property>

  <property>
    <description>The setting that controls whether yarn system metrics is
    published on the Timeline service or not by RM And NM.</description>
    <name>yarn.system-metrics-publisher.enabled</name>
    <value>false</value>
  </property>

  <property>
    <description>The setting that controls whether yarn container events are
    published to the timeline service or not by RM. This configuration setting
    is for ATS V2.</description>
    <name>yarn.rm.system-metrics-publisher.emit-container-events</name>
    <value>false</value>
  </property>


  <property>
    <description>Number of worker threads that send the yarn system metrics
    data.</description>
    <name>yarn.resourcemanager.system-metrics-publisher.dispatcher.pool-size</name>
    <value>10</value>
  </property>

  <property>
    <description>
      This setting enables/disables timeline server v1 publisher to publish timeline events in batch.
    </description>
    <name>yarn.resourcemanager.system-metrics-publisher.timeline-server-v1.enable-batch</name>
    <value>false</value>
  </property>

  <property>
    <description>
      The size of timeline server v1 publisher sending events in one request.
    </description>
    <name>yarn.resourcemanager.system-metrics-publisher.timeline-server-v1.batch-size</name>
    <value>1000</value>
  </property>

  <property>
    <description>
      When enable batch publishing in timeline server v1, we must avoid that the
      publisher waits for a batch to be filled up and hold events in buffer for long
      time. So we add another thread which send event's in the buffer periodically.
      This config sets the interval of the cyclical sending thread.
    </description>
    <name>yarn.resourcemanager.system-metrics-publisher.timeline-server-v1.interval-seconds</name>
    <value>60</value>
  </property>

  <property>
    <description>Number of diagnostics/failure messages can be saved in RM for
    log aggregation. It also defines the number of diagnostics/failure
    messages can be shown in log aggregation web ui.</description>
    <name>yarn.resourcemanager.max-log-aggregation-diagnostics-in-memory</name>
    <value>10</value>
  </property>

  <!-- Node Manager Configs -->

  <property>
    <description>
    RM DelegationTokenRenewer thread count
    </description>
    <name>yarn.resourcemanager.delegation-token-renewer.thread-count</name>
    <value>50</value>
  </property>

  <property>
    <description>
    RM secret key update interval in ms
    </description>
    <name>yarn.resourcemanager.delegation.key.update-interval</name>
    <value>86400000</value>
  </property>

  <property>
    <description>
    RM delegation token maximum lifetime in ms
    </description>
    <name>yarn.resourcemanager.delegation.token.max-lifetime</name>
    <value>604800000</value>
  </property>

  <property>
    <description>
    RM delegation token update interval in ms
    </description>
    <name>yarn.resourcemanager.delegation.token.renew-interval</name>
    <value>86400000</value>
  </property>

  <property>
    <description>
      This configuration is used for
      how often the tokens are scanned for expired tokens in milliseconds.
      the background thread(delegation token remover thread)
      will delete expired tokens after the configured time.
      the default value is 1h.
    </description>
    <name>yarn.resourcemanager.delegation.token.remove-scan-interval</name>
    <value>1h</value>
  </property>

  <property>
    <description>
    RM DelegationTokenRenewer thread timeout
    </description>
    <name>yarn.resourcemanager.delegation-token-renewer.thread-timeout</name>
    <value>60s</value>
  </property>

  <property>
    <description>
    Default maximum number of retries for each RM DelegationTokenRenewer thread
    </description>
    <name>yarn.resourcemanager.delegation-token-renewer.thread-retry-max-attempts</name>
    <value>10</value>
  </property>

  <property>
    <description>
    Time interval between each RM DelegationTokenRenewer thread retry attempt
    </description>
    <name>yarn.resourcemanager.delegation-token-renewer.thread-retry-interval</name>
    <value>60s</value>
  </property>

  <property>
    <description>
    Thread pool size for RMApplicationHistoryWriter.
    </description>
    <name>yarn.resourcemanager.history-writer.multi-threaded-dispatcher.pool-size</name>
    <value>10</value>
  </property>

  <property>
    <description>
    Comma-separated list of values (in minutes) for schedule queue related
    metrics.
    </description>
    <name>yarn.resourcemanager.metrics.runtime.buckets</name>
    <value>60,300,1440</value>
  </property>

  <property>
    <description>
    Interval for the roll over for the master key used to generate
    NodeManager tokens.  It is expected to be set to a value much larger
    than yarn.nm.liveness-monitor.expiry-interval-ms.
    </description>
    <name>yarn.resourcemanager.nm-tokens.master-key-rolling-interval-secs</name>
    <value>86400</value>
  </property>

  <property>
    <description>
    Flag to enable the ResourceManager reservation system.
    </description>
    <name>yarn.resourcemanager.reservation-system.enable</name>
    <value>false</value>
  </property>

  <property>
    <description>
    The Java class to use as the ResourceManager reservation system.
    By default, is set to
    org.apache.hadoop.yarn.server.resourcemanager.reservation.CapacityReservationSystem
    when using CapacityScheduler and is set to
    org.apache.hadoop.yarn.server.resourcemanager.reservation.FairReservationSystem
    when using FairScheduler.
    </description>
    <name>yarn.resourcemanager.reservation-system.class</name>
    <value></value>
  </property>

  <property>
    <description>
    The plan follower policy class name to use for the ResourceManager
    reservation system.
    By default, is set to
    org.apache.hadoop.yarn.server.resourcemanager.reservation.CapacitySchedulerPlanFollower
    is used when using CapacityScheduler, and is set to
    org.apache.hadoop.yarn.server.resourcemanager.reservation.FairSchedulerPlanFollower
    when using FairScheduler.
    </description>
    <name>yarn.resourcemanager.reservation-system.plan.follower</name>
    <value></value>
  </property>

  <property>
    <description>
    Step size of the reservation system in ms
    </description>
    <name>yarn.resourcemanager.reservation-system.planfollower.time-step</name>
    <value>1000</value>
  </property>

  <property>
    <description>
    The expiry interval for a container
    </description>
    <name>yarn.resourcemanager.rm.container-allocation.expiry-interval-ms</name>
    <value>600000</value>
  </property>

  <property>
    <description>
    Flag to enable/disable resource profiles
    </description>
    <name>yarn.resourcemanager.resource-profiles.enabled</name>
    <value>false</value>
  </property>

  <property>
    <description>
    If resource profiles is enabled, source file for the profiles
    </description>
    <name>yarn.resourcemanager.resource-profiles.source-file</name>
    <value>resource-profiles.json</value>
  </property>

  <!-- Node Manager Configuration -->

  <property>
    <description>The hostname of the NM.</description>
    <name>yarn.nodemanager.hostname</name>
    <value>0.0.0.0</value>
  </property>
  
  <property>
    <description>The address of the container manager in the NM.</description>
    <name>yarn.nodemanager.address</name>
    <value>${yarn.nodemanager.hostname}:0</value>
  </property>

  <property>
    <description>
      The actual address the server will bind to. If this optional address is
      set, the RPC and webapp servers will bind to this address and the port specified in
      yarn.nodemanager.address and yarn.nodemanager.webapp.address, respectively. This is
      most useful for making NM listen to all interfaces by setting to 0.0.0.0.
    </description>
    <name>yarn.nodemanager.bind-host</name>
    <value></value>
  </property>

  <property>
    <description>
      Environment variables that should be forwarded from the NodeManager's
      environment to the container's, specified as a comma separated list of
      VARNAME=value pairs.

      To define environment variables individually, you can specify
      multiple properties of the form yarn.nodemanager.admin-env.VARNAME,
      where VARNAME is the name of the environment variable. This is the only
      way to add a variable when its value contains commas.
    </description>
    <name>yarn.nodemanager.admin-env</name>
    <value>MALLOC_ARENA_MAX=$MALLOC_ARENA_MAX</value>
  </property>

  <property>
    <description>
      * PATH components that will be prepended to the user's path.
      * If this is defined and the user does not define PATH, NM will also
      * append ":$PATH" to prevent this from eclipsing the PATH defined in
      * the container. This feature is only available for Linux.
    </description>
    <name>yarn.nodemanager.force.path</name>
    <value></value>
  </property>

  <property>
    <description>Environment variables that containers may override rather than use NodeManager's default.</description>
    <name>yarn.nodemanager.env-whitelist</name>
    <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ</value>
  </property>

  <property>
    <description>who will execute(launch) the containers.</description>
    <name>yarn.nodemanager.container-executor.class</name>
    <value>org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor</value>
  </property>

  <property>
    <description>Comma separated List of container state transition listeners.</description>
    <name>yarn.nodemanager.container-state-transition-listener.classes</name>
    <value></value>
  </property>

  <property>
    <description>Number of threads container manager uses.</description>
    <name>yarn.nodemanager.container-manager.thread-count</name>
    <value>20</value>
  </property>

    <property>
    <description>Number of threads collector service uses.</description>
    <name>yarn.nodemanager.collector-service.thread-count</name>
    <value>5</value>
  </property>

  <property>
    <description>Number of threads used in cleanup.</description>
    <name>yarn.nodemanager.delete.thread-count</name>
    <value>4</value>
  </property>

  <property>
    <description>
      How long the container executor should wait for the exit code file to
      appear after a reacquired container has exited.
    </description>
    <name>yarn.nodemanager.container-executor.exit-code-file.timeout-ms</name>
    <value>2000</value>
  </property>

  <property>
    <description>
      At the NM, the policy to determine whether to queue an
      OPPORTUNISTIC container or not.
      If set to BY_QUEUE_LEN, uses the queue capacity, as set by
      yarn.nodemanager.opportunistic-containers-max-queue-length
      to limit how many containers to accept/queue.
      If set to BY_RESOURCES, limits the number of containers
      accepted based on the resource capacity of the node.
    </description>
    <name>yarn.nodemanager.opportunistic-containers-queue-policy</name>
    <value>BY_QUEUE_LEN</value>
  </property>

  <property>
    <description>
      Max number of OPPORTUNISTIC containers to queue at the
      nodemanager (NM). If the value is 0 or negative,
      NMs do not allow any OPPORTUNISTIC containers.
      If the value is positive, the NM caps the number of OPPORTUNISTIC
      containers that can be queued at the NM.
    </description>
    <name>yarn.nodemanager.opportunistic-containers-max-queue-length</name>
    <value>0</value>
  </property>

  <property>
    <description>
      Number of seconds after an application finishes before the nodemanager's 
      DeletionService will delete the application's localized file directory
      and log directory.
      
      To diagnose YARN application problems, set this property's value large
      enough (for example, to 600 = 10 minutes) to permit examination of these
      directories. After changing the property's value, you must restart the 
      nodemanager in order for it to have an effect.

      The roots of YARN applications' work directories is configurable with
      the yarn.nodemanager.local-dirs property (see below), and the roots
      of the YARN applications' log directories is configurable with the
      yarn.nodemanager.log-dirs property (see also below).
    </description>
    <name>yarn.nodemanager.delete.debug-delay-sec</name>
    <value>0</value>
  </property>

  <property>
    <description>Keytab for NM.</description>
    <name>yarn.nodemanager.keytab</name>
    <value>/etc/krb5.keytab</value>
  </property>

  <property>
    <description>List of directories to store localized files in. An 
      application's localized file directory will be found in:
      ${yarn.nodemanager.local-dirs}/usercache/${user}/appcache/application_${appid}.
      Individual containers' work directories, called container_${contid}, will
      be subdirectories of this.
   </description>
    <name>yarn.nodemanager.local-dirs</name>
    <value>${hadoop.tmp.dir}/nm-local-dir</value>
  </property>

  <property>
    <description>It limits the maximum number of files which will be localized
      in a single local directory. If the limit is reached then sub-directories
      will be created and new files will be localized in them. If it is set to
      a value less than or equal to 36 [which are sub-directories (0-9 and then
      a-z)] then NodeManager will fail to start. For example; [for public
      cache] if this is configured with a value of 40 ( 4 files +
      36 sub-directories) and the local-dir is "/tmp/local-dir1" then it will
      allow 4 files to be created directly inside "/tmp/local-dir1/filecache".
      For files that are localized further it will create a sub-directory "0"
      inside "/tmp/local-dir1/filecache" and will localize files inside it
      until it becomes full. If a file is removed from a sub-directory that
      is marked full, then that sub-directory will be used back again to
      localize files.
   </description>
    <name>yarn.nodemanager.local-cache.max-files-per-directory</name>
    <value>8192</value>
  </property>

  <property>
    <description>Address where the localizer IPC is.</description>
    <name>yarn.nodemanager.localizer.address</name>
    <value>${yarn.nodemanager.hostname}:8040</value>
  </property>


  <property>
    <description>Address where the collector service IPC is.</description>
    <name>yarn.nodemanager.collector-service.address</name>
    <value>${yarn.nodemanager.hostname}:8048</value>
  </property>

  <property>
    <description>The setting that controls whether yarn container events are
      published to the timeline service or not by NM. This configuration setting
      is for ATS V2.</description>
    <name>yarn.nodemanager.emit-container-events</name>
    <value>true</value>
  </property>

  <property>
    <description>Interval in between cache cleanups.</description>
    <name>yarn.nodemanager.localizer.cache.cleanup.interval-ms</name>
    <value>600000</value>
  </property>

  <property>
    <description>Target size of localizer cache in MB, per nodemanager. It is
      a target retention size that only includes resources with PUBLIC and 
      PRIVATE visibility and excludes resources with APPLICATION visibility
    </description>
    <name>yarn.nodemanager.localizer.cache.target-size-mb</name>
    <value>10240</value>
  </property>

  <property>
    <description>Number of threads to handle localization requests.</description>
    <name>yarn.nodemanager.localizer.client.thread-count</name>
    <value>5</value>
  </property>

  <property>
    <description>Number of threads to use for localization fetching.</description>
    <name>yarn.nodemanager.localizer.fetch.thread-count</name>
    <value>4</value>
  </property>

  <property>
    <description>
    </description>
    <name>yarn.nodemanager.container-localizer.java.opts</name>
    <value>-Xmx256m</value>
  </property>

  <property>
    <description>
      The log level for container localizer while it is an independent process.
    </description>
    <name>yarn.nodemanager.container-localizer.log.level</name>
    <value>INFO</value>
  </property>

  <property>
    <description>
      Where to store container logs. An application's localized log directory
      will be found in ${yarn.nodemanager.log-dirs}/application_${appid}.
      Individual containers' log directories will be below this, in directories 
      named container_{$contid}. Each container directory will contain the files
      stderr, stdin, and syslog generated by that container.
    </description>
    <name>yarn.nodemanager.log-dirs</name>
    <value>${yarn.log.dir}/userlogs</value>
  </property>

  <property>
    <description>
      The permissions settings used for the creation of container
      directories when using DefaultContainerExecutor.  This follows
      standard user/group/all permissions format.
    </description>
    <name>yarn.nodemanager.default-container-executor.log-dirs.permissions</name>
    <value>710</value>
  </property>

  <property>
    <description>Whether to enable log aggregation. Log aggregation collects
      each container's logs and moves these logs onto a file-system, for e.g.
      HDFS, after the application completes. Users can configure the
      "yarn.nodemanager.remote-app-log-dir" and
      "yarn.nodemanager.remote-app-log-dir-suffix" properties to determine
      where these logs are moved to. Users can access the logs via the
      Application Timeline Server.
    </description>
    <name>yarn.log-aggregation-enable</name>
    <value>false</value>
  </property>

  <property>
    <description>
      Whether to enable application placement based on user ID passed via
      application tags. When it is enabled, userid=&lt;userId&gt;
      pattern will be checked and if found, the application will be placed
      onto the found user's queue,
      if the original user has enough rights on the passed user's queue.
    </description>
    <name>yarn.resourcemanager.application-tag-based-placement.enable</name>
    <value>false</value>
  </property>

  <property>
    <description>
      Comma separated list of users who can use the application tag based
      placement, if it is enabled.
    </description>
    <name>yarn.resourcemanager.application-tag-based-placement.username.whitelist</name>
    <value></value>
  </property>

  <property>
    <description>How long to keep aggregation logs before deleting them.  -1 disables. 
    Be careful set this too small and you will spam the name node.</description>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>-1</value>
  </property> 
  
  <property>
    <description>How long to wait between aggregated log retention checks.
    If set to 0 or a negative value then the value is computed as one-tenth
    of the aggregated log retention time. Be careful set this too small and
    you will spam the name node.</description>
    <name>yarn.log-aggregation.retain-check-interval-seconds</name>
    <value>-1</value>
  </property>

  <property>
    <description>The log files created under NM Local Directories
    will be logged if it exceeds the configured bytes. This
    only takes effect if log4j level is at least Debug.</description>
    <name>yarn.log-aggregation.debug.filesize</name>
    <value>104857600</value>
  </property>

  <property>
    <description>Specify which log file controllers we will support. The first
    file controller we add will be used to write the aggregated logs.
    This comma separated configuration will work with the configuration:
    yarn.log-aggregation.file-controller.%s.class which defines the supported
    file controller's class. By default, the TFile controller would be used.
    The user could override this configuration by adding more file controllers.
    To support back-ward compatibility, make sure that we always
    add TFile file controller.</description>
    <name>yarn.log-aggregation.file-formats</name>
    <value>TFile</value>
  </property>

  <property>
    <description>Class that supports TFile read and write operations.</description>
    <name>yarn.log-aggregation.file-controller.TFile.class</name>
    <value>org.apache.hadoop.yarn.logaggregation.filecontroller.tfile.LogAggregationTFileController</value>
  </property>

  <property>
    <description>
    How long for ResourceManager to wait for NodeManager to report its
    log aggregation status. If waiting time of which the log aggregation
    status is reported from NodeManager exceeds the configured value, RM
    will report log aggregation status for this NodeManager as TIME_OUT.
    This configuration will be used in NodeManager as well to decide
    whether and when to delete the cached log aggregation status.
    </description>
    <name>yarn.log-aggregation-status.time-out.ms</name>
    <value>600000</value>
  </property>

  <property>
    <description>Whether to clean up nodemanager logs when log aggregation is enabled. Setting to
      false disables the cleanup nodemanager logging, and it causes disk full in the long run. Users
      can set to false for test-only purpose.
    </description>
    <name>yarn.log-aggregation.enable-local-cleanup</name>
    <value>true</value>
  </property>

  <property>
    <description>Time in seconds to retain user logs. Only applicable if
    log aggregation is disabled
    </description>
    <name>yarn.nodemanager.log.retain-seconds</name>
    <value>10800</value>
  </property>

  <property>
    <description>Where to aggregate logs to.</description>
    <name>yarn.nodemanager.remote-app-log-dir</name>
    <value>/tmp/logs</value>
  </property>
  <property>
    <description>The remote log dir will be created at 
      {yarn.nodemanager.remote-app-log-dir}/${user}/{thisParam}
    </description>
    <name>yarn.nodemanager.remote-app-log-dir-suffix</name>
    <value>logs</value>
  </property>

  <property>
    <description>If set to true, the older application log directory
    will be considered while fetching application logs.
    </description>
    <name>yarn.nodemanager.remote-app-log-dir-include-older</name>
    <value>true</value>
  </property>

  <property>
    <description>If the NodeManager creates the remote-app-log-dir folder,
    it will be created with this groupname.
    </description>
    <name>yarn.nodemanager.remote-app-log-dir.groupname</name>
    <value></value>
  </property>

  <property>
    <description>Generate additional logs about container launches.
    Currently, this creates a copy of the launch script and lists the
    directory contents of the container work dir. When listing directory
    contents, we follow symlinks to a max-depth of 5(including symlinks
    which point to outside the container work dir) which may lead to a
    slowness in launching containers.
    </description>
    <name>yarn.nodemanager.log-container-debug-info.enabled</name>
    <value>true</value>
  </property>

  <property>
    <description>Amount of physical memory, in MB, that can be allocated 
    for containers. If set to -1 and
    yarn.nodemanager.resource.detect-hardware-capabilities is true, it is
    automatically calculated(in case of Windows and Linux).
    In other cases, the default is 8192MB.
    </description>
    <name>yarn.nodemanager.resource.memory-mb</name>
    <value>-1</value>
  </property>

  <property>
    <description>Amount of physical memory, in MB, that is reserved
    for non-YARN processes. This configuration is only used if
    yarn.nodemanager.resource.detect-hardware-capabilities is set
    to true and yarn.nodemanager.resource.memory-mb is -1. If set
    to -1, this amount is calculated as
    20% of (system memory - 2*HADOOP_HEAPSIZE)
    </description>
    <name>yarn.nodemanager.resource.system-reserved-memory-mb</name>
    <value>-1</value>
  </property>

  <property>
    <description>Whether YARN CGroups memory tracking is enabled.</description>
    <name>yarn.nodemanager.resource.memory.enabled</name>
    <value>false</value>
  </property>

  <property>
    <description>Whether YARN CGroups strict memory enforcement is enabled.
    </description>
    <name>yarn.nodemanager.resource.memory.enforced</name>
    <value>true</value>
  </property>

  <property>
    <description>If memory limit is enforced, this the percentage of soft limit
      compared to the memory assigned to the container. If there is memory
      pressure container memory usage will be pushed back to its soft limit
      by swapping out memory.
    </description>
    <name>yarn.nodemanager.resource.memory.cgroups.soft-limit-percentage</name>
    <value>90.0</value>
  </property>

  <property>
    <description>Container swappiness is the likelihood a page will be swapped
      out compared to be kept in memory. Value is between 0-100.
    </description>
    <name>yarn.nodemanager.resource.memory.cgroups.swappiness</name>
    <value>0</value>
  </property>

  <property>
    <description>Whether physical memory limits will be enforced for
    containers.</description>
    <name>yarn.nodemanager.pmem-check-enabled</name>
    <value>true</value>
  </property>

  <property>
    <description>Whether virtual memory limits will be enforced for
    containers.</description>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>true</value>
  </property>

  <property>
    <description>Ratio between virtual memory to physical memory when
    setting memory limits for containers. Container allocations are
    expressed in terms of physical memory, and virtual memory usage
    is allowed to exceed this allocation by this ratio.
    </description>
    <name>yarn.nodemanager.vmem-pmem-ratio</name>
    <value>2.1</value>
  </property>

  <property>
    <description>Number of vcores that can be allocated
    for containers. This is used by the RM scheduler when allocating
    resources for containers. This is not used to limit the number of
    CPUs used by YARN containers. If it is set to -1 and
    yarn.nodemanager.resource.detect-hardware-capabilities is true, it is
    automatically determined from the hardware in case of Windows and Linux.
    In other cases, number of vcores is 8 by default.</description>
    <name>yarn.nodemanager.resource.cpu-vcores</name>
    <value>-1</value>
  </property>

  <property>
    <description>Flag to determine if logical processors(such as
    hyperthreads) should be counted as cores. Only applicable on Linux
    when yarn.nodemanager.resource.cpu-vcores is set to -1 and
    yarn.nodemanager.resource.detect-hardware-capabilities is true.
    </description>
    <name>yarn.nodemanager.resource.count-logical-processors-as-cores</name>
    <value>false</value>
  </property>

  <property>
    <description>Multiplier to determine how to convert phyiscal cores to
    vcores. This value is used if yarn.nodemanager.resource.cpu-vcores
    is set to -1(which implies auto-calculate vcores) and
    yarn.nodemanager.resource.detect-hardware-capabilities is set to true. The
    number of vcores will be calculated as
    number of CPUs * multiplier.
    </description>
    <name>yarn.nodemanager.resource.pcores-vcores-multiplier</name>
    <value>1.0</value>
  </property>

  <property>
    <description>
    Thread pool size for LogAggregationService in Node Manager.
    </description>
    <name>yarn.nodemanager.logaggregation.threadpool-size-max</name>
    <value>100</value>
  </property>

  <property>
    <description>Percentage of CPU that can be allocated
    for containers. This setting allows users to limit the amount of
    CPU that YARN containers use. Currently functional only
    on Linux using cgroups. The default is to use 100% of CPU.
    </description>
    <name>yarn.nodemanager.resource.percentage-physical-cpu-limit</name>
    <value>100</value>
  </property>

  <property>
    <description>Enable auto-detection of node capabilities such as
    memory and CPU.
    </description>
    <name>yarn.nodemanager.resource.detect-hardware-capabilities</name>
    <value>false</value>
  </property>

  <property>
    <description>NM Webapp address.</description>
    <name>yarn.nodemanager.webapp.address</name>
    <value>${yarn.nodemanager.hostname}:8042</value>
  </property>

  <property>
    <description>
    The https adddress of the NM web application.
    </description>
    <name>yarn.nodemanager.webapp.https.address</name>
    <value>0.0.0.0:8044</value>
  </property>

  <property>
    <description>
    The Kerberos keytab file to be used for spnego filter for the NM web
    interface.
    </description>
    <name>yarn.nodemanager.webapp.spnego-keytab-file</name>
    <value></value>
  </property>

  <property>
    <description>
    The Kerberos principal to be used for spnego filter for the NM web
    interface.
    </description>
    <name>yarn.nodemanager.webapp.spnego-principal</name>
    <value></value>
  </property>

  <property>
    <description>How often to monitor the node and the containers.
    If 0 or negative, monitoring is disabled.</description>
    <name>yarn.nodemanager.resource-monitor.interval-ms</name>
    <value>3000</value>
  </property>

  <property>
    <description>Class that calculates current resource utilization.</description>
    <name>yarn.nodemanager.resource-calculator.class</name>
  </property>

  <property>
    <description>Enable container monitor</description>
    <name>yarn.nodemanager.container-monitor.enabled</name>
    <value>true</value>
  </property>

  <property>
    <description>How often to monitor containers. If not set, the value for
    yarn.nodemanager.resource-monitor.interval-ms will be used.
    If 0 or negative, container monitoring is disabled.</description>
    <name>yarn.nodemanager.container-monitor.interval-ms</name>
  </property>

  <property>
    <description>Flag to enable the container log monitor which enforces
      container log directory size limits.</description>
    <name>yarn.nodemanager.container-log-monitor.enable</name>
    <value>false</value>
  </property>

  <property>
    <description>How often to check the usage of a container's log directories
      in milliseconds</description>
    <name>yarn.nodemanager.container-log-monitor.interval-ms</name>
    <value>60000</value>
  </property>

  <property>
    <description>The disk space limit, in bytes, for a single
      container log directory</description>
    <name>yarn.nodemanager.container-log-monitor.dir-size-limit-bytes</name>
    <value>1000000000</value>
  </property>

  <property>
    <description>The disk space limit, in bytes, for all of a container's
      logs</description>
    <name>yarn.nodemanager.container-log-monitor.total-size-limit-bytes</name>
    <value>10000000000</value>
  </property>

  <property>
    <description>Class that calculates containers current resource utilization.
    If not set, the value for yarn.nodemanager.resource-calculator.class will
    be used.</description>
    <name>yarn.nodemanager.container-monitor.resource-calculator.class</name>
  </property>

  <property>
    <description>The nodemanager health check scripts to run.</description>
    <name>yarn.nodemanager.health-checker.scripts</name>
    <value>script</value>
  </property>

  <property>
    <description>Health check script time out period.</description>
    <name>yarn.nodemanager.health-checker.timeout-ms</name>
    <value>1200000</value>
  </property>

  <property>
    <description>Whether or not to run the node health script
    before the NM starts up.</description>
    <name>yarn.nodemanager.health-checker.run-before-startup</name>
    <value>false</value>
  </property>

  <property>
    <description>Frequency of running node health scripts.</description>
    <name>yarn.nodemanager.health-checker.interval-ms</name>
    <value>600000</value>
  </property>

  <property>
    <description>Frequency of running disk health checker code.</description>
    <name>yarn.nodemanager.disk-health-checker.interval-ms</name>
    <value>120000</value>
  </property>

  <property>
    <description>The minimum fraction of number of disks to be healthy for the
    nodemanager to launch new containers. This correspond to both
    yarn.nodemanager.local-dirs and yarn.nodemanager.log-dirs. i.e. If there
    are less number of healthy local-dirs (or log-dirs) available, then
    new containers will not be launched on this node.</description>
    <name>yarn.nodemanager.disk-health-checker.min-healthy-disks</name>
    <value>0.25</value>
  </property>

  <property>
    <description>Enable/Disable the disk utilisation percentage
      threshold for disk health checker.</description>
    <name>yarn.nodemanager.disk-health-checker.disk-utilization-threshold.enabled</name>
    <value>true</value>
  </property>

  <property>
    <description> Enable/Disable the minimum disk free
      space threshold for disk health checker.</description>
    <name>yarn.nodemanager.disk-health-checker.disk-free-space-threshold.enabled</name>
    <value>true</value>
  </property>

  <property>
    <description>The maximum percentage of disk space utilization allowed after 
    which a disk is marked as bad. Values can range from 0.0 to 100.0. 
    If the value is greater than or equal to 100, the nodemanager will check 
    for full disk. This applies to yarn.nodemanager.local-dirs and
    yarn.nodemanager.log-dirs when
      yarn.nodemanager.disk-health-checker.disk-utilization-threshold.enabled is true.</description>
    <name>yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage</name>
    <value>90.0</value>
  </property>

  <property>
    <description>The low threshold percentage of disk space used when a bad disk is
    marked as good. Values can range from 0.0 to 100.0. This applies to
    yarn.nodemanager.local-dirs and yarn.nodemanager.log-dirs.
    Note that if its value is more than yarn.nodemanager.disk-health-checker.
    max-disk-utilization-per-disk-percentage or not set, it will be set to the same value as
    yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage.</description>
    <name>yarn.nodemanager.disk-health-checker.disk-utilization-watermark-low-per-disk-percentage</name>
    <value></value>
  </property>

  <property>
    <description>The minimum space in megabytes that must be available on a disk for
    it to be used. If space on a disk falls below this threshold, it will be marked
    as bad. This applies to yarn.nodemanager.local-dirs and
    yarn.nodemanager.log-dirs when
      yarn.nodemanager.disk-health-checker.disk-free-space-threshold.enabled is true.</description>
    <name>yarn.nodemanager.disk-health-checker.min-free-space-per-disk-mb</name>
    <value>0</value>
  </property>

  <property>
    <description>The minimum space in megabytes that must be available on a bad
    disk for it to be marked as good.  This value should not be less
    than yarn.nodemanager.disk-health-checker.min-free-space-per-disk-mb.
    If it is less than yarn.nodemanager.disk-health-checker.min-free-space-per-disk-mb,
    or it is not set, it will be set to the
    same value as yarn.nodemanager.disk-health-checker.min-free-space-per-disk-mb.
    This applies to yarn.nodemanager.local-dirs and yarn.nodemanager.log-dirs.</description>
    <name>yarn.nodemanager.disk-health-checker.min-free-space-per-disk-watermark-high-mb</name>
    <value>0</value>
  </property>

  <property>
    <description>The path to the Linux container executor.</description>
    <name>yarn.nodemanager.linux-container-executor.path</name>
  </property>

  <property>
    <description>The class which should help the LCE handle resources.</description>
    <name>yarn.nodemanager.linux-container-executor.resources-handler.class</name>
    <value>org.apache.hadoop.yarn.server.nodemanager.util.DefaultLCEResourcesHandler</value>
    <!-- <value>org.apache.hadoop.yarn.server.nodemanager.util.CgroupsLCEResourcesHandler</value> -->
  </property>

  <property>
    <description>The cgroups hierarchy under which to place YARN proccesses (cannot contain commas).
    If yarn.nodemanager.linux-container-executor.cgroups.mount is false
    (that is, if cgroups have been pre-configured) and the YARN user has write
    access to the parent directory, then the directory will be created.
    If the directory already exists, the administrator has to give YARN
    write permissions to it recursively.
    This property only applies when the LCE resources handler is set to
    CgroupsLCEResourcesHandler.</description>
    <name>yarn.nodemanager.linux-container-executor.cgroups.hierarchy</name>
    <value>/hadoop-yarn</value>
  </property>

  <property>
    <description>Whether the LCE should attempt to mount cgroups if not found.
    This property only applies when the LCE resources handler is set to
    CgroupsLCEResourcesHandler.
    </description>
    <name>yarn.nodemanager.linux-container-executor.cgroups.mount</name>
    <value>false</value>
  </property>

  <property>
    <description>This property sets the path from which YARN will read the
    CGroups configuration. YARN has built-in functionality to discover the
    system CGroup mount paths, so use this property only if YARN's automatic
    mount path discovery does not work.

    The path specified by this property must exist before the NodeManager is
    launched.
    If yarn.nodemanager.linux-container-executor.cgroups.mount is set to true,
    YARN will first try to mount the CGroups at the specified path before
    reading them.
    If yarn.nodemanager.linux-container-executor.cgroups.mount is set to
    false, YARN will read the CGroups at the specified path.
    If this property is empty, YARN tries to detect the CGroups location.

    Please refer to NodeManagerCgroups.html in the documentation for further
    details.
    This property only applies when the LCE resources handler is set to
    CgroupsLCEResourcesHandler.
    </description>
    <name>yarn.nodemanager.linux-container-executor.cgroups.mount-path</name>
  </property>

  <property>
    <description>Delay in ms between attempts to remove linux cgroup</description>
    <name>yarn.nodemanager.linux-container-executor.cgroups.delete-delay-ms</name>
    <value>20</value>
  </property>

  <property>
    <description>This determines which of the two modes that LCE should use on
      a non-secure cluster.  If this value is set to true, then all containers
      will be launched as the user specified in
      yarn.nodemanager.linux-container-executor.nonsecure-mode.local-user.  If
      this value is set to false, then containers will run as the user who
      submitted the application.</description>
    <name>yarn.nodemanager.linux-container-executor.nonsecure-mode.limit-users</name>
    <value>true</value>
  </property>

  <property>
    <description>The UNIX user that containers will run as when
      Linux-container-executor is used in nonsecure mode (a use case for this
      is using cgroups) if the
      yarn.nodemanager.linux-container-executor.nonsecure-mode.limit-users is
      set to true.</description>
    <name>yarn.nodemanager.linux-container-executor.nonsecure-mode.local-user</name>
    <value>nobody</value>
  </property>

  <property>
    <description>The allowed pattern for UNIX user names enforced by
    Linux-container-executor when used in nonsecure mode (use case for this
    is using cgroups). The default value is taken from /usr/sbin/adduser</description>
    <name>yarn.nodemanager.linux-container-executor.nonsecure-mode.user-pattern</name>
    <value>^[_.A-Za-z0-9][-@_.A-Za-z0-9]{0,255}?[$]?$</value>
  </property>

  <property>
    <description>This flag determines whether apps should run with strict resource limits
    or be allowed to consume spare resources if they need them. For example, turning the
    flag on will restrict apps to use only their share of CPU, even if the node has spare
    CPU cycles. The default value is false i.e. use available resources. Please note that
    turning this flag on may reduce job throughput on the cluster. This setting does
    not apply to other subsystems like memory.</description>
    <name>yarn.nodemanager.linux-container-executor.cgroups.strict-resource-usage</name>
    <value>false</value>
  </property>

  <property>
    <description>Comma separated list of runtimes that are allowed when using
    LinuxContainerExecutor. The allowed values are default, docker, runc, and
    javasandbox.</description>
    <name>yarn.nodemanager.runtime.linux.allowed-runtimes</name>
    <value>default</value>
  </property>

  <property>
    <description>Default container runtime to use.</description>
    <name>yarn.nodemanager.runtime.linux.type</name>
    <value></value>
  </property>

  <property>
    <description>This configuration setting determines the capabilities
      assigned to docker containers when they are launched. While these may not
      be case-sensitive from a docker perspective, it is best to keep these
      uppercase. To run without any capabilities, set this value to
      "none" or "NONE"</description>
    <name>yarn.nodemanager.runtime.linux.docker.capabilities</name>
    <value>CHOWN,DAC_OVERRIDE,FSETID,FOWNER,MKNOD,NET_RAW,SETGID,SETUID,SETFCAP,SETPCAP,NET_BIND_SERVICE,SYS_CHROOT,KILL,AUDIT_WRITE</value>
  </property>

  <property>
    <description>Default docker image to be used when the docker runtime is
    selected.</description>
    <name>yarn.nodemanager.runtime.linux.docker.image-name</name>
    <value></value>
  </property>

  <property>
    <description>Default option to decide whether to pull the latest image
      or not.</description>
    <name>yarn.nodemanager.runtime.linux.docker.image-update</name>
    <value>false</value>
  </property>

  <property>
    <description>This configuration setting determines if privileged docker
      containers are allowed on this cluster. Privileged containers are granted
      the complete set of capabilities and are not subject to the limitations
      imposed by the device cgroup controller. In other words, privileged
      containers can do almost everything that the host can do. Use with
      extreme care.</description>
    <name>yarn.nodemanager.runtime.linux.docker.privileged-containers.allowed</name>
    <value>false</value>
  </property>

  <property>
    <description>This configuration setting determines who is allowed to run
      privileged docker containers on this cluster. Use with extreme care.
    </description>
    <name>yarn.nodemanager.runtime.linux.docker.privileged-containers.acl</name>
    <value></value>
  </property>

  <property>
    <description>The set of networks allowed when launching containers using the
      DockerContainerRuntime.</description>
    <name>yarn.nodemanager.runtime.linux.docker.allowed-container-networks</name>
    <value>host,none,bridge</value>
  </property>

  <property>
    <description>The network used when launching containers using the
      DockerContainerRuntime when no network is specified in the request
      . This network must be one of the (configurable) set of allowed container
      networks.</description>
    <name>yarn.nodemanager.runtime.linux.docker.default-container-network</name>
    <value>host</value>
  </property>

  <property>
    <description>The set of runtimes allowed when launching containers using the
      DockerContainerRuntime.</description>
    <name>yarn.nodemanager.runtime.linux.docker.allowed-container-runtimes</name>
    <value>runc</value>
  </property>

  <property>
    <description>This configuration setting determines whether the host's PID
      namespace is allowed for docker containers on this cluster.
      Use with care.</description>
    <name>yarn.nodemanager.runtime.linux.docker.host-pid-namespace.allowed</name>
    <value>false</value>
  </property>

  <property>
    <description>Property to enable docker user remapping</description>
    <name>yarn.nodemanager.runtime.linux.docker.enable-userremapping.allowed</name>
    <value>true</value>
  </property>

  <property>
    <description>lower limit for acceptable uids of user remapped user</description>
    <name>yarn.nodemanager.runtime.linux.docker.userremapping-uid-threshold</name>
    <value>1</value>
  </property>


  <property>
    <description>lower limit for acceptable gids of user remapped user</description>
    <name>yarn.nodemanager.runtime.linux.docker.userremapping-gid-threshold</name>
    <value>1</value>
  </property>

  <property>
    <description>Whether or not users are allowed to request that Docker
      containers honor the debug deletion delay. This is useful for
      troubleshooting Docker container related launch failures.</description>
    <name>yarn.nodemanager.runtime.linux.docker.delayed-removal.allowed</name>
    <value>false</value>
  </property>

  <property>
    <description>A configurable value to pass to the Docker Stop command. This value
      defines the number of seconds between the docker stop command sending
      a SIGTERM and a SIGKILL.</description>
    <name>yarn.nodemanager.runtime.linux.docker.stop.grace-period</name>
    <value>10</value>
  </property>

  <property>
    <description>The default list of read-only mounts to be bind-mounted
      into all Docker containers that use DockerContainerRuntime.</description>
    <name>yarn.nodemanager.runtime.linux.docker.default-ro-mounts</name>
    <value></value>
  </property>

  <property>
    <description>The default list of read-write mounts to be bind-mounted
      into all Docker containers that use DockerContainerRuntime.</description>
    <name>yarn.nodemanager.runtime.linux.docker.default-rw-mounts</name>
    <value></value>
  </property>

  <property>
    <description>The default list of tmpfs mounts to be mounted into all Docker
      containers that use DockerContainerRuntime.</description>
    <name>yarn.nodemanager.runtime.linux.docker.default-tmpfs-mounts</name>
    <value></value>
  </property>

  <property>
    <description>The runC image tag to manifest plugin
      class to be used.</description>
    <name>yarn.nodemanager.runtime.linux.runc.image-tag-to-manifest-plugin</name>
    <value>org.apache.hadoop.yarn.server.nodemanager.containermanager.linux.runtime.runc.ImageTagToManifestPlugin</value>
  </property>

  <property>
    <description>The runC manifest to resources plugin class to
      be used.</description>
    <name>yarn.nodemanager.runtime.linux.runc.manifest-to-resources-plugin</name>
    <value>org.apache.hadoop.yarn.server.nodemanager.containermanager.linux.runtime.runc.HdfsManifestToResourcesPlugin</value>
  </property>

  <property>
    <description>The HDFS location under which the oci image manifests, layers,
      and configs directories exist.</description>
    <name>yarn.nodemanager.runtime.linux.runc.image-toplevel-dir</name>
    <value>/runc-root</value>
  </property>

  <property>
    <description>Target count of layer mounts that we should keep on disk
      at one time.</description>
    <name>yarn.nodemanager.runtime.linux.runc.layer-mounts-to-keep</name>
    <value>100</value>
  </property>

  <property>
    <description>The interval in seconds between executions of
      reaping layer mounts.</description>
    <name>yarn.nodemanager.runtime.linux.runc.layer-mounts-interval-secs</name>
    <value>600</value>
  </property>

  <property>
    <description>Image to be used if no other image is specified.</description>
    <name>yarn.nodemanager.runtime.linux.runc.image-name</name>
    <value></value>
  </property>

  <property>
    <description>Allow or disallow privileged containers.</description>
    <name>yarn.nodemanager.runtime.linux.runc.privileged-containers.allowed</name>
    <value>false</value>
  </property>

  <property>
    <description>The set of networks allowed when launching containers
      using the RuncContainerRuntime.</description>
    <name>yarn.nodemanager.runtime.linux.runc.allowed-container-networks</name>
    <value>host,none,bridge</value>
  </property>

  <property>
    <description>The set of runtimes allowed when launching containers
      using the RuncContainerRuntime.</description>
    <name>yarn.nodemanager.runtime.linux.runc.allowed-container-runtimes</name>
    <value>runc</value>
  </property>

  <property>
    <description>ACL list for users allowed to run privileged
      containers.</description>
    <name>yarn.nodemanager.runtime.linux.runc.privileged-containers.acl</name>
    <value></value>
  </property>

  <property>
    <description>Allow host pid namespace for runC containers.
      Use with care.</description>
    <name>yarn.nodemanager.runtime.linux.runc.host-pid-namespace.allowed</name>
    <value>false</value>
  </property>

  <property>
    <description>The default list of read-only mounts to be bind-mounted
      into all runC containers that use RuncContainerRuntime.</description>
    <name>yarn.nodemanager.runtime.linux.runc.default-ro-mounts</name>
    <value></value>
  </property>

  <property>
    <description>The default list of read-write mounts to be bind-mounted
      into all runC containers that use RuncContainerRuntime.</description>
    <name>yarn.nodemanager.runtime.linux.runc.default-rw-mounts</name>
    <value></value>
  </property>

  <property>
    <description>Path to the seccomp profile to use with runC
      containers</description>
    <name>yarn.nodemanager.runtime.linux.runc.seccomp-profile</name>
    <value></value>
  </property>

  <property>
    <description>The HDFS location where the runC image tag to hash
      file exists.</description>
    <name>yarn.nodemanager.runtime.linux.runc.image-tag-to-manifest-plugin.hdfs-hash-file</name>
    <value>/runc-root/image-tag-to-hash</value>
  </property>

  <property>
    <description>The local file system location where the runC image tag
      to hash file exists.</description>
    <name>yarn.nodemanager.runtime.linux.runc.image-tag-to-manifest-plugin.local-hash-file</name>
    <value></value>
  </property>

  <property>
    <description>The interval in seconds between refreshing the hdfs image tag
      to hash cache.</description>
    <name>yarn.nodemanager.runtime.linux.runc.image-tag-to-manifest-plugin.cache-refresh-interval-secs</name>
    <value>60</value>
  </property>

  <property>
    <description>The number of manifests to cache in the image tag
      to hash cache.</description>
    <name>yarn.nodemanager.runtime.linux.runc.image-tag-to-manifest-plugin.num-manifests-to-cache</name>
    <value>10</value>
  </property>

  <property>
    <description>The timeout value in seconds for the values in
      the stat cache.</description>
    <name>yarn.nodemanager.runtime.linux.runc.hdfs-manifest-to-resources-plugin.stat-cache-timeout-interval-secs</name>
    <value>360</value>
  </property>

  <property>
    <description>The size of the stat cache which stores stats of the
      layers and config.</description>
    <name>yarn.nodemanager.runtime.linux.runc.hdfs-manifest-to-resources-plugin.stat-cache-size</name>
    <value>500</value>
  </property>

  <property>
    <description>The mode in which the Java Container Sandbox should run detailed by
      the JavaSandboxLinuxContainerRuntime.</description>
    <name>yarn.nodemanager.runtime.linux.sandbox-mode</name>
    <value>disabled</value>
  </property>

  <property>
    <description>Permissions for application local directories.</description>
    <name>yarn.nodemanager.runtime.linux.sandbox-mode.local-dirs.permissions</name>
    <value>read</value>
  </property>

  <property>
    <description>Location for non-default java policy file.</description>
    <name>yarn.nodemanager.runtime.linux.sandbox-mode.policy</name>
    <value></value>
  </property>

  <property>
    <description>The group which will run by default without the java security
      manager.</description>
    <name>yarn.nodemanager.runtime.linux.sandbox-mode.whitelist-group</name>
    <value></value>
  </property>

  <property>
    <description>This flag determines whether memory limit will be set for the Windows Job
    Object of the containers launched by the default container executor.</description>
    <name>yarn.nodemanager.windows-container.memory-limit.enabled</name>
    <value>false</value>
  </property>

  <property>
    <description>This flag determines whether CPU limit will be set for the Windows Job
    Object of the containers launched by the default container executor.</description>
    <name>yarn.nodemanager.windows-container.cpu-limit.enabled</name>
    <value>false</value>
  </property>

  <property>
    <description>
    Interval of time the linux container executor should try cleaning up
    cgroups entry when cleaning up a container.
    </description>
    <name>yarn.nodemanager.linux-container-executor.cgroups.delete-timeout-ms</name>
    <value>1000</value>
  </property>

  <property>
    <description>T-file compression types used to compress aggregated logs.</description>
    <name>yarn.nodemanager.log-aggregation.compression-type</name>
    <value>none</value>
  </property>

  <property>
    <description>The kerberos principal for the node manager.</description>
    <name>yarn.nodemanager.principal</name>
    <value></value>
  </property>

  <property>
    <description>A comma separated list of services where service name should only
      contain a-zA-Z0-9_ and can not start with numbers</description>
    <name>yarn.nodemanager.aux-services</name>
    <value></value>
    <!--<value>mapreduce_shuffle</value>-->
  </property>

  <property>
    <description>Boolean indicating whether loading aux services from a manifest
      is enabled. If enabled, aux services may be dynamically modified through
      reloading the manifest via filesystem changes or a REST API. When
      enabled, aux services configuration properties unrelated to the manifest
      will be ignored.</description>
    <name>yarn.nodemanager.aux-services.manifest.enabled</name>
    <value>false</value>
  </property>

  <property>
    <description>A file containing auxiliary service specifications.</description>
    <name>yarn.nodemanager.aux-services.manifest</name>
    <value></value>
  </property>

  <property>
    <description>Length of time in ms to wait between reloading aux services
      manifest. If 0 or less, manifest will not be reloaded.</description>
    <name>yarn.nodemanager.aux-services.manifest.reload-ms</name>
    <value>0</value>
  </property>

  <property>
    <description>Provide local directory which includes the related jar file as well as all the dependencies’
      jar file. We could specify the single jar file or use ${local_dir_to_jar}/* to load all
      jars under the dep directory.</description>
    <name>yarn.nodemanager.aux-services.%s.classpath</name>
    <value>NONE</value>
  </property>

  <property>
    <description>Normally this configuration shouldn't be manually set. The class would be loaded from customized
      classpath if it does not belong to system-classes. By default, the package org.apache.hadoop is part of the
      system-classes. If for example the class CustomAuxService is in the package org.apache.hadoop, it will not be
      loaded from the customized classpath. To solve this, either the package of CustomAuxService could be changed,
      or a separate system-classes could be configured which excludes the package org.apache.hadoop.</description>
    <name>yarn.nodemanager.aux-services.%s.system-classes</name>
    <value></value>
  </property>

  <property>
    <description>No. of ms to wait between sending a SIGTERM and SIGKILL to a container</description>
    <name>yarn.nodemanager.sleep-delay-before-sigkill.ms</name>
    <value>250</value>
  </property>

  <property>
    <description>Max time to wait for a process to come up when trying to cleanup a container</description>
    <name>yarn.nodemanager.process-kill-wait.ms</name>
    <value>5000</value>
  </property>

  <property>
    <description>The minimum allowed version of a resourcemanager that a nodemanager will connect to.  
      The valid values are NONE (no version checking), EqualToNM (the resourcemanager's version is 
      equal to or greater than the NM version), or a Version String.</description>
    <name>yarn.nodemanager.resourcemanager.minimum.version</name>
    <value>NONE</value>
  </property>

  <property>
    <description>Maximum size of contain's diagnostics to keep for relaunching
      container case.</description>
    <name>yarn.nodemanager.container-diagnostics-maximum-size</name>
    <value>10000</value>
  </property>

  <property>
    <description>Minimum container restart interval in milliseconds.</description>
    <name>yarn.nodemanager.container-retry-minimum-interval-ms</name>
    <value>1000</value>
  </property>

  <property>
    <description>Max number of threads in NMClientAsync to process container
    management events</description>
    <name>yarn.client.nodemanager-client-async.thread-pool-max-size</name>
    <value>500</value>
  </property>

  <property>
    <description>Max time to wait to establish a connection to NM</description>
    <name>yarn.client.nodemanager-connect.max-wait-ms</name>
    <value>180000</value>
  </property>

  <property>
    <description>Time interval between each attempt to connect to NM</description>
    <name>yarn.client.nodemanager-connect.retry-interval-ms</name>
    <value>10000</value>
  </property>

  <property>
    <description>
      Max time to wait for NM to connect to RM.
      When not set, proxy will fall back to use value of
      yarn.resourcemanager.connect.max-wait.ms.
    </description>
    <name>yarn.nodemanager.resourcemanager.connect.max-wait.ms</name>
    <value></value>
  </property>

  <property>
    <description>
      Time interval between each NM attempt to connect to RM.
      When not set, proxy will fall back to use value of
      yarn.resourcemanager.connect.retry-interval.ms.
    </description>
    <name>yarn.nodemanager.resourcemanager.connect.retry-interval.ms</name>
    <value></value>
  </property>

  <property>
    <description>
      Maximum number of proxy connections to cache for node managers. If set
      to a value greater than zero then the cache is enabled and the NMClient
      and MRAppMaster will cache the specified number of node manager proxies.
      There will be at max one proxy per node manager. Ex. configuring it to a
      value of 5 will make sure that client will at max have 5 proxies cached
      with 5 different node managers. These connections for these proxies will
      be timed out if idle for more than the system wide idle timeout period.
      Note that this could cause issues on large clusters as many connections
      could linger simultaneously and lead to a large number of connection
      threads. The token used for authentication will be used only at
      connection creation time. If a new token is received then the earlier
      connection should be closed in order to use the new token. This and
      (yarn.client.nodemanager-client-async.thread-pool-max-size) are related
      and should be in sync (no need for them to be equal).
      If the value of this property is zero then the connection cache is
      disabled and connections will use a zero idle timeout to prevent too
      many connection threads on large clusters.
    </description>
    <name>yarn.client.max-cached-nodemanagers-proxies</name>
    <value>0</value>
  </property>
  
  <property>
    <description>Enable the node manager to recover after starting</description>
    <name>yarn.nodemanager.recovery.enabled</name>
    <value>false</value>
  </property>

  <property>
    <description>The local filesystem directory in which the node manager will
    store state when recovery is enabled.</description>
    <name>yarn.nodemanager.recovery.dir</name>
    <value>${hadoop.tmp.dir}/yarn-nm-recovery</value>
  </property>

  <property>
    <description>The time in seconds between full compactions of the NM state
    database. Setting the interval to zero disables the full compaction
    cycles.</description>
    <name>yarn.nodemanager.recovery.compaction-interval-secs</name>
    <value>3600</value>
  </property>

  <property>
    <description>Whether the nodemanager is running under supervision. A
      nodemanager that supports recovery and is running under supervision
      will not try to cleanup containers as it exits with the assumption
      it will be immediately be restarted and recover containers.</description>
    <name>yarn.nodemanager.recovery.supervised</name>
    <value>false</value>
  </property>

  <property>
    <description>
    Adjustment to the container OS scheduling priority.  In Linux, passed
    directly to the nice command. If unspecified then containers are launched
    without any explicit OS priority.
    </description>
    <name>yarn.nodemanager.container-executor.os.sched.priority.adjustment</name>
  </property>

  <property>
    <description>
    Flag to enable container metrics
    </description>
    <name>yarn.nodemanager.container-metrics.enable</name>
    <value>true</value>
  </property>

  <property>
    <description>
    Container metrics flush period in ms.  Set to -1 for flush on completion.
    </description>
    <name>yarn.nodemanager.container-metrics.period-ms</name>
    <value>-1</value>
  </property>

  <property>
    <description>
    The delay time ms to unregister container metrics after completion.
    </description>
    <name>yarn.nodemanager.container-metrics.unregister-delay-ms</name>
    <value>10000</value>
  </property>

  <property>
    <description>
    Class used to calculate current container resource utilization.
    </description>
    <name>yarn.nodemanager.container-monitor.process-tree.class</name>
    <value></value>
  </property>

  <property>
    <description>
    Flag to enable NodeManager disk health checker
    </description>
    <name>yarn.nodemanager.disk-health-checker.enable</name>
    <value>true</value>
  </property>

  <property>
    <description>
    Number of threads to use in NM log cleanup.  Used when log aggregation
    is disabled.
    </description>
    <name>yarn.nodemanager.log.deletion-threads-count</name>
    <value>4</value>
  </property>

  <property>
    <description>
    The Windows group that the windows-container-executor should run as.
    </description>
    <name>yarn.nodemanager.windows-secure-container-executor.group</name>
    <value></value>
  </property>

  <!-- Map Reduce Configuration -->

  <property>
    <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  </property>

  <!-- WebAppProxy Configuration -->

  <property>
    <description>The kerberos principal for the proxy, if the proxy is not
    running as part of the RM.</description>
    <name>yarn.web-proxy.principal</name>
    <value/>
  </property>
  
  <property>
    <description>Keytab for WebAppProxy, if the proxy is not running as part of 
    the RM.</description>
    <name>yarn.web-proxy.keytab</name>
  </property>
  
  <property>
    <description>The address for the web proxy as HOST:PORT, if this is not
     given then the proxy will run as part of the RM</description>
     <name>yarn.web-proxy.address</name>
     <value/>
  </property>

  <property>
    <description>The actual address the web proxy will bind to. If this optional
     address is set, it overrides only the hostname portion of yarn.web-proxy.address.
     This is useful for making the web proxy server listen on all interfaces by setting
     it to 0.0.0.0 </description>
    <name>yarn.web-proxy.bind-host</name>
    <value/>
  </property>

  <property>
    <description>Enable the web proxy connection timeout, default is enabled.</description>
    <name>yarn.resourcemanager.proxy.timeout.enabled</name>
    <value>true</value>
  </property>

  <property>
    <description>The web proxy connection timeout.</description>
    <name>yarn.resourcemanager.proxy.connection.timeout</name>
    <value>60000</value>
  </property>

  <!-- Applications' Configuration -->

  <property>
    <description>
      CLASSPATH for YARN applications. A comma-separated list
      of CLASSPATH entries. When this value is empty, the following default
      CLASSPATH for YARN applications would be used. 
      For Linux:
      $HADOOP_CONF_DIR,
      $HADOOP_COMMON_HOME/share/hadoop/common/*,
      $HADOOP_COMMON_HOME/share/hadoop/common/lib/*,
      $HADOOP_HDFS_HOME/share/hadoop/hdfs/*,
      $HADOOP_HDFS_HOME/share/hadoop/hdfs/lib/*,
      $HADOOP_YARN_HOME/share/hadoop/yarn/*,
      $HADOOP_YARN_HOME/share/hadoop/yarn/lib/*
      For Windows:
      %HADOOP_CONF_DIR%,
      %HADOOP_COMMON_HOME%/share/hadoop/common/*,
      %HADOOP_COMMON_HOME%/share/hadoop/common/lib/*,
      %HADOOP_HDFS_HOME%/share/hadoop/hdfs/*,
      %HADOOP_HDFS_HOME%/share/hadoop/hdfs/lib/*,
      %HADOOP_YARN_HOME%/share/hadoop/yarn/*,
      %HADOOP_YARN_HOME%/share/hadoop/yarn/lib/*
    </description>
    <name>yarn.application.classpath</name>
    <value></value>
  </property>

  <!-- Timeline Service Configuration -->

  <property>
    <description>Indicate what is the current version of the running
    timeline service. For example, if "yarn.timeline-service.version" is 1.5,
    and "yarn.timeline-service.enabled" is true, it means the cluster will and
    should bring up the timeline service v.1.5 (and nothing else).
    On the client side, if the client uses the same version of timeline service,
    it should succeed. If the client chooses to use a smaller version in spite of this,
    then depending on how robust the compatibility story is between versions,
    the results may vary.
    </description>
    <name>yarn.timeline-service.version</name>
    <value>1.0f</value>
  </property>

  <property>
    <description>
    In the server side it indicates whether timeline service is enabled or not.
    And in the client side, users can enable it to indicate whether client wants
    to use timeline service. If its enabled in the client side along with
    security, then yarn client tries to fetch the delegation tokens for the
    timeline server.
    </description>
    <name>yarn.timeline-service.enabled</name>
    <value>false</value>
  </property>

  <property>
    <description>The hostname of the timeline service web application.</description>
    <name>yarn.timeline-service.hostname</name>
    <value>0.0.0.0</value>
  </property>

  <property>
    <description>This is default address for the timeline server to start the
    RPC server.</description>
    <name>yarn.timeline-service.address</name>
    <value>${yarn.timeline-service.hostname}:10200</value>
  </property>

  <property>
    <description>The http address of the timeline service web application.</description>
    <name>yarn.timeline-service.webapp.address</name>
    <value>${yarn.timeline-service.hostname}:8188</value>
  </property>

  <property>
    <description>The https address of the timeline service web application.</description>
    <name>yarn.timeline-service.webapp.https.address</name>
    <value>${yarn.timeline-service.hostname}:8190</value>
  </property>

  <property>
    <description>
      The actual address the server will bind to. If this optional address is
      set, the RPC and webapp servers will bind to this address and the port specified in
      yarn.timeline-service.address and yarn.timeline-service.webapp.address, respectively.
      This is most useful for making the service listen to all interfaces by setting to
      0.0.0.0.
    </description>
    <name>yarn.timeline-service.bind-host</name>
    <value></value>
  </property>

  <property>
    <description>
      Defines the max number of applications could be fetched using REST API or
      application history protocol and shown in timeline server web ui.
    </description>
    <name>yarn.timeline-service.generic-application-history.max-applications</name>
    <value>10000</value>
  </property>

  <property>
    <description>Store class name for timeline store.</description>
    <name>yarn.timeline-service.store-class</name>
    <value>org.apache.hadoop.yarn.server.timeline.LeveldbTimelineStore</value>
  </property>

  <property>
    <description>Enable age off of timeline store data.</description>
    <name>yarn.timeline-service.ttl-enable</name>
    <value>true</value>
  </property>

  <property>
    <description>Time to live for timeline store data in milliseconds.</description>
    <name>yarn.timeline-service.ttl-ms</name>
    <value>604800000</value>
  </property>

  <property>
    <description>Store file name for leveldb timeline store.</description>
    <name>yarn.timeline-service.leveldb-timeline-store.path</name>
    <value>${hadoop.tmp.dir}/yarn/timeline</value>
  </property>

  <property>
    <description>Length of time to wait between deletion cycles of leveldb timeline store in milliseconds.</description>
    <name>yarn.timeline-service.leveldb-timeline-store.ttl-interval-ms</name>
    <value>300000</value>
  </property>

  <property>
    <description>Size of read cache for uncompressed blocks for leveldb timeline store in bytes.</description>
    <name>yarn.timeline-service.leveldb-timeline-store.read-cache-size</name>
    <value>104857600</value>
  </property>

  <property>
    <description>Size of cache for recently read entity start times for leveldb timeline store in number of entities.</description>
    <name>yarn.timeline-service.leveldb-timeline-store.start-time-read-cache-size</name>
    <value>10000</value>
  </property>

  <property>
    <description>Size of cache for recently written entity start times for leveldb timeline store in number of entities.</description>
    <name>yarn.timeline-service.leveldb-timeline-store.start-time-write-cache-size</name>
    <value>10000</value>
  </property>

  <property>
    <description>Handler thread count to serve the client RPC requests.</description>
    <name>yarn.timeline-service.handler-thread-count</name>
    <value>10</value>
  </property>

  <property>
    <name>yarn.timeline-service.http-authentication.type</name>
    <value>simple</value>
    <description>
      Defines authentication used for the timeline server HTTP endpoint.
      Supported values are: simple | kerberos | #AUTHENTICATION_HANDLER_CLASSNAME#
    </description>
  </property>

  <property>
    <name>yarn.timeline-service.http-authentication.simple.anonymous.allowed</name>
    <value>true</value>
    <description>
      Indicates if anonymous requests are allowed by the timeline server when using
      'simple' authentication.
    </description>
  </property>

  <property>
    <description>The Kerberos principal for the timeline server.</description>
    <name>yarn.timeline-service.principal</name>
    <value></value>
  </property>

  <property>
    <description>The Kerberos keytab for the timeline server.</description>
    <name>yarn.timeline-service.keytab</name>
    <value>/etc/krb5.keytab</value>
  </property>

  <property>
    <description>Comma separated list of UIs that will be hosted</description>
    <name>yarn.timeline-service.ui-names</name>
    <value></value>
  </property>

  <property>
    <description>
    Default maximum number of retries for timeline service client
    and value -1 means no limit.
    </description>
    <name>yarn.timeline-service.client.max-retries</name>
    <value>30</value>
  </property>

  <property>
    <description>Client policy for whether timeline operations are non-fatal.
    Should the failure to obtain a delegation token be considered an application
    failure (option = false),  or should the client attempt to continue to
    publish information without it (option=true)</description>
    <name>yarn.timeline-service.client.best-effort</name>
    <value>false</value>
  </property>

  <property>
    <description>
    Default retry time interval for timeline servive client.
    </description>
    <name>yarn.timeline-service.client.retry-interval-ms</name>
    <value>1000</value>
  </property>

  <property>
    <description>
    The time period for which timeline v2 client will wait for draining
    leftover entities after stop.
    </description>
    <name>yarn.timeline-service.client.drain-entities.timeout.ms</name>
    <value>2000</value>
  </property>

  <property>
    <description>Enable timeline server to recover state after starting. If
    true, then yarn.timeline-service.state-store-class must be specified.
    </description>
    <name>yarn.timeline-service.recovery.enabled</name>
    <value>false</value>
  </property>

  <property>
    <description>Store class name for timeline state store.</description>
    <name>yarn.timeline-service.state-store-class</name>
    <value>org.apache.hadoop.yarn.server.timeline.recovery.LeveldbTimelineStateStore</value>
  </property>

  <property>
    <description>Store file name for leveldb state store.</description>
    <name>yarn.timeline-service.leveldb-state-store.path</name>
    <value>${hadoop.tmp.dir}/yarn/timeline</value>
  </property>

  <!-- Timeline Service v1.5 Configuration -->
  <property>
    <name>yarn.timeline-service.entity-group-fs-store.cache-store-class</name>
    <value>org.apache.hadoop.yarn.server.timeline.MemoryTimelineStore</value>
    <description>Caching storage timeline server v1.5 is using. </description>
  </property>

  <property>
    <name>yarn.timeline-service.entity-group-fs-store.active-dir</name>
    <value>/tmp/entity-file-history/active</value>
    <description>HDFS path to store active application’s timeline data</description>
  </property>

  <property>
    <name>yarn.timeline-service.entity-group-fs-store.done-dir</name>
    <value>/tmp/entity-file-history/done/</value>
    <description>HDFS path to store done application’s timeline data</description>
  </property>

  <property>
    <name>yarn.timeline-service.entity-group-fs-store.group-id-plugin-classes</name>
    <value></value>
    <description>
      Plugins that can translate a timeline entity read request into
      a list of timeline entity group ids, separated by commas.
    </description>
  </property>

  <property>
    <name>yarn.timeline-service.entity-group-fs-store.group-id-plugin-classpath</name>
    <value></value>
    <description>
      Classpath for all plugins defined in
      yarn.timeline-service.entity-group-fs-store.group-id-plugin-classes.
    </description>
  </property>

   <property>
     <name>yarn.timeline-service.entity-group-fs-store.summary-store</name>
     <description>Summary storage for ATS v1.5</description>
     <value>org.apache.hadoop.yarn.server.timeline.LeveldbTimelineStore</value>
  </property>

  <property>
    <name>yarn.timeline-service.entity-group-fs-store.scan-interval-seconds</name>
    <description>
      Scan interval for ATS v1.5 entity group file system storage reader.This
      value controls how frequent the reader will scan the HDFS active directory
      for application status.
    </description>
    <value>60</value>
  </property>

  <property>
    <name>yarn.timeline-service.entity-group-fs-store.cleaner-interval-seconds</name>
    <description>
      Scan interval for ATS v1.5 entity group file system storage cleaner.This
      value controls how frequent the reader will scan the HDFS done directory
      for stale application data.
    </description>
    <value>3600</value>
  </property>

  <property>
    <name>yarn.timeline-service.entity-group-fs-store.retain-seconds</name>
    <description>
      How long the ATS v1.5 entity group file system storage will keep an
      application's data in the done directory.
    </description>
    <value>604800</value>
  </property>

  <property>
    <name>yarn.timeline-service.entity-group-fs-store.leveldb-cache-read-cache-size</name>
    <description>
      Read cache size for the leveldb cache storage in ATS v1.5 plugin storage.
    </description>
    <value>10485760</value>
  </property>

  <property>
    <name>yarn.timeline-service.entity-group-fs-store.app-cache-size</name>
    <description>
      Size of the reader cache for ATS v1.5 reader. This value controls how many
      entity groups the ATS v1.5 server should cache. If the number of active
      read entity groups is greater than the number of caches items, some reads
      may return empty data. This value must be greater than 0.
    </description>
    <value>10</value>
  </property>

  <property>
    <name>yarn.timeline-service.client.fd-flush-interval-secs</name>
    <description>
      Flush interval for ATS v1.5 writer. This value controls how frequent
      the writer will flush the HDFS FSStream for the entity/domain.
    </description>
    <value>10</value>
  </property>

  <property>
    <name>yarn.timeline-service.client.fd-clean-interval-secs</name>
    <description>
      Scan interval for ATS v1.5 writer. This value controls how frequent
      the writer will scan the HDFS FSStream for the entity/domain.
      If the FSStream is stale for a long time, this FSStream will be close.
    </description>
    <value>60</value>
  </property>

  <property>
    <name>yarn.timeline-service.client.fd-retain-secs</name>
    <description>
      How long the ATS v1.5 writer will keep an FSStream open.
      If this fsstream does not write anything for this configured time,
      it will be close.
    </description>
    <value>300</value>
  </property>

  <!-- Timeline Service v2 Configuration -->
  <property>
    <name>yarn.timeline-service.writer.class</name>
    <description>
      Storage implementation ATS v2 will use for the TimelineWriter service.
    </description>
    <value>org.apache.hadoop.yarn.server.timelineservice.storage.HBaseTimelineWriterImpl</value>
  </property>

  <property>
    <name>yarn.timeline-service.reader.class</name>
    <description>
      Storage implementation ATS v2 will use for the TimelineReader service.
    </description>
    <value>org.apache.hadoop.yarn.server.timelineservice.storage.HBaseTimelineReaderImpl</value>
  </property>

  <property>
    <name>yarn.timeline-service.client.internal-timers-ttl-secs</name>
    <description>
      How long the internal Timer Tasks can be alive in writer. If there is no
      write operation for this configured time, the internal timer tasks will
      be close.
    </description>
    <value>420</value>
  </property>

  <property>
    <description>The setting that controls how often the timeline collector
    flushes the timeline writer.</description>
    <name>yarn.timeline-service.writer.flush-interval-seconds</name>
    <value>60</value>
  </property>

  <property>
    <description>The setting that decides the capacity of the queue to hold
    asynchronous timeline entities.</description>
    <name>yarn.timeline-service.writer.async.queue.capacity</name>
    <value>100</value>
  </property>

  <property>
    <description>Time period till which the application collector will be alive
     in NM, after the  application master container finishes.</description>
    <name>yarn.timeline-service.app-collector.linger-period.ms</name>
    <value>60000</value>
  </property>

  <property>
    <description>Time line V2 client tries to merge these many number of
    async entities (if available) and then call the REST ATS V2 API to submit.
    </description>
    <name>yarn.timeline-service.timeline-client.number-of-async-entities-to-merge</name>
    <value>10</value>
  </property>

  <property>
    <description>
    The setting that controls how long the final value
    of a metric of a completed app is retained before merging into
    the flow sum. Up to this time after an application is completed
    out-of-order values that arrive can be recognized and discarded at the
    cost of increased storage.
    </description>
    <name>yarn.timeline-service.hbase.coprocessor.app-final-value-retention-milliseconds
    </name>
    <value>259200000</value>
  </property>

  <property>
    <description>
      The setting that controls how often in-memory app level
      aggregation is kicked off in timeline collector.
    </description>
    <name>yarn.timeline-service.app-aggregation-interval-secs</name>
    <value>15</value>
  </property>

  <property>
    <description>
    The default hdfs location for flowrun coprocessor jar.
    </description>
    <name>yarn.timeline-service.hbase.coprocessor.jar.hdfs.location
    </name>
    <value>/hbase/coprocessor/hadoop-yarn-server-timelineservice.jar</value>
  </property>

  <property>
    <description>
    The value of this parameter sets the prefix for all tables that are part of
    timeline service in the hbase storage schema. It can be set to "dev."
    or "staging." if it is to be used for development or staging instances.
    This way the data in production tables stays in a separate set of tables
    prefixed by "prod.".
    </description>
    <name>yarn.timeline-service.hbase-schema.prefix</name>
    <value>prod.</value>
  </property>

  <property>
    <description> Optional URL to an hbase-site.xml configuration file to be
    used to connect to the timeline-service hbase cluster. If empty or not
    specified, then the HBase configuration will be loaded from the classpath.
    When specified the values in the specified configuration file will override
    those from the ones that are present on the classpath.
    </description>
    <name>yarn.timeline-service.hbase.configuration.file
    </name>
    <value></value>
  </property>

  <property>
    <description>
      Removes the UUID if represent and limit the the flowname length with
      the given value for ATSv2. In case the value is negative or 0,
      it only removes the UUID and does not limit the flow name.
    </description>
    <name>yarn.timeline-service.flowname.max-size
    </name>
    <value>0</value>
  </property>

  <!--  Shared Cache Configuration -->

  <property>
    <description>Whether the shared cache is enabled</description>
    <name>yarn.sharedcache.enabled</name>
    <value>false</value>
  </property>

  <property>
    <description>The root directory for the shared cache</description>
    <name>yarn.sharedcache.root-dir</name>
    <value>/sharedcache</value>
  </property>

  <property>
    <description>The level of nested directories before getting to the checksum
    directories. It must be non-negative.</description>
    <name>yarn.sharedcache.nested-level</name>
    <value>3</value>
  </property>

  <property>
    <description>The implementation to be used for the SCM store</description>
    <name>yarn.sharedcache.store.class</name>
    <value>org.apache.hadoop.yarn.server.sharedcachemanager.store.InMemorySCMStore</value>
  </property>

  <property>
    <description>The implementation to be used for the SCM app-checker</description>
    <name>yarn.sharedcache.app-checker.class</name>
    <value>org.apache.hadoop.yarn.server.sharedcachemanager.RemoteAppChecker</value>
  </property>
  
  <property>
    <description>A resource in the in-memory store is considered stale
    if the time since the last reference exceeds the staleness period.
    This value is specified in minutes.</description>
    <name>yarn.sharedcache.store.in-memory.staleness-period-mins</name>
    <value>10080</value>
  </property>
  
  <property>
    <description>Initial delay before the in-memory store runs its first check
    to remove dead initial applications. Specified in minutes.</description>
    <name>yarn.sharedcache.store.in-memory.initial-delay-mins</name>
    <value>10</value>
  </property>
  
  <property>
    <description>The frequency at which the in-memory store checks to remove
    dead initial applications. Specified in minutes.</description>
    <name>yarn.sharedcache.store.in-memory.check-period-mins</name>
    <value>720</value>
  </property>
  
  <property>
    <description>The address of the admin interface in the SCM (shared cache manager)</description>
    <name>yarn.sharedcache.admin.address</name>
    <value>0.0.0.0:8047</value>
  </property>

  <property>
    <description>The number of threads used to handle SCM admin interface (1 by default)</description>
    <name>yarn.sharedcache.admin.thread-count</name>
    <value>1</value>
  </property>

  <property>
    <description>The address of the web application in the SCM (shared cache manager)</description>
    <name>yarn.sharedcache.webapp.address</name>
    <value>0.0.0.0:8788</value>
  </property>

  <property>
    <description>The frequency at which a cleaner task runs.
    Specified in minutes.</description>
    <name>yarn.sharedcache.cleaner.period-mins</name>
    <value>1440</value>
  </property>

  <property>
    <description>Initial delay before the first cleaner task is scheduled.
    Specified in minutes.</description>
    <name>yarn.sharedcache.cleaner.initial-delay-mins</name>
    <value>10</value>
  </property>

  <property>
    <description>The time to sleep between processing each shared cache
    resource. Specified in milliseconds.</description>
    <name>yarn.sharedcache.cleaner.resource-sleep-ms</name>
    <value>0</value>
  </property>

  <property>
    <description>The address of the node manager interface in the SCM
    (shared cache manager)</description>
    <name>yarn.sharedcache.uploader.server.address</name>
    <value>0.0.0.0:8046</value>
  </property>

  <property>
    <description>The number of threads used to handle shared cache manager
    requests from the node manager (50 by default)</description>
    <name>yarn.sharedcache.uploader.server.thread-count</name>
    <value>50</value>
  </property>

  <property>
    <description>The address of the client interface in the SCM
    (shared cache manager)</description>
    <name>yarn.sharedcache.client-server.address</name>
    <value>0.0.0.0:8045</value>
  </property>

  <property>
    <description>The number of threads used to handle shared cache manager
    requests from clients (50 by default)</description>
    <name>yarn.sharedcache.client-server.thread-count</name>
    <value>50</value>
  </property>

  <property>
    <description>The algorithm used to compute checksums of files (SHA-256 by
    default)</description>
    <name>yarn.sharedcache.checksum.algo.impl</name>
    <value>org.apache.hadoop.yarn.sharedcache.ChecksumSHA256Impl</value>
  </property>

  <property>
    <description>The replication factor for the node manager uploader for the
    shared cache (10 by default)</description>
    <name>yarn.sharedcache.nm.uploader.replication.factor</name>
    <value>10</value>
  </property>

  <property>
    <description>The number of threads used to upload files from a node manager
    instance (20 by default)</description>
    <name>yarn.sharedcache.nm.uploader.thread-count</name>
    <value>20</value>
  </property>

  <property>
    <description>
    ACL protocol for use in the Timeline server.
    </description>
    <name>security.applicationhistory.protocol.acl</name>
    <value></value>
  </property>

  <!-- Minicluster Configuration (for testing only!) -->

  <property>
    <description>
    Set to true for MiniYARNCluster unit tests
    </description>
    <name>yarn.is.minicluster</name>
    <value>false</value>
  </property>

  <property>
    <description>
    Set for MiniYARNCluster unit tests to control resource monitoring
    </description>
    <name>yarn.minicluster.control-resource-monitoring</name>
    <value>false</value>
  </property>

  <property>
    <description>
    Set to false in order to allow MiniYARNCluster to run tests without
    port conflicts.
    </description>
    <name>yarn.minicluster.fixed.ports</name>
    <value>false</value>
  </property>

  <property>
    <description>
    Set to false in order to allow the NodeManager in MiniYARNCluster to
    use RPC to talk to the RM.
    </description>
    <name>yarn.minicluster.use-rpc</name>
    <value>false</value>
  </property>

  <property>
    <description>
    As yarn.nodemanager.resource.memory-mb property but for the NodeManager
    in a MiniYARNCluster.
    </description>
    <name>yarn.minicluster.yarn.nodemanager.resource.memory-mb</name>
    <value>4096</value>
  </property>

  <!-- Node Labels Configuration -->

  <property>
    <description>
    Enable node labels feature
    </description>
    <name>yarn.node-labels.enabled</name>
    <value>false</value>
  </property>

  <property>
    <description>
    URI for NodeLabelManager.  The default value is
    /tmp/hadoop-yarn-${user}/node-labels/ in the local filesystem.
    </description>
    <name>yarn.node-labels.fs-store.root-dir</name>
    <value></value>
  </property>

  <property>
    <description>
    Set configuration type for node labels. Administrators can specify
    "centralized", "delegated-centralized" or "distributed".
    </description>
    <name>yarn.node-labels.configuration-type</name>
    <value>centralized</value>
  </property>

  <!-- Distributed Node Labels Configuration -->
  <property>
    <description>
    When "yarn.node-labels.configuration-type" is configured with "distributed"
    in RM, Administrators can configure in NM the provider for the
    node labels by configuring this parameter. Administrators can
    configure "config", "script" or the class name of the provider. Configured
    class needs to extend
    org.apache.hadoop.yarn.server.nodemanager.nodelabels.NodeLabelsProvider.
    If "config" is configured, then "ConfigurationNodeLabelsProvider" and if
    "script" is configured, then "ScriptNodeLabelsProvider" will be used.
    </description>
    <name>yarn.nodemanager.node-labels.provider</name>
  </property>

  <property>
    <description>
    When "yarn.nodemanager.node-labels.provider" is configured with "config",
    "Script" or the configured class extends AbstractNodeLabelsProvider, then
    periodically node labels are retrieved from the node labels provider. This
    configuration is to define the interval period.
    If -1 is configured then node labels are retrieved from provider only
    during initialization. Defaults to 10 mins.
    </description>
    <name>yarn.nodemanager.node-labels.provider.fetch-interval-ms</name>
    <value>600000</value>
  </property>

  <property>
    <description>
   Interval at which NM syncs its node labels with RM. NM will send its loaded
   labels every x intervals configured, along with heartbeat to RM.
    </description>
    <name>yarn.nodemanager.node-labels.resync-interval-ms</name>
    <value>120000</value>
  </property>

  <property>
    <description>
    When "yarn.nodemanager.node-labels.provider" is configured with "config"
    then ConfigurationNodeLabelsProvider fetches the partition label from this
    parameter.
    </description>
    <name>yarn.nodemanager.node-labels.provider.configured-node-partition</name>
  </property>

  <property>
    <description>
    When "yarn.nodemanager.node-labels.provider" is configured with "Script"
    then this configuration provides the timeout period after which it will
    interrupt the script which queries the Node labels. Defaults to 20 mins.
    </description>
    <name>yarn.nodemanager.node-labels.provider.fetch-timeout-ms</name>
    <value>1200000</value>
  </property>

  <!-- Delegated-centralized Node Labels Configuration -->
  <property>
    <description>
    When node labels "yarn.node-labels.configuration-type" is
    of type "delegated-centralized", administrators should configure
    the class for fetching node labels by ResourceManager. Configured
    class needs to extend
    org.apache.hadoop.yarn.server.resourcemanager.nodelabels.
    RMNodeLabelsMappingProvider.
    </description>
    <name>yarn.resourcemanager.node-labels.provider</name>
    <value></value>
  </property>

  <property>
    <description>
    When "yarn.node-labels.configuration-type" is configured with
    "delegated-centralized", then node labels of all nodes
    are updated by periodically retrieving node labels from the
    provider. If -1 is configured then node labels are retrieved
    from provider only once for each node after it registers.
    Defaults to 30 mins.
    </description>
    <name>yarn.resourcemanager.node-labels.provider.fetch-interval-ms</name>
    <value>1800000</value>
  </property>

  <property>
    <description>
    When "yarn.node-labels.configuration-type" is configured with
    "delegated-centralized", then node labels of newly registered
    nodes are updated by periodically retrieving node labels from
    the provider. Defaults to 30 secs.
    </description>
    <name>yarn.resourcemanager.node-labels.provider.update-newly-registered-nodes-interval-ms</name>
    <value>30000</value>
  </property>

  <property>
    <description>
      Overwrites default-node-label-expression only for the ApplicationMaster
      container. It is disabled by default.
    </description>
    <name>yarn.resourcemanager.node-labels.am.default-node-label-expression</name>
  </property>

  <property>
    <description>
      Flag to indicate whether the AM can be allocated to non-exclusive nodes or not.
      Default is false.
    </description>
    <name>yarn.resourcemanager.node-labels.am.allow-non-exclusive-allocation</name>
    <value>false</value>
  </property>

  <!-- Distributed Node Attributes Configuration -->
  <property>
    <description>
      This property determines which provider will be plugged by the
      node manager to collect node-attributes. Administrators can
      configure "config", "script" or the class name of the provider.
      Configured class needs to extend
      org.apache.hadoop.yarn.server.nodemanager.nodelabels.NodeAttributesProvider.
      If "config" is configured, then "ConfigurationNodeLabelsProvider" and if
      "script" is configured, then "ScriptBasedNodeAttributesProvider"
      will be used.
    </description>
    <name>yarn.nodemanager.node-attributes.provider</name>
  </property>

  <property>
    <description>
      The node attribute script NM runs to collect node attributes.
      Script output Line starting with "NODE_ATTRIBUTE:" will be
      considered as a record of node attribute, attribute name, type
      and value should be delimited by comma. Each of such lines
      will be parsed to a node attribute.
    </description>
    <name>yarn.nodemanager.node-attributes.provider.script.path</name>
  </property>

  <property>
    <description>
      Command arguments passed to the node attribute script.
    </description>
    <name>yarn.nodemanager.node-attributes.provider.script.opts</name>
  </property>

  <property>
    <description>
      Time interval that determines how long NM fetches node attributes
      from a given provider. If -1 is configured then node labels are
      retrieved from provider only during initialization. Defaults to 10 mins.
    </description>
    <name>yarn.nodemanager.node-attributes.provider.fetch-interval-ms</name>
    <value>600000</value>
  </property>

  <property>
    <description>
      Timeout period after which NM will interrupt the node attribute
      provider script which queries node attributes. Defaults to 20 mins.
    </description>
    <name>yarn.nodemanager.node-attributes.provider.fetch-timeout-ms</name>
    <value>1200000</value>
  </property>

  <property>
    <description>
      When "yarn.nodemanager.node-attributes.provider" is configured with
      "config" then ConfigurationNodeAttributesProvider fetches node attributes
      from this parameter.
    </description>
    <name>yarn.nodemanager.node-attributes.provider.configured-node-attributes</name>
    <value></value>
  </property>

  <property>
    <description>
      Interval at which NM syncs its node attributes with RM. NM will send its loaded
      attributes every x intervals configured, along with heartbeat to RM.
    </description>
    <name>yarn.nodemanager.node-attributes.resync-interval-ms</name>
    <value>120000</value>
  </property>

  <property>
    <description>
    Timeout in seconds for YARN node graceful decommission.
    This is the maximal time to wait for running containers and applications to complete
    before transition a DECOMMISSIONING node into DECOMMISSIONED.
    </description>
    <name>yarn.resourcemanager.nodemanager-graceful-decommission-timeout-secs</name>
    <value>3600</value>
  </property>

  <property>
    <description>
    Timeout in seconds of DecommissioningNodesWatcher internal polling.
    </description>
    <name>yarn.resourcemanager.decommissioning-nodes-watcher.poll-interval-secs</name>
    <value>20</value>
  </property>

  <property>
    <description>
    Used to specify custom web services for Resourcemanager. Value can be
    classnames separated by comma.
    Ex: org.apache.hadoop.yarn.server.resourcemanager.webapp.RMWebServices,
    org.apache.hadoop.yarn.server.resourcemanager.webapp.DummyClass
    </description>
    <name>yarn.http.rmwebapp.external.classes</name>
    <value></value>
  </property>

  <property>
    <description>
    Used to specify custom scheduler page
    </description>
    <name>yarn.http.rmwebapp.scheduler.page.class</name>
    <value></value>
  </property>

  <property>
    <description>
    Used to specify custom DAO classes used by custom web services.
    </description>
    <name>yarn.http.rmwebapp.custom.dao.classes</name>
    <value></value>
  </property>

  <property>
    <description>
    Used to specify custom DAO classes used by custom web services which requires
    root unwrapping.
    </description>
    <name>yarn.http.rmwebapp.custom.unwrapped.dao.classes</name>
    <value></value>
  </property>

  <property>
    <description>
    Used to specify custom WebServices class to bind with RMWebApp overriding
    the default RMWebServices.
    </description>
    <name>yarn.webapp.custom.webservice.class</name>
    <value></value>
  </property>

  <property>
    <description>The Node Label script to run. Script output Line starting with
     "NODE_PARTITION:" will be considered as Node Label Partition. In case of
     multiple lines have this pattern, then last one will be considered
    </description>
    <name>yarn.nodemanager.node-labels.provider.script.path</name>
  </property>

  <property>
    <description>The arguments to pass to the Node label script.</description>
    <name>yarn.nodemanager.node-labels.provider.script.opts</name>
  </property>

  <!-- Federation Configuration -->
  <property>
    <description>
      Flag to indicate whether the RM is participating in Federation or not.
    </description>
    <name>yarn.federation.enabled</name>
    <value>false</value>
  </property>
  <property>
    <description>
      Initial delay for federation state-store heartbeat service. Value is followed by a unit
      specifier: ns, us, ms, s, m, h, d for nanoseconds, microseconds, milliseconds, seconds,
      minutes, hours, days respectively. Values should provide units,
      but seconds are assumed
    </description>
    <name>yarn.federation.state-store.heartbeat.initial-delay</name>
    <value>30s</value>
  </property>
  <property>
    <description>
      Machine list file to be loaded by the FederationSubCluster Resolver
    </description>
    <name>yarn.federation.machine-list</name>
  </property>
  <property>
    <description>
      Class name for SubClusterResolver
    </description>
    <name>yarn.federation.subcluster-resolver.class</name>
    <value>org.apache.hadoop.yarn.server.federation.resolver.DefaultSubClusterResolverImpl</value>
  </property>

  <property>
    <description>
      Store class name for federation state store
    </description>
    <name>yarn.federation.state-store.class</name>
    <value>org.apache.hadoop.yarn.server.federation.store.impl.MemoryFederationStateStore</value>
  </property>

  <property>
   <description>
    The time in seconds after which the federation state store local cache
    will be refreshed periodically
   </description>
   <name>yarn.federation.cache-ttl.secs</name>
   <value>300</value>
  </property>

  <property>
    <description>The registry base directory for federation.</description>
    <name>yarn.federation.registry.base-dir</name>
    <value>yarnfederation/</value>
  </property>

  <property>
    <description>
      The number of retries to clear the app in the FederationStateStore,
      the default value is 1, that is, after the app fails to clean up, it will retry the cleanup again.
    </description>
    <name>yarn.federation.state-store.clean-up-retry-count</name>
    <value>1</value>
  </property>

  <property>
    <description>
      Clear the sleep time of App retry in FederationStateStore.
      When the app fails to clean up,
      it will sleep for a period of time and then try to clean up.
      The default value is 1s.
    </description>
    <name>yarn.federation.state-store.clean-up-retry-sleep-time</name>
    <value>1s</value>
  </property>

  <!-- Other Configuration -->

  <property>
    <description>The registry implementation to use.</description>
    <name>yarn.registry.class</name>
    <value>org.apache.hadoop.registry.client.impl.FSRegistryOperationsService</value>
  </property>

  <property>
    <description>The interval that the yarn client library uses to poll the
    completion status of the asynchronous API of application client protocol.
    </description>
    <name>yarn.client.application-client-protocol.poll-interval-ms</name>
    <value>200</value>
  </property>

  <property>
    <description>
    The duration (in ms) the YARN client waits for an expected state change
    to occur.  -1 means unlimited wait time.
    </description>
    <name>yarn.client.application-client-protocol.poll-timeout-ms</name>
    <value>-1</value>
  </property>

  <property>
    <description>RSS usage of a process computed via
    /proc/pid/stat is not very accurate as it includes shared pages of a
    process. /proc/pid/smaps provides useful information like
    Private_Dirty, Private_Clean, Shared_Dirty, Shared_Clean which can be used
    for computing more accurate RSS. When this flag is enabled, RSS is computed
    as Min(Shared_Dirty, Pss) + Private_Clean + Private_Dirty. It excludes
    read-only shared mappings in RSS computation.  
    </description>
    <name>yarn.nodemanager.container-monitor.procfs-tree.smaps-based-rss.enabled</name>
    <value>false</value>
  </property>

  <property>
    <description>
    URL for log aggregation server
    </description>
    <name>yarn.log.server.url</name>
    <value></value>
  </property>

  <property>
    <description>
    URL for log aggregation server web service
    </description>
    <name>yarn.log.server.web-service.url</name>
    <value></value>
  </property>

  <property>
    <description>
    RM Application Tracking URL
    </description>
    <name>yarn.tracking.url.generator</name>
    <value></value>
  </property>

  <property>
    <description>
    Class to be used for YarnAuthorizationProvider
    </description>
    <name>yarn.authorization-provider</name>
    <value></value>
  </property>

  <property>
    <description>Defines how often NMs wake up to upload log files.
    The default value is -1. By default, the logs will be uploaded when
    the application is finished. By setting this configuration logs can
    be uploaded periodically while the application is running.
    The minimum positive accepted value can be configured by the setting
    "yarn.nodemanager.log-aggregation.roll-monitoring-interval-seconds.min".
    </description>
    <name>yarn.nodemanager.log-aggregation.roll-monitoring-interval-seconds</name>
    <value>-1</value>
  </property>

  <property>
    <description>Defines the positive minimum hard limit for
    "yarn.nodemanager.log-aggregation.roll-monitoring-interval-seconds".
    If this configuration has been set less than its default value (3600)
    the NodeManager may raise a warning.
    </description>
    <name>yarn.nodemanager.log-aggregation.roll-monitoring-interval-seconds.min</name>
    <value>3600</value>
  </property>

  <property>
    <description>Define how many aggregated log files per application per NM
    we can have in remote file system. By default, the total number of
    aggregated log files per application per NM is 30.
    </description>
    <name>yarn.nodemanager.log-aggregation.num-log-files-per-app</name>
    <value>30</value>
  </property>

  <property>
    <description>
    Enable/disable intermediate-data encryption at YARN level. For now,
    this only is used by the FileSystemRMStateStore to setup right
    file-system security attributes.
    </description>
    <name>yarn.intermediate-data-encryption.enable</name>
    <value>false</value>
  </property>

  <property>
    <description>Flag to enable cross-origin (CORS) support in the NM. This flag
    requires the CORS filter initializer to be added to the filter initializers
    list in core-site.xml.</description>
    <name>yarn.nodemanager.webapp.cross-origin.enabled</name>
    <value>false</value>
  </property>

  <property>
    <description>
    Defines maximum application priority in a cluster.
    If an application is submitted with a priority higher than this value, it will be
    reset to this maximum value.
    </description>
    <name>yarn.cluster.max-application-priority</name>
    <value>0</value>
  </property>

  <property>
    <description>
    The default log aggregation policy class. Applications can
    override it via LogAggregationContext. This configuration can provide
    some cluster-side default behavior so that if the application doesn't
    specify any policy via LogAggregationContext administrators of the cluster
    can adjust the policy globally.
    </description>
    <name>yarn.nodemanager.log-aggregation.policy.class</name>
    <value>org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.AllContainerLogAggregationPolicy</value>
  </property>

  <property>
    <description>
    The default parameters for the log aggregation policy. Applications can
    override it via LogAggregationContext. This configuration can provide
    some cluster-side default behavior so that if the application doesn't
    specify any policy via LogAggregationContext administrators of the cluster
    can adjust the policy globally.
    </description>
    <name>yarn.nodemanager.log-aggregation.policy.parameters</name>
    <value></value>
  </property>

  <property>
    <description>
    Enable/Disable AMRMProxyService in the node manager. This service is used to
    intercept calls from the application masters to the resource manager.
    </description>
    <name>yarn.nodemanager.amrmproxy.enabled</name>
    <value>false</value>
  </property>

  <property>
    <description>
    The address of the AMRMProxyService listener.
    </description>
    <name>yarn.nodemanager.amrmproxy.address</name>
    <value>0.0.0.0:8049</value>
  </property>

  <property>
    <description>
    The number of threads used to handle requests by the AMRMProxyService.
    </description>
    <name>yarn.nodemanager.amrmproxy.client.thread-count</name>
    <value>25</value>
  </property>

  <property>
    <description>
    The comma separated list of class names that implement the
    RequestInterceptor interface. This is used by the AMRMProxyService to create
    the request processing pipeline for applications.
    </description>
    <name>yarn.nodemanager.amrmproxy.interceptor-class.pipeline</name>
    <value>org.apache.hadoop.yarn.server.nodemanager.amrmproxy.DefaultRequestInterceptor</value>
  </property>

  <property>
    <description>
    Whether AMRMProxy HA is enabled.
    </description>
    <name>yarn.nodemanager.amrmproxy.ha.enable</name>
    <value>false</value>
  </property>

  <property>
    <description>
    Setting that controls whether distributed scheduling is enabled.
    </description>
    <name>yarn.nodemanager.distributed-scheduling.enabled</name>
    <value>false</value>
  </property>

  <property>
    <description>
      Setting that controls whether opportunistic container allocation
      is enabled.
    </description>
    <name>yarn.resourcemanager.opportunistic-container-allocation.enabled</name>
    <value>false</value>
  </property>

  <property>
    <description>
      Maximum number of opportunistic containers to be allocated per
      Application Master heartbeat.
    </description>
    <name>yarn.resourcemanager.opportunistic.max.container-allocation.per.am.heartbeat</name>
    <value>-1</value>
  </property>

  <property>
    <description>
    Number of nodes to be used by the Opportunistic Container Allocator for
    dispatching containers during container allocation.
    </description>
    <name>yarn.resourcemanager.opportunistic-container-allocation.nodes-used</name>
    <value>10</value>
  </property>

  <property>
    <description>
    Frequency for computing least loaded NMs.
    </description>
    <name>yarn.resourcemanager.nm-container-queuing.sorting-nodes-interval-ms</name>
    <value>1000</value>
  </property>

  <property>
    <description>
    Comparator for determining node load for Distributed Scheduling.
    </description>
    <name>yarn.resourcemanager.nm-container-queuing.load-comparator</name>
    <value>QUEUE_LENGTH</value>
  </property>

  <property>
    <description>
    Value of standard deviation used for calculation of queue limit thresholds.
    </description>
    <name>yarn.resourcemanager.nm-container-queuing.queue-limit-stdev</name>
    <value>1.0f</value>
  </property>

  <property>
    <description>
    Min length of container queue at NodeManager.
    </description>
    <name>yarn.resourcemanager.nm-container-queuing.min-queue-length</name>
    <value>5</value>
  </property>

  <property>
    <description>
    Max length of container queue at NodeManager.
    </description>
    <name>yarn.resourcemanager.nm-container-queuing.max-queue-length</name>
    <value>15</value>
  </property>

  <property>
    <description>
    Min queue wait time for a container at a NodeManager.
    </description>
    <name>yarn.resourcemanager.nm-container-queuing.min-queue-wait-time-ms</name>
    <value>10</value>
  </property>

  <property>
    <description>
    Max queue wait time for a container queue at a NodeManager.
    </description>
    <name>yarn.resourcemanager.nm-container-queuing.max-queue-wait-time-ms</name>
    <value>100</value>
  </property>

  <property>
    <description>
    Use container pause as the preemption policy over kill in the container
    queue at a NodeManager.
    </description>
    <name>yarn.nodemanager.opportunistic-containers-use-pause-for-preemption</name>
    <value>false</value>
  </property>

  <property>
    <description>
    Error filename pattern, to identify the file in the container's
    Log directory which contain the container's error log. As error file
    redirection is done by client/AM and yarn will not be aware of the error
    file name. YARN uses this pattern to identify the error file and tail
    the error log as diagnostics when the container execution returns non zero
    value. Filename patterns are case sensitive and should match the
    specifications of FileSystem.globStatus(Path) api. If multiple filenames
    matches the pattern, first file matching the pattern will be picked.
    </description>
    <name>yarn.nodemanager.container.stderr.pattern</name>
    <value>{*stderr*,*STDERR*}</value>
  </property>

  <property>
    <description>
    Size of the container error file which needs to be tailed, in bytes.
    </description>
    <name>yarn.nodemanager.container.stderr.tail.bytes </name>
    <value>4096</value>
  </property>

  <property>
    <description>
    Choose different implementation of node label's storage
    </description>
    <name>yarn.node-labels.fs-store.impl.class</name>
    <value>org.apache.hadoop.yarn.nodelabels.FileSystemNodeLabelsStore</value>
  </property>

  <property>
    <description>The replication factor for the FS store
     files. Default value is 0, means it will use file system
      default replication.</description>
    <name>yarn.fs-store.file.replication</name>
    <value>0</value>
  </property>

  <property>
    <description>
      Enable the CSRF filter for the RM web app
    </description>
    <name>yarn.resourcemanager.webapp.rest-csrf.enabled</name>
    <value>false</value>
  </property>

  <property>
    <description>
      Optional parameter that indicates the custom header name to use for CSRF
      protection.
    </description>
    <name>yarn.resourcemanager.webapp.rest-csrf.custom-header</name>
    <value>X-XSRF-Header</value>
  </property>

  <property>
    <description>
      Optional parameter that indicates the list of HTTP methods that do not
      require CSRF protection
    </description>
    <name>yarn.resourcemanager.webapp.rest-csrf.methods-to-ignore</name>
    <value>GET,OPTIONS,HEAD</value>
  </property>

  <property>
    <description>
      Enable the CSRF filter for the NM web app
    </description>
    <name>yarn.nodemanager.webapp.rest-csrf.enabled</name>
    <value>false</value>
  </property>

  <property>
    <description>
      Optional parameter that indicates the custom header name to use for CSRF
      protection.
    </description>
    <name>yarn.nodemanager.webapp.rest-csrf.custom-header</name>
    <value>X-XSRF-Header</value>
  </property>

  <property>
    <description>
      Optional parameter that indicates the list of HTTP methods that do not
      require CSRF protection
    </description>
    <name>yarn.nodemanager.webapp.rest-csrf.methods-to-ignore</name>
    <value>GET,OPTIONS,HEAD</value>
  </property>

  <property>
    <description>
      The name of disk validator.
    </description>
    <name>yarn.nodemanager.disk-validator</name>
    <value>basic</value>
  </property>

  <property>
  <description>
      Enable the CSRF filter for the timeline service web app
    </description>
    <name>yarn.timeline-service.webapp.rest-csrf.enabled</name>
    <value>false</value>
  </property>

  <property>
    <description>
      Optional parameter that indicates the custom header name to use for CSRF
      protection.
    </description>
    <name>yarn.timeline-service.webapp.rest-csrf.custom-header</name>
    <value>X-XSRF-Header</value>
  </property>

  <property>
    <description>
      Optional parameter that indicates the list of HTTP methods that do not
      require CSRF protection
    </description>
    <name>yarn.timeline-service.webapp.rest-csrf.methods-to-ignore</name>
    <value>GET,OPTIONS,HEAD</value>
  </property>

  <property>
    <description>
      Enable the XFS filter for YARN
    </description>
    <name>yarn.webapp.xfs-filter.enabled</name>
    <value>true</value>
  </property>

  <property>
    <description>
      Property specifying the xframe options value.
    </description>
    <name>yarn.resourcemanager.webapp.xfs-filter.xframe-options</name>
    <value>SAMEORIGIN</value>
  </property>

  <property>
    <description>
      Property specifying the xframe options value.
    </description>
    <name>yarn.nodemanager.webapp.xfs-filter.xframe-options</name>
    <value>SAMEORIGIN</value>
  </property>

  <property>
    <description>
      Property specifying the xframe options value.
    </description>
    <name>yarn.timeline-service.webapp.xfs-filter.xframe-options</name>
    <value>SAMEORIGIN</value>
  </property>

  <property>
    <description>
    The least amount of time(msec.) an inactive (decommissioned or shutdown) node can
    stay in the nodes list of the resourcemanager after being declared untracked.
    A node is marked untracked if and only if it is absent from both include and
    exclude nodemanager lists on the RM. All inactive nodes are checked twice per
    timeout interval or every 10 minutes, whichever is lesser, and marked appropriately.
    The same is done when refreshNodes command (graceful or otherwise) is invoked.
    </description>
    <name>yarn.resourcemanager.node-removal-untracked.timeout-ms</name>
    <value>60000</value>
  </property>

  <property>
    <description>
    The RMAppLifetimeMonitor Service uses this value as monitor interval
    </description>
    <name>yarn.resourcemanager.application-timeouts.monitor.interval-ms</name>
    <value>3000</value>
  </property>

  <property>
    <description>
      Specifies what the RM does regarding HTTPS enforcement for communication
      with AM Web Servers, as well as generating and providing certificates.
      Possible values are:
      - NONE - the RM will do nothing special.
      - LENIENT - the RM will generate and provide a keystore and truststore
      to the AM, which it is free to use for HTTPS in its tracking URL web
      server.  The RM proxy will still allow HTTP connections to AMs that opt
      not to use HTTPS.
      - STRICT - this is the same as LENIENT, except that the RM proxy will
      only allow HTTPS connections to AMs; HTTP connections will be blocked
      and result in a warning page to the user.
    </description>
    <name>yarn.resourcemanager.application-https.policy</name>
    <value>NONE</value>
  </property>

  <property>
    <description>
      Defines the limit of the diagnostics message of an application
      attempt, in kilo characters (character count * 1024).
      When using ZooKeeper to store application state behavior, its
      important to limit the size of the diagnostic messages to
      prevent YARN from overwhelming ZooKeeper. In cases where
      yarn.resourcemanager.state-store.max-completed-applications is set to
      a large number, it may be desirable to reduce the value of this property
      to limit the total data stored.
    </description>
    <name>yarn.app.attempt.diagnostics.limit.kc</name>
    <value>64</value>
  </property>

  <property>
    <description>
      Flag to enable cross-origin (CORS) support for timeline service v1.x or
      Timeline Reader in timeline service v2. For timeline service v2, also add
      org.apache.hadoop.security.HttpCrossOriginFilterInitializer to the
      configuration hadoop.http.filter.initializers in core-site.xml.
    </description>
    <name>yarn.timeline-service.http-cross-origin.enabled</name>
    <value>false</value>
  </property>

  <property>
    <description>
      The comma separated list of class names that implement the
      RequestInterceptor interface. This is used by the RouterClientRMService
      to create the request processing pipeline for users.
    </description>
    <name>yarn.router.clientrm.interceptor-class.pipeline</name>
    <value>org.apache.hadoop.yarn.server.router.clientrm.DefaultClientRequestInterceptor</value>
  </property>

  <property>
    <description>
      The thread pool executor size of per user in Router ClientRM Service FederationClientInterceptor.
    </description>
    <name>yarn.router.interceptor.user.threadpool-size</name>
    <value>5</value>
  </property>

  <property>
    <description>
      Size of LRU cache for Router ClientRM Service and RMAdmin Service.
    </description>
    <name>yarn.router.pipeline.cache-max-size</name>
    <value>25</value>
  </property>

  <property>
    <description>
      The comma separated list of class names that implement the
      RequestInterceptor interface. This is used by the RouterRMAdminService
      to create the request processing pipeline for users.
    </description>
    <name>yarn.router.rmadmin.interceptor-class.pipeline</name>
    <value>org.apache.hadoop.yarn.server.router.rmadmin.DefaultRMAdminRequestInterceptor</value>
  </property>

  <property>
    <description>
      The actual address the server will bind to. If this optional address is
      set, the RPC and webapp servers will bind to this address and the port specified in
      yarn.router.address and yarn.router.webapp.address, respectively. This is
      most useful for making Router listen to all interfaces by setting to 0.0.0.0.
    </description>
    <name>yarn.router.bind-host</name>
    <value></value>
  </property>

  <property>
    <description>
      Comma-separated list of PlacementRules to determine how applications
      submitted by certain users get mapped to certain queues. Default is
      user-group, which corresponds to UserGroupMappingPlacementRule.
    </description>
    <name>yarn.scheduler.queue-placement-rules</name>
    <value>user-group</value>
  </property>

  <property>
    <description>
      The comma separated list of class names that implement the
      RequestInterceptor interface. This is used by the RouterWebServices
      to create the request processing pipeline for users.
    </description>
    <name>yarn.router.webapp.interceptor-class.pipeline</name>
    <value>org.apache.hadoop.yarn.server.router.webapp.DefaultRequestInterceptorREST</value>
  </property>

  <property>
    <description>
      The http address of the Router web application.
      If only a host is provided as the value,
      the webapp will be served on a random port.
    </description>
    <name>yarn.router.webapp.address</name>
    <value>0.0.0.0:8089</value>
  </property>

  <property>
    <description>
      The https address of the Router web application.
      If only a host is provided as the value,
      the webapp will be served on a random port.
    </description>
    <name> yarn.router.webapp.https.address</name>
    <value>0.0.0.0:8091</value>
  </property>

  <property>
    <description>
       It is TimelineClient 1.5 configuration whether to store active
       application’s timeline data with in user directory i.e
       ${yarn.timeline-service.entity-group-fs-store.active-dir}/${user.name}
    </description>
    <name>yarn.timeline-service.entity-group-fs-store.with-user-dir</name>
    <value>false</value>
  </property>

  <!-- resource types configuration -->
  <property>
    <name>yarn.resource-types</name>
    <value></value>
    <description>
    The resource types to be used for scheduling. Use resource-types.xml
    to specify details about the individual resource types.
    </description>
  </property>
 
  <property>
    <name>yarn.webapp.filter-entity-list-by-user</name>
    <value>false</value>
      <description>
        Flag to enable display of applications per user as an admin
        configuration.
      </description>
  </property>

  <property>
    <name>yarn.webapp.filter-invalid-xml-chars</name>
    <value>false</value>
    <description>
      Flag to enable filter of invalid xml 1.0 characters present in the
      value of diagnostics field of apps output from RM WebService.
    </description>
  </property>

  <property>
    <description>
      The type of configuration store to use for scheduler configurations.
      Default is "file", which uses file based capacity-scheduler.xml to
      retrieve and change scheduler configuration. To enable API based
      scheduler configuration, use either "memory" (in memory storage, no
      persistence across restarts), "leveldb" (leveldb based storage), or
      "zk" (zookeeper based storage). API based configuration is only useful
      when using a scheduler which supports mutable configuration. Currently
      only capacity scheduler supports this.
    </description>
    <name>yarn.scheduler.configuration.store.class</name>
    <value>file</value>
  </property>

  <property>
    <description>
      The class to use for configuration mutation ACL policy if using a mutable
      configuration provider. Controls whether a mutation request is allowed.
      The DefaultConfigurationMutationACLPolicy checks if the requestor is a
      YARN admin.
    </description>
    <name>yarn.scheduler.configuration.mutation.acl-policy.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.DefaultConfigurationMutationACLPolicy</value>
  </property>

  <property>
    <description>
      The storage path for LevelDB implementation of configuration store,
      when yarn.scheduler.configuration.store.class is configured to be
      "leveldb".
    </description>
    <name>yarn.scheduler.configuration.leveldb-store.path</name>
    <value>${hadoop.tmp.dir}/yarn/system/confstore</value>
  </property>

  <property>
    <description>
      The compaction interval for LevelDB configuration store in secs,
      when yarn.scheduler.configuration.store.class is configured to be
      "leveldb". Default is one day.
    </description>
    <name>yarn.scheduler.configuration.leveldb-store.compaction-interval-secs</name>
    <value>86400</value>
  </property>

  <property>
    <description>
      The max number of configuration change log entries kept in config
      store, when yarn.scheduler.configuration.store.class is configured to be
      "leveldb" or "zk". Default is 1000 for either.
    </description>
    <name>yarn.scheduler.configuration.store.max-logs</name>
    <value>1000</value>
  </property>

  <property>
    <description>
      The file system directory to store the configuration files. The path
      can be any format as long as it follows hadoop compatible schema,
      for example value "file:///path/to/dir" means to store files on local
      file system, value "hdfs:///path/to/dir" means to store files on HDFS.
      If resource manager HA is enabled, recommended to use hdfs schema so
      it works in fail-over scenario.
    </description>
    <name>yarn.scheduler.configuration.fs.path</name>
    <value>file://${hadoop.tmp.dir}/yarn/system/schedconf</value>
  </property>

  <property>
    <description>
      The max number of configuration file in filesystem.
      Default is 100 for either.
    </description>
    <name>yarn.scheduler.configuration.max.version</name>
    <value>100</value>
  </property>

  <property>
    <description>
      ZK root node path for configuration store when using zookeeper-based
      configuration store.
    </description>
    <name>yarn.scheduler.configuration.zk-store.parent-path</name>
    <value>/confstore</value>
  </property>

  <property>
    <description>
      Provides an option for client to load supported resource types from RM
      instead of depending on local resource-types.xml file.
    </description>
    <name>yarn.client.load.resource-types.from-server</name>
    <value>false</value>
  </property>

  <property>
    <description>
      This setting controls if pluggable device framework is enabled.
      Disabled by default
    </description>
    <name>yarn.nodemanager.pluggable-device-framework.enabled</name>
    <value>false</value>
  </property>

  <property>
    <description>
      Configure vendor device plugin class name here. Comma separated.
      The class must be found in CLASSPATH. The pluggable device framework will
      load these classes.
    </description>
    <name>yarn.nodemanager.pluggable-device-framework.device-classes</name>
    <value></value>
  </property>

  <property>
    <description>
      When yarn.nodemanager.resource.gpu.allowed-gpu-devices=auto specified,
      YARN NodeManager needs to run GPU discovery binary (now only support
      nvidia-smi) to get GPU-related information.
      When value is empty (default), YARN NodeManager will try to locate
      discovery executable itself.
      An example of the config value is: /usr/local/bin/nvidia-smi
    </description>
    <name>yarn.nodemanager.resource-plugins.gpu.path-to-discovery-executables</name>
    <value></value>
  </property>

  <property>
    <description>
      Enable additional discovery/isolation of resources on the NodeManager,
      split by comma. By default, this is empty.
      Acceptable values: { "yarn.io/gpu", "yarn.io/fpga"}.
    </description>
    <name>yarn.nodemanager.resource-plugins</name>
    <value></value>
  </property>

  <property>
    <description>
      Specifies whether the initialization of the Node Manager should continue
      if a certain device (GPU, FPGA, etc) was not found in the system. If set
      to "true", then an exception will be thrown if a device is missing or
      an error occurred during discovery.
    </description>
    <name>yarn.nodemanager.resource-plugins.fail-fast</name>
    <value></value>
  </property>

  <property>
    <description>
      Specify GPU devices which can be managed by YARN NodeManager, split by comma
      Number of GPU devices will be reported to RM to make scheduling decisions.
      Set to auto (default) let YARN automatically discover GPU resource from
      system.

      Manually specify GPU devices if auto detect GPU device failed or admin
      only want subset of GPU devices managed by YARN. GPU device is identified
      by their minor device number and index. A common approach to get minor
      device number of GPUs is using "nvidia-smi -q" and search "Minor Number"
      output.

      When manual specify minor numbers, admin needs to include indice of GPUs
      as well, format is index:minor_number[,index:minor_number...]. An example
      of manual specification is "0:0,1:1,2:2,3:4" to allow YARN NodeManager to
      manage GPU devices with indice 0/1/2/3 and minor number 0/1/2/4.
      numbers .
    </description>
    <name>yarn.nodemanager.resource-plugins.gpu.allowed-gpu-devices</name>
    <value>auto</value>
  </property>

  <property>
    <description>
      Specify docker command plugin for GPU. By default uses Nvidia docker V1.
    </description>
    <name>yarn.nodemanager.resource-plugins.gpu.docker-plugin</name>
    <value>nvidia-docker-v1</value>
  </property>

  <property>
    <description>
      Specify end point of nvidia-docker-plugin.
      Please find documentation: https://github.com/NVIDIA/nvidia-docker/wiki
      For more details.
    </description>
    <name>yarn.nodemanager.resource-plugins.gpu.docker-plugin.nvidia-docker-v1.endpoint</name>
    <value>http://localhost:3476/v1.0/docker/cli</value>
  </property>

  <property>
    <description>
      Specify one vendor plugin to handle FPGA devices discovery/IP download/configure.
      Only IntelFpgaOpenclPlugin is supported by default.
      We only allow one NM configured with one vendor FPGA plugin now since the end user can put the same
      vendor's cards in one host. And this also simplify our design.
    </description>
    <name>yarn.nodemanager.resource-plugins.fpga.vendor-plugin.class</name>
    <value>org.apache.hadoop.yarn.server.nodemanager.containermanager.resourceplugin.fpga.IntelFpgaOpenclPlugin</value>
  </property>

  <property>
    <description>
      When yarn.nodemanager.resource.fpga.allowed-fpga-devices=auto specified,
      YARN NodeManager needs to run FPGA discovery binary (now only support
      IntelFpgaOpenclPlugin) to get FPGA information.
      When value is empty (default), YARN NodeManager will try to locate
      discovery executable from vendor plugin's preference
    </description>
    <name>yarn.nodemanager.resource-plugins.fpga.path-to-discovery-executables</name>
    <value></value>
  </property>

  <property>
    <description>
      Specify FPGA devices which can be managed by YARN NodeManager, split by comma
      Number of FPGA devices will be reported to RM to make scheduling decisions.
      Set to auto (default) let YARN automatically discover FPGA resource from
      system.

      Manually specify FPGA devices if admin only want subset of FPGA devices managed by YARN.
      At present, since we can only configure one major number in c-e.cfg, FPGA device is
      identified by their minor device number. A common approach to get minor
      device number of FPGA is using "aocl diagnose" and check uevent with device name.
      A sample manual value for this is like "0,1"
    </description>
    <name>yarn.nodemanager.resource-plugins.fpga.allowed-fpga-devices</name>
    <value>auto</value>
  </property>

  <property>
    <description>
      Absolute path to a script or executable that returns the available FPGA cards.
      The returned string must be a single line and follow the format:
      "deviceA/N:M,deviceB/X:Y". Example: "acl0/243:0,acl1/243:1". The numbers after
      the "/" character are the device major and minor numbers.

      When the script is enabled, auto-discovery is disabled the "aocl" command is not
      invoked to verify the available cards.
    </description>
    <name>yarn.nodemanager.resource-plugins.fpga.device-discovery-script</name>
    <value></value>
  </property>

  <property>
    <description>
      List of FPGA available devices in the given node.
      The value must follow the format: "deviceA/N:M,deviceB/X:Y".
      Example: "acl0/243:0,acl1/243:1". The numbers after
      the "/" character are the device major and minor numbers.

      When this property is used, both auto-discovery and external script are ignored.
    </description>
    <name>yarn.nodemanager.resource-plugins.fpga.available-devices</name>
    <value></value>
  </property>

  <property>
    <description>The http address of the timeline reader web application.</description>
    <name>yarn.timeline-service.reader.webapp.address</name>
    <value>${yarn.timeline-service.webapp.address}</value>
  </property>

  <property>
    <description>The https address of the timeline reader web application.</description>
    <name>yarn.timeline-service.reader.webapp.https.address</name>
    <value>${yarn.timeline-service.webapp.https.address}</value>
  </property>

  <property>
    <description>
      The actual address timeline reader will bind to. If this optional address is
      set, the reader server will bind to this address and the port specified in
      yarn.timeline-service.reader.webapp.address.
      This is most useful for making the service listen to all interfaces by setting to
      0.0.0.0.
    </description>
    <name>yarn.timeline-service.reader.bind-host</name>
    <value></value>
  </property>

  <property>
    <description>
    Whether to enable the NUMA awareness for containers in Node Manager.
    </description>
    <name>yarn.nodemanager.numa-awareness.enabled</name>
    <value>false</value>
  </property>

  <property>
    <description>
    Whether to read the NUMA topology from the system or from the
    configurations. If the value is true then NM reads the NUMA topology from
    system using the command 'numactl --hardware'. If the value is false then NM
    reads the topology from the configurations
    'yarn.nodemanager.numa-awareness.node-ids'(for node id's),
    'yarn.nodemanager.numa-awareness.&lt;NODE_ID&gt;.memory'(for each node memory),
    'yarn.nodemanager.numa-awareness.&lt;NODE_ID&gt;.cpus'(for each node cpus).
    </description>
    <name>yarn.nodemanager.numa-awareness.read-topology</name>
    <value>false</value>
  </property>

  <property>
    <description>
    NUMA node id's in the form of comma separated list. Memory and No of CPUs
    will be read using the properties
    'yarn.nodemanager.numa-awareness.&lt;NODE_ID&gt;.memory' and
    'yarn.nodemanager.numa-awareness.&lt;NODE_ID&gt;.cpus' for each id specified
    in this value. This property value will be read only when
    'yarn.nodemanager.numa-awareness.read-topology=false'.

    For example, if yarn.nodemanager.numa-awareness.node-ids=0,1
    then need to specify memory and cpus for node id's '0' and '1' like below,
    yarn.nodemanager.numa-awareness.0.memory=73717
    yarn.nodemanager.numa-awareness.0.cpus=4
    yarn.nodemanager.numa-awareness.1.memory=73727
    yarn.nodemanager.numa-awareness.1.cpus=4
    </description>
    <name>yarn.nodemanager.numa-awareness.node-ids</name>
    <value></value>
  </property>

  <property>
    <description>
    The numactl command path which controls NUMA policy for processes or
    shared memory.
    </description>
    <name>yarn.nodemanager.numa-awareness.numactl.cmd</name>
    <value>/usr/bin/numactl</value>
  </property>

  <property>
    <description>
      Enable elastic memory control. This is a Linux only feature.
      When enabled, the node manager adds a listener to receive an
      event, if all the containers exceeded a limit.
      The limit is specified by yarn.nodemanager.resource.memory-mb.
      If this is not set, the limit is set based on the capabilities.
      See yarn.nodemanager.resource.detect-hardware-capabilities
      for details.
      The limit applies to the physical or virtual (rss+swap) memory
      depending on whether yarn.nodemanager.pmem-check-enabled or
      yarn.nodemanager.vmem-check-enabled is set.
    </description>
    <name>yarn.nodemanager.elastic-memory-control.enabled</name>
    <value>false</value>
  </property>

  <property>
    <description>
      The name of a JVM class. The class must implement the Runnable
      interface. It is called,
      if yarn.nodemanager.elastic-memory-control.enabled
      is set and the system reaches its memory limit.
      When called the handler must preempt a container,
      since all containers are frozen by cgroups.
      Once preempted some memory is released, so that the
      kernel can resume all containers. Because of this the
      handler has to act quickly.
    </description>
    <name>yarn.nodemanager.elastic-memory-control.oom-handler</name>
    <value>org.apache.hadoop.yarn.server.nodemanager.containermanager.linux.resources.DefaultOOMHandler</value>
  </property>

  <property>
    <description>
      The path to the oom-listener tool. Elastic memory control is only
      supported on Linux. It relies on kernel events. The tool forwards
      these kernel events to the standard input, so that the node manager
      can preempt containers, in and out-of-memory scenario.
      You rarely need to update this setting.
    </description>
    <name>yarn.nodemanager.elastic-memory-control.oom-listener.path</name>
    <value></value>
  </property>

  <property>
    <description>
      Maximum time to wait for an OOM situation to get resolved before
      bringing down the node.
    </description>
    <name>yarn.nodemanager.elastic-memory-control.timeout-sec</name>
    <value>5</value>
  </property>
  <property>
    <description>
      URI for NodeAttributeManager. The default value is
      /tmp/hadoop-yarn-${user}/node-attribute/ in the local filesystem.
    </description>
    <name>yarn.node-attribute.fs-store.root-dir</name>
    <value></value>
  </property>

  <property>
    <description>
      Choose different implementation of node attribute's storage
    </description>
    <name>yarn.node-attribute.fs-store.impl.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.nodelabels.FileSystemNodeAttributeStore</value>
  </property>

  <!-- CSI configuration -->
  <property>
    <description>
      CSI driver adaptor addresses on a node manager.
      This configuration will be loaded by the resource manager to initiate
      a client for each adaptor in order to communicate with CSI drivers.
      Note, these addresses should be mapped to the adaptor addresses which
      runs the controller plugin.
    </description>
    <name>yarn.nodemanager.csi-driver-adaptor.addresses</name>
    <value></value>
  </property>

  <property>
    <description>
      CSI driver names running on this node, multiple driver names need to
      be delimited by comma. The driver name should be same value returned
      by the getPluginInfo call.For each of the CSI driver name, it must
      to define following two corresponding properties:
        "yarn.nodemanager.csi-driver.${NAME}.endpoint"
        "yarn.nodemanager.csi-driver-adaptor.${NAME}.address"
      The 1st property defines where the driver's endpoint is;
      2nd property defines where the mapping csi-driver-adaptor's address is.
      What's more, an optional csi-driver-adaptor class can be defined
      for each csi-driver:
        "yarn.nodemanager.csi-driver.${NAME}.class"
      once given, the adaptor will be initiated with the given class instead
      of the default implementation
      org.apache.hadoop.yarn.csi.adaptor.DefaultCsiAdaptorImpl. User can plug
      customized adaptor code for csi-driver with this configuration
      if necessary.
    </description>
    <name>yarn.nodemanager.csi-driver.names</name>
    <value></value>
  </property>

  <property>
    <description>The cleanup interval for activities in milliseconds.</description>
    <name>yarn.resourcemanager.activities-manager.cleanup-interval-ms</name>
    <value>5000</value>
  </property>

  <property>
    <description>Time to live for scheduler activities in milliseconds.</description>
    <name>yarn.resourcemanager.activities-manager.scheduler-activities.ttl-ms</name>
    <value>600000</value>
  </property>

  <property>
    <description>Time to live for app activities in milliseconds.</description>
    <name>yarn.resourcemanager.activities-manager.app-activities.ttl-ms</name>
    <value>600000</value>
  </property>

  <property>
    <description>Max queue length for app activities.</description>
    <name>yarn.resourcemanager.activities-manager.app-activities.max-queue-length</name>
    <value>100</value>
  </property>

  <property>
    <description>
      Containers launcher implementation for determining how containers
      are launched within NodeManagers.
    </description>
    <name>yarn.nodemanager.containers-launcher.class</name>
    <value>org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainersLauncher</value>
  </property>

  <property>
    <description>
      Enable the Pre processing of Application Submission context with server side configuration
    </description>
    <name>yarn.resourcemanager.submission-preprocessor.enabled</name>
    <value>false</value>
  </property>

  <property>
    <description>Path to file with hosts for the submission processor to handle.</description>
    <name>yarn.resourcemanager.submission-preprocessor.file-path</name>
    <value></value>
  </property>

  <property>
    <description>Submission processor refresh interval</description>
    <name>yarn.resourcemanager.submission-preprocessor.file-refresh-interval-ms</name>
    <value>60000</value>
  </property>

  <property>
    <description>
      Comma-separated list of partitions. If a label P is in this list,
      then the RM will enforce that an app has resource requests with label
      P iff that app's node label expression is P.
    </description>
    <name>yarn.node-labels.exclusive-enforced-partitions</name>
    <value></value>
  </property>

  <property>
    <description>
      Prefix used to identify the YARN tag which contains workflow ID. If a tag coming in application
      submission context has this prefix, whatever follows the prefix will be considered as workflow ID
      associated with the application. This configuration is used by features such as workflow priority
      for identifying the workflow associated with an application.
    </description>
    <name>yarn.workflow-id.tag-prefix</name>
    <value>workflowid:</value>
  </property>

  <property>
    <description>Whether or not to allow application submissions via REST. Default is true.</description>
    <name>yarn.webapp.enable-rest-app-submissions</name>
    <value>true</value>
  </property>

   <property>
    <description>
      The maximum number of application attempts. It's a global
      setting for all application masters. Each application master can specify
      its individual maximum number of application attempts via the API, but the
      individual number cannot be more than the global upper bound. If it is,
      the resourcemanager will override it. The default number value is set to
      yarn.resourcemanager.am.max-attempts.
    </description>
    <name>yarn.resourcemanager.am.global.max-attempts</name>
    <value></value>
  </property>

  <property>
    <description>Max number of application tags set by user in ApplicationSubmissionContext
      while submitting application</description>
    <name>yarn.resourcemanager.application.max-tags</name>
    <value>10</value>
  </property>

  <property>
    <description>Max length of each application tag set by user in ApplicationSubmissionContext
      while submitting application.</description>
    <name>yarn.resourcemanager.application.max-tag.length</name>
    <value>100</value>
  </property>

  <property>
    <description>Specifies whether application tags should be converted to lowercase or not.</description>
    <name>yarn.resourcemanager.application-tag-based-placement.force-lowercase</name>
    <value>true</value>
  </property>

  <property>
    <description>
      Whether to enable RM to mark inactive nodes as untracked after the timeout
      specified by yarn.resourcemanager.node-removal-untracked.timeout-ms and
      then remove them from nodes list for the YARN cluster without configured
      include path, which means RM can periodically clear inactive nodes to
      avoid increasing memory to store these data when enabled, most desired by
      elastic cloud environment with frequent auto-scaling operations.
      It works only when the YARN cluster doesn't utilize include file, the key
      configurations are as follows:
          yarn.resourcemanager.nodes.exclude-path=/path-to-exclude-file
          yarn.resourcemanager.nodes.include-path=
          yarn.resourcemanager.node-removal-untracked.timeout-ms=60000
      In this situation, the inactive nodes will never be marked as untracked
      and removed from the nodes list unless this configuration is enabled:
          yarn.resourcemanager.enable-node-untracked-without-include-path=true
    </description>
    <name>yarn.resourcemanager.enable-node-untracked-without-include-path</name>
    <value>false</value>
  </property>

  <property>
    <name>yarn.scheduler.app-placement-allocator.class</name>
    <value></value>
    <description>
      In the absence of APPLICATION_PLACEMENT_TYPE_CLASS from the RM
      application scheduling environments, the value of this config
      is used to determine the default implementation of AppPlacementAllocator.
      If APPLICATION_PLACEMENT_TYPE_CLASS is absent from the application
      scheduling env and this config also has no value present, then
      default implementation LocalityAppPlacementAllocator is used.
    </description>
  </property>

  <property>
    <name>yarn.router.keytab.file</name>
    <value></value>
    <description>
       The keytab file used by router to login as its
       service principal. The principal name is configured with
       dfs.federation.router.kerberos.principal.
    </description>
  </property>

  <property>
    <name>yarn.router.kerberos.principal</name>
    <value></value>
    <description>
      The Router service principal. This is typically set to
      router/_HOST@REALM.TLD. Each Router will substitute _HOST with its
      own fully qualified hostname at startup. The _HOST placeholder
      allows using the same configuration setting on both Router setup.
    </description>
  </property>

  <property>
    <name>yarn.router.kerberos.principal.hostname</name>
    <value></value>
    <description>
      Optional.
      The hostname for the Router containing this
      configuration file. Will be different for each machine.
      Defaults to current hostname.
    </description>
  </property>

  <property>
    <name>yarn.router.webapp.appsinfo-enabled</name>
    <value>false</value>
    <description>
      This configuration is used to enable the cache of AppsInfo.
      If it is set to true, the cache is enabled.
      If it is set to false, the cache is not enabled.
    </description>
  </property>

  <property>
    <name>yarn.router.webapp.appsinfo-cached-count</name>
    <value>100</value>
    <description>
      When yarn.router.appsinfo-enabled is set to true,
      the number of cached appsInfo.
      Default is 100
    </description>
  </property>
  
  <property>
    <name>yarn.router.webapp.cross-origin.enabled</name>
    <value>false</value>
    <description>
      Flag to enable cross-origin (CORS) support for Yarn Router.
      For Yarn Router, also add
      org.apache.hadoop.security.HttpCrossOriginFilterInitializer to the
      configuration hadoop.http.filter.initializers in core-site.xml.
    </description>
  </property>
  
  <property>
    <name>yarn.federation.state-store.max-applications</name>
    <value>1000</value>
    <description>
      Yarn federation state-store supports querying the maximum number of apps.
      Default is 1000.
    </description>
  </property>

  <property>
    <name>yarn.nodemanager.dispatcher.metric.enable</name>
    <value>false</value>
    <description>
      Yarn NodeManager enables Dispatcher Metric.
      if true, will enable dispatcher metric; if false, will not enable dispatcher metric;
      Default is false.
    </description>
  </property>

  <property>
    <name>yarn.router.interceptor.user-thread-pool.minimum-pool-size</name>
    <value>5</value>
    <description>
      This configurable is used to set the corePoolSize(minimumPoolSize)
      of the thread pool of the interceptor.
      Default is 5.
    </description>
  </property>

  <property>
    <name>yarn.router.interceptor.user-thread-pool.maximum-pool-size</name>
    <value>5</value>
    <description>
      This configuration is used to set the default value of maximumPoolSize
      of the thread pool of the interceptor.
      Default is 5.
    </description>
  </property>

  <property>
    <name>yarn.router.interceptor.user-thread-pool.keep-alive-time</name>
    <value>0s</value>
    <description>
      This configurable is used to set the keepAliveTime of the thread pool of the interceptor.
      Default is 0s.
    </description>
  </property>

  <property>
    <name>yarn.router.submit.interval.time</name>
    <value>10ms</value>
    <description>
      The interval Time between calling different subCluster requests.
      Default is 10ms.
    </description>
  </property>

  <property>
    <name>yarn.router.interceptor.allow-partial-result.enable</name>
    <value>false</value>
    <description>
      This configuration represents whether to allow the interceptor to
      return partial SubCluster results.
      If true, we will ignore the exception to some subClusters during the calling process,
      and return result.
      If false, if an exception occurs in a subCluster during the calling process,
      an exception will be thrown directly.
      Default is false.
    </description>
  </property>

  <property>
    <name>yarn.router.submit.interval.time</name>
    <value>10ms</value>
    <description>
      The interval Time between calling different subCluster requests.
      Default is 10ms.
    </description>
  </property>

  <property>
    <name>yarn.router.asc-interceptor-max-size</name>
    <value>1MB</value>
    <description>
      We define the size limit of ApplicationSubmissionContext.
      If the size of the ApplicationSubmissionContext is larger than this value,
      We will throw an exception. the default value is 1MB.
    </description>
  </property>

  <property>
    <description>
      The number of threads to use for the Router scheduled executor service.
    </description>
    <name>yarn.router.subcluster.cleaner.interval.time</name>
    <value>1</value>
  </property>

  <property>
    <description>
      The interval at which the subClusterCleaner runs. Default is 60s.
    </description>
    <name>yarn.router.subcluster.cleaner.interval.time</name>
    <value>60s</value>
  </property>

  <property>
    <description>
      SubCluster heartbeat timeout. Default is 30mins.
    </description>
    <name>yarn.router.subcluster.heartbeat.expiration.time</name>
    <value>30m</value>
  </property>

  <property>
    <description>
      Whether to enable deregisterSubCluster. Default is true.
    </description>
    <name>yarn.router.deregister.subcluster.enabled</name>
    <value>true</value>
  </property>

  <property>
    <description>
      Number of Router Scheduler Threads.
    </description>
    <name>yarn.router.scheduled.executor.threads</name>
    <value>1</value>
  </property>

  <property>
    <description>
      Number of Retries while trying to make root directory for node store.
    </description>
    <name>yarn.resourcemanager.nodestore-rootdir.num-retries</name>
    <value>1000</value>
  </property>

  <property>
    <description>
      Interval in ms between retries while trying to make root directory for node store.
    </description>
    <name>yarn.resourcemanager.nodestore-rootdir.retry-interval-ms</name>
    <value>1000</value>
  </property>

  <property>
    <description>The property controls the minimum number of idle connections that
      HikariCP tries to maintain in the pool.</description>
    <name>yarn.federation.state-store.sql.minimum-idle</name>
    <value>1</value>
  </property>

  <property>
    <description>
      Specifies the name of the connection pool used by the FederationSQLStateStore.
    </description>
    <name>yarn.federation.state-store.sql.pool-name</name>
    <value>YARN-Federation-DataBasePool</value>
  </property>

  <property>
    <description>
      This property controls the maximum lifetime of a connection in the pool.
    </description>
    <name>yarn.federation.state-store.sql.max-life-time</name>
    <value>30m</value>
  </property>

  <property>
    <description>
      This property controls the maximum amount of time
      that a connection is allowed to sit idle in the pool.
    </description>
    <name>yarn.federation.state-store.sql.idle-time-out</name>
    <value>10m</value>
  </property>

  <property>
    <description>Set the maximum amount of time
      that a client will wait for a connection from the pool.</description>
    <name>yarn.federation.state-store.sql.conn-time-out</name>
    <value>10s</value>
  </property>

  <property>
    <description>
      Specifies the class name of the cache implementation in YARN FederationCache.
      By default, this property is org.apache.hadoop.yarn.server.federation.cache.FederationJCache.
    </description>
    <name>yarn.federation.cache.class</name>
    <value>org.apache.hadoop.yarn.server.federation.cache.FederationJCache</value>
  </property>

  <property>
    <description>
      After enabling YARN Federation mode,
      clients can be allowed to randomly choose a Router and support FailOver.
      By default, the configuration is set to false,
      and clients start attempting from the first Router.
    </description>
    <name>yarn.federation.failover.random.order</name>
    <value>false</value>
  </property>

  <property>
    <name>yarn.apps.cache.enable</name>
    <value>false</value>
    <description>
      Optional.
      To enable cache for RMWebServices.getApps
    </description>
  </property>

  <property>
    <name>yarn.apps.cache.size</name>
    <value>1000</value>
    <description>
      Optional.
      The size of cache for RMWebServices.getApps when
      yarn.apps.cache.enable = true, Default is 1000
    </description>
  </property>

  <property>
    <name>yarn.apps.cache.expire</name>
    <value>30s</value>
    <description>
      Optional.
      The expire time of cache for RMWebServices.getApps when
      yarn.apps.cache.enable = true, Default is 30s
    </description>
  </property>

  <property>
    <name>yarn.nodemanager.log.trigger.delete.by-size.enabled</name>
    <value>false</value>
    <description>
      Optional.
      Enabled trigger log-dir deletion by size for NonAggregatingLogHandler
    </description>
  </property>

  <property>
    <name>yarn.nodemanager.log.delete.threshold</name>
    <value>100g</value>
    <description>
      Optional.
      Trigger log-dir deletion when the total log size of an app is greater than
      yarn.nodemanager.log.delete.threshold and
      yarn.nodemanager.log.trigger.delete.by-size.enabled = true.
      You can use the following suffix (case insensitive): k(kilo), m(mega), g(giga), t(tera), p(peta),
      e(exa) to specify the size (such as 128k, 512m, 1g, etc.),
      Or provide complete size in bytes (such as 134217728 for 128 MB).
    </description>
  </property>

  <property>
    <description>
      If Yarn untracked removal is enabled, then this config can control what all
      node states can be removed. If the untracked node is not having one of these
      states, then node will skipped for removal. If this config value is set to
      empty, all node states, will be eligible for removal
      NodeState is an ENUM: org.apache.hadoop.yarn.api.records.NodeState
    </description>
    <name>yarn.resourcemanager.node-removal-untracked.node-selective-states-to-remove</name>
    <value></value>
  </property>

</configuration>
