<?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 expiry interval for application master reporting.</description>
    <name>yarn.am.liveness-monitor.expiry-interval-ms</name>
    <value>600000</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>
      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 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 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 ResourceManger such that all the
      ResourceManagers have shared admin access and the Active ResourceManger
      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 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 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>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>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>
    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>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>Max number of OPPORTUNISTIC containers to queue at the
      nodemanager.</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>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>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>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>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>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>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>Frequency of running node health script.</description>
    <name>yarn.nodemanager.health-checker.interval-ms</name>
    <value>600000</value>
  </property>

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

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

  <property>
    <description>The arguments to pass to the health check script.</description>
    <name>yarn.nodemanager.health-checker.script.opts</name>
    <value></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>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.</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 that must be available on a disk for
    it to be used. This applies to yarn.nodemanager.local-dirs and
    yarn.nodemanager.log-dirs.</description>
    <name>yarn.nodemanager.disk-health-checker.min-free-space-per-disk-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, 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>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>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 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>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>

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

  <!--  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 periodically node labels are retrieved
    from the node labels provider. This configuration is to define the
    interval. 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>

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

  <!-- 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 configure, logs can be uploaded
    periodically when the application is running. The minimum rolling-interval-seconds
    can be set is 3600.
    </description>
    <name>yarn.nodemanager.log-aggregation.roll-monitoring-interval-seconds</name>
    <value>-1</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>
    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>
      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>
      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>
      The number of threads to use for the GPG scheduled executor service.
    </description>
    <name>yarn.federation.gpg.scheduled.executor.threads</name>
    <value>10</value>
  </property>

  <property>
    <description>
      The interval at which the subcluster cleaner runs, -1 means disabled.
    </description>
    <name>yarn.federation.gpg.subcluster.cleaner.interval-ms</name>
    <value>-1</value>
  </property>

  <property>
    <description>
      The expiration time for a subcluster heartbeat, default is 30 minutes.
    </description>
    <name>yarn.federation.gpg.subcluster.heartbeat.expiration-ms</name>
    <value>1800000</value>
  </property>

  <property>
    <description>
      The Application Cleaner implementation class for GPG to use.
    </description>
    <name>yarn.federation.gpg.application.cleaner.class</name>
    <value>org.apache.hadoop.yarn.server.globalpolicygenerator.applicationcleaner.DefaultApplicationCleaner</value>
  </property>

  <property>
    <description>
      The interval at which the application cleaner runs, -1 means disabled.
    </description>
    <name>yarn.federation.gpg.application.cleaner.interval-ms</name>
    <value>-1</value>
  </property>

  <property>
    <description>
      Specifications on how (many times) to contact Router for apps. We need to
      do this because Router might return partial application list because some
      sub-cluster RM is not responsive (e.g. failing over).
      Should have three values separated by comma: minimal success retries,
      maximum total retry, retry interval (ms).
    </description>
    <name>yarn.federation.gpg.application.cleaner.contact.router.spec</name>
    <value>3,10,600000</value>
  </property>

  <property>
    <description>
      The interval at which the policy generator runs, default is one hour
    </description>
    <name>yarn.federation.gpg.policy.generator.interval-ms</name>
    <value>3600000</value>
  </property>

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

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

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

  <property>
    <description>
      The configured policy generator class, runs NoOpGlobalPolicy by default
    </description>
    <name>yarn.federation.gpg.policy.generator.class</name>
    <value>org.apache.hadoop.yarn.server.globalpolicygenerator.policygenerator.NoOpGlobalPolicy</value>
  </property>

  <property>
    <description>
      Whether or not the policy generator is running in read only (won't modify policies), default is false
    </description>
    <name>yarn.federation.gpg.policy.generator.readonly</name>
    <value>false</value>
  </property>

  <property>
    <description>
      Whether or not the policy generator is running in read only (won't modify policies), default is false
    </description>
    <name>yarn.federation.gpg.policy.generator.readonly</name>
    <value>false</value>
  </property>

  <property>
    <description>
      Which subclusters the gpg should blacklist, default is none
    </description>
    <name>yarn.federation.gpg.policy.generator.blacklist</name>
    <value></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>
    <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>
      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>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>
</configuration>
