<?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 hdfs-site.xml and change them -->
<!-- there.  If hdfs-site.xml does not already exist, create it.      -->

<configuration>

<property>
  <name>hadoop.hdfs.configuration.version</name>
  <value>1</value>
  <description>version of this configuration file</description>
</property>

<property>
  <name>dfs.namenode.rpc-address</name>
  <value></value>
  <description>
    RPC address that handles all clients requests. In the case of HA/Federation where multiple namenodes exist,
    the name service id is added to the name e.g. dfs.namenode.rpc-address.ns1
    dfs.namenode.rpc-address.EXAMPLENAMESERVICE
    The value of this property will take the form of nn-host1:rpc-port. The NameNode's default RPC port is 8020.
  </description>
</property>

<property>
  <name>dfs.namenode.rpc-bind-host</name>
  <value></value>
  <description>
    The actual address the RPC server will bind to. If this optional address is
    set, it overrides only the hostname portion of dfs.namenode.rpc-address.
    It can also be specified per name node or name service for HA/Federation.
    This is useful for making the name node listen on all interfaces by
    setting it to 0.0.0.0.
  </description>
</property>

<property>
  <name>dfs.namenode.servicerpc-address</name>
  <value></value>
  <description>
    RPC address for HDFS Services communication. BackupNode, Datanodes and all other services should be
    connecting to this address if it is configured. In the case of HA/Federation where multiple namenodes exist,
    the name service id is added to the name e.g. dfs.namenode.servicerpc-address.ns1
    dfs.namenode.rpc-address.EXAMPLENAMESERVICE
    The value of this property will take the form of nn-host1:rpc-port.
    If the value of this property is unset the value of dfs.namenode.rpc-address will be used as the default.
  </description>
</property>

<property>
  <name>dfs.namenode.servicerpc-bind-host</name>
  <value></value>
  <description>
    The actual address the service RPC server will bind to. If this optional address is
    set, it overrides only the hostname portion of dfs.namenode.servicerpc-address.
    It can also be specified per name node or name service for HA/Federation.
    This is useful for making the name node listen on all interfaces by
    setting it to 0.0.0.0.
  </description>
</property>

<property>
  <name>dfs.namenode.lifeline.rpc-address</name>
  <value></value>
  <description>
    NameNode RPC lifeline address.  This is an optional separate RPC address
    that can be used to isolate health checks and liveness to protect against
    resource exhaustion in the main RPC handler pool.  In the case of
    HA/Federation where multiple NameNodes exist, the name service ID is added
    to the name e.g. dfs.namenode.lifeline.rpc-address.ns1.  The value of this
    property will take the form of nn-host1:rpc-port.  If this property is not
    defined, then the NameNode will not start a lifeline RPC server.  By
    default, the property is not defined.
  </description>
</property>

<property>
  <name>dfs.namenode.lifeline.rpc-bind-host</name>
  <value></value>
  <description>
    The actual address the lifeline RPC server will bind to.  If this optional
    address is set, it overrides only the hostname portion of
    dfs.namenode.lifeline.rpc-address.  It can also be specified per name node
    or name service for HA/Federation.  This is useful for making the name node
    listen on all interfaces by setting it to 0.0.0.0.
  </description>
</property>

<property>
  <name>dfs.namenode.secondary.http-address</name>
  <value>0.0.0.0:9868</value>
  <description>
    The secondary namenode http server address and port.
  </description>
</property>

<property>
  <name>dfs.namenode.secondary.https-address</name>
  <value>0.0.0.0:9869</value>
  <description>
    The secondary namenode HTTPS server address and port.
  </description>
</property>

<property>
  <name>dfs.datanode.address</name>
  <value>0.0.0.0:9866</value>
  <description>
    The datanode server address and port for data transfer.
  </description>
</property>

<property>
  <name>dfs.datanode.http.address</name>
  <value>0.0.0.0:9864</value>
  <description>
    The datanode http server address and port.
  </description>
</property>

<property>
  <name>dfs.datanode.ipc.address</name>
  <value>0.0.0.0:9867</value>
  <description>
    The datanode ipc server address and port.
  </description>
</property>

<property>
  <name>dfs.datanode.http.internal-proxy.port</name>
  <value>0</value>
  <description>
    The datanode's internal web proxy port.
    By default it selects a random port available in runtime.
  </description>
</property>

<property>
  <name>dfs.datanode.handler.count</name>
  <value>10</value>
  <description>The number of server threads for the datanode.</description>
</property>

<property>
  <name>dfs.namenode.http-address</name>
  <value>0.0.0.0:9870</value>
  <description>
    The address and the base port where the dfs namenode web ui will listen on.
  </description>
</property>

<property>
  <name>dfs.namenode.http-bind-host</name>
  <value></value>
  <description>
    The actual address the HTTP server will bind to. If this optional address
    is set, it overrides only the hostname portion of dfs.namenode.http-address.
    It can also be specified per name node or name service for HA/Federation.
    This is useful for making the name node HTTP server listen on all
    interfaces by setting it to 0.0.0.0.
  </description>
</property>

<property>
  <name>dfs.namenode.heartbeat.recheck-interval</name>
  <value>300000</value>
  <description>
    This time decides the interval to check for expired datanodes.
    With this value and dfs.heartbeat.interval, the interval of
    deciding the datanode is stale or not is also calculated.
    The unit of this configuration is millisecond.
  </description>
</property>

<property>
  <name>dfs.http.policy</name>
  <value>HTTP_ONLY</value>
  <description>Decide if HTTPS(SSL) is supported on HDFS
    This configures the HTTP endpoint for HDFS daemons:
      The following values are supported:
      - HTTP_ONLY : Service is provided only on http
      - HTTPS_ONLY : Service is provided only on https
      - HTTP_AND_HTTPS : Service is provided both on http and https
  </description>
</property>

<property>
  <name>dfs.client.https.need-auth</name>
  <value>false</value>
  <description>Whether SSL client certificate authentication is required
  </description>
</property>

<property>
  <name>dfs.client.cached.conn.retry</name>
  <value>3</value>
  <description>The number of times the HDFS client will pull a socket from the
   cache.  Once this number is exceeded, the client will try to create a new
   socket.
  </description>
</property>


<property>
  <name>dfs.https.server.keystore.resource</name>
  <value>ssl-server.xml</value>
  <description>Resource file from which ssl server keystore
  information will be extracted
  </description>
</property>

<property>
  <name>dfs.client.https.keystore.resource</name>
  <value>ssl-client.xml</value>
  <description>Resource file from which ssl client keystore
  information will be extracted
  </description>
</property>

<property>
  <name>dfs.datanode.https.address</name>
  <value>0.0.0.0:9865</value>
  <description>The datanode secure http server address and port.</description>
</property>

<property>
  <name>dfs.namenode.https-address</name>
  <value>0.0.0.0:9871</value>
  <description>The namenode secure http server address and port.</description>
</property>

<property>
  <name>dfs.namenode.https-bind-host</name>
  <value></value>
  <description>
    The actual address the HTTPS server will bind to. If this optional address
    is set, it overrides only the hostname portion of dfs.namenode.https-address.
    It can also be specified per name node or name service for HA/Federation.
    This is useful for making the name node HTTPS server listen on all
    interfaces by setting it to 0.0.0.0.
  </description>
</property>

 <property>
   <name>dfs.datanode.dns.interface</name>
   <value>default</value>
   <description>
     The name of the Network Interface from which a data node should
     report its IP address. e.g. eth2. This setting may be required for some
     multi-homed nodes where the DataNodes are assigned multiple hostnames
     and it is desirable for the DataNodes to use a non-default hostname.

     Prefer using hadoop.security.dns.interface over
     dfs.datanode.dns.interface.
   </description>
 </property>

<property>
  <name>dfs.datanode.dns.nameserver</name>
  <value>default</value>
  <description>
    The host name or IP address of the name server (DNS) which a DataNode
    should use to determine its own host name.

    Prefer using hadoop.security.dns.nameserver over
    dfs.datanode.dns.nameserver.
  </description>
 </property>

 <property>
  <name>dfs.namenode.backup.address</name>
  <value>0.0.0.0:50100</value>
  <description>
    The backup node server address and port.
    If the port is 0 then the server will start on a free port.
  </description>
</property>

 <property>
  <name>dfs.namenode.backup.http-address</name>
  <value>0.0.0.0:50105</value>
  <description>
    The backup node http server address and port.
    If the port is 0 then the server will start on a free port.
  </description>
</property>

<property>
  <name>dfs.namenode.redundancy.considerLoad</name>
  <value>true</value>
  <description>Decide if chooseTarget considers the target's load or not
  </description>
</property>

  <property>
    <name>dfs.namenode.redundancy.considerLoad.factor</name>
    <value>2.0</value>
    <description>The factor by which a node's load can exceed the average
      before being rejected for writes, only if considerLoad is true.
    </description>
  </property>

<property>
  <name>dfs.default.chunk.view.size</name>
  <value>32768</value>
  <description>The number of bytes to view for a file on the browser.
  </description>
</property>

<property>
  <name>dfs.datanode.du.reserved</name>
  <value>0</value>
  <description>Reserved space in bytes per volume. Always leave this much space free for non dfs use.
      Specific storage type based reservation is also supported. The property can be followed with
      corresponding storage types ([ssd]/[disk]/[archive]/[ram_disk]) for cluster with heterogeneous storage.
      For example, reserved space for RAM_DISK storage can be configured using property
      'dfs.datanode.du.reserved.ram_disk'. If specific storage type reservation is not configured
      then dfs.datanode.du.reserved will be used.
  </description>
</property>

<property>
  <name>dfs.namenode.name.dir</name>
  <value>file://${hadoop.tmp.dir}/dfs/name</value>
  <description>Determines where on the local filesystem the DFS name node
      should store the name table(fsimage).  If this is a comma-delimited list
      of directories then the name table is replicated in all of the
      directories, for redundancy. </description>
</property>

<property>
  <name>dfs.namenode.name.dir.restore</name>
  <value>false</value>
  <description>Set to true to enable NameNode to attempt recovering a
      previously failed dfs.namenode.name.dir. When enabled, a recovery of any
      failed directory is attempted during checkpoint.</description>
</property>

<property>
  <name>dfs.namenode.fs-limits.max-component-length</name>
  <value>255</value>
  <description>Defines the maximum number of bytes in UTF-8 encoding in each
      component of a path.  A value of 0 will disable the check.</description>
</property>

<property>
  <name>dfs.namenode.fs-limits.max-directory-items</name>
  <value>1048576</value>
  <description>Defines the maximum number of items that a directory may
      contain. Cannot set the property to a value less than 1 or more than
      6400000.</description>
</property>

<property>
  <name>dfs.namenode.fs-limits.min-block-size</name>
  <value>1048576</value>
  <description>Minimum block size in bytes, enforced by the Namenode at create
      time. This prevents the accidental creation of files with tiny block
      sizes (and thus many blocks), which can degrade
      performance.</description>
</property>

<property>
    <name>dfs.namenode.fs-limits.max-blocks-per-file</name>
    <value>10000</value>
    <description>Maximum number of blocks per file, enforced by the Namenode on
        write. This prevents the creation of extremely large files which can
        degrade performance.</description>
</property>

<property>
  <name>dfs.namenode.edits.dir</name>
  <value>${dfs.namenode.name.dir}</value>
  <description>Determines where on the local filesystem the DFS name node
      should store the transaction (edits) file. If this is a comma-delimited list
      of directories then the transaction file is replicated in all of the 
      directories, for redundancy. Default value is same as dfs.namenode.name.dir
  </description>
</property>

<property>
  <name>dfs.namenode.edits.dir.required</name>
  <value></value>
  <description>This should be a subset of dfs.namenode.edits.dir,
      to ensure that the transaction (edits) file
      in these places is always up-to-date.
  </description>
</property>

<property>
  <name>dfs.namenode.shared.edits.dir</name>
  <value></value>
  <description>A directory on shared storage between the multiple namenodes
  in an HA cluster. This directory will be written by the active and read
  by the standby in order to keep the namespaces synchronized. This directory
  does not need to be listed in dfs.namenode.edits.dir above. It should be
  left empty in a non-HA cluster.
  </description>
</property>

<property>
  <name>dfs.namenode.edits.journal-plugin.qjournal</name>
  <value>org.apache.hadoop.hdfs.qjournal.client.QuorumJournalManager</value>
</property>

<property>
  <name>dfs.permissions.enabled</name>
  <value>true</value>
  <description>
    If "true", enable permission checking in HDFS.
    If "false", permission checking is turned off,
    but all other behavior is unchanged.
    Switching from one parameter value to the other does not change the mode,
    owner or group of files or directories.
  </description>
</property>

<property>
  <name>dfs.permissions.superusergroup</name>
  <value>supergroup</value>
  <description>The name of the group of super-users.
    The value should be a single group name.
  </description>
</property>

<property>
   <name>dfs.cluster.administrators</name>
   <value></value>
   <description>ACL for the admins, this configuration is used to control
     who can access the default servlets in the namenode, etc. The value
     should be a comma separated list of users and groups. The user list
     comes first and is separated by a space followed by the group list,
     e.g. "user1,user2 group1,group2". Both users and groups are optional,
     so "user1", " group1", "", "user1 group1", "user1,user2 group1,group2"
     are all valid (note the leading space in " group1"). '*' grants access
     to all users and groups, e.g. '*', '* ' and ' *' are all valid.
   </description>
</property>

<property>
  <name>dfs.namenode.acls.enabled</name>
  <value>false</value>
  <description>
    Set to true to enable support for HDFS ACLs (Access Control Lists).  By
    default, ACLs are disabled.  When ACLs are disabled, the NameNode rejects
    all RPCs related to setting or getting ACLs.
  </description>
</property>

  <property>
    <name>dfs.namenode.posix.acl.inheritance.enabled</name>
    <value>true</value>
    <description>
      Set to true to enable POSIX style ACL inheritance. When it is enabled
      and the create request comes from a compatible client, the NameNode
      will apply default ACLs from the parent directory to the create mode
      and ignore the client umask. If no default ACL found, it will apply the
      client umask.
    </description>
  </property>

  <property>
  <name>dfs.namenode.lazypersist.file.scrub.interval.sec</name>
  <value>300</value>
  <description>
    The NameNode periodically scans the namespace for LazyPersist files with
    missing blocks and unlinks them from the namespace. This configuration key
    controls the interval between successive scans. If this value is set to 0,
    the file scrubber is disabled.
  </description>
</property>
<property>
  <name>dfs.block.access.token.enable</name>
  <value>false</value>
  <description>
    If "true", access tokens are used as capabilities for accessing datanodes.
    If "false", no access tokens are checked on accessing datanodes.
  </description>
</property>

<property>
  <name>dfs.block.access.key.update.interval</name>
  <value>600</value>
  <description>
    Interval in minutes at which namenode updates its access keys.
  </description>
</property>

<property>
  <name>dfs.block.access.token.lifetime</name>
  <value>600</value>
  <description>The lifetime of access tokens in minutes.</description>
</property>

<property>
  <name>dfs.block.access.token.protobuf.enable</name>
  <value>false</value>
  <description>
    If "true", block tokens are written using Protocol Buffers.
    If "false", block tokens are written using Legacy format.
  </description>
</property>

<property>
  <name>dfs.datanode.data.dir</name>
  <value>file://${hadoop.tmp.dir}/dfs/data</value>
  <description>Determines where on the local filesystem an DFS data node
  should store its blocks.  If this is a comma-delimited
  list of directories, then data will be stored in all named
  directories, typically on different devices. The directories should be tagged
  with corresponding storage types ([SSD]/[DISK]/[ARCHIVE]/[RAM_DISK]) for HDFS
  storage policies. The default storage type will be DISK if the directory does
  not have a storage type tagged explicitly. Directories that do not exist will
  be created if local filesystem permission allows.
  </description>
</property>

<property>
  <name>dfs.datanode.data.dir.perm</name>
  <value>700</value>
  <description>Permissions for the directories on on the local filesystem where
  the DFS data node store its blocks. The permissions can either be octal or
  symbolic.</description>
</property>

<property>
  <name>dfs.replication</name>
  <value>3</value>
  <description>Default block replication. 
  The actual number of replications can be specified when the file is created.
  The default is used if replication is not specified in create time.
  </description>
</property>

<property>
  <name>dfs.replication.max</name>
  <value>512</value>
  <description>Maximal block replication. 
  </description>
</property>

<property>
  <name>dfs.namenode.replication.min</name>
  <value>1</value>
  <description>Minimal block replication. 
  </description>
</property>

<property>
  <name>dfs.namenode.maintenance.replication.min</name>
  <value>1</value>
  <description>Minimal live block replication in existence of maintenance mode.
  </description>
</property>

<property>
  <name>dfs.namenode.safemode.replication.min</name>
  <value></value>
  <description>
      a separate minimum replication factor for calculating safe block count.
      This is an expert level setting.
      Setting this lower than the dfs.namenode.replication.min
      is not recommend and/or dangerous for production setups.
      When it's not set it takes value from dfs.namenode.replication.min
  </description>
</property>

<property>
  <name>dfs.blocksize</name>
  <value>134217728</value>
  <description>
      The default block size for new files, in bytes.
      You can use the following suffix (case insensitive):
      k(kilo), m(mega), g(giga), t(tera), p(peta), e(exa) to specify the size (such as 128k, 512m, 1g, etc.),
      Or provide complete size in bytes (such as 134217728 for 128 MB).
  </description>
</property>

<property>
  <name>dfs.client.block.write.retries</name>
  <value>3</value>
  <description>The number of retries for writing blocks to the data nodes, 
  before we signal failure to the application.
  </description>
</property>

<property>
  <name>dfs.client.block.write.replace-datanode-on-failure.enable</name>
  <value>true</value>
  <description>
    If there is a datanode/network failure in the write pipeline,
    DFSClient will try to remove the failed datanode from the pipeline
    and then continue writing with the remaining datanodes. As a result,
    the number of datanodes in the pipeline is decreased.  The feature is
    to add new datanodes to the pipeline.

    This is a site-wide property to enable/disable the feature.

    When the cluster size is extremely small, e.g. 3 nodes or less, cluster
    administrators may want to set the policy to NEVER in the default
    configuration file or disable this feature.  Otherwise, users may
    experience an unusually high rate of pipeline failures since it is
    impossible to find new datanodes for replacement.

    See also dfs.client.block.write.replace-datanode-on-failure.policy
  </description>
</property>

<property>
  <name>dfs.client.block.write.replace-datanode-on-failure.policy</name>
  <value>DEFAULT</value>
  <description>
    This property is used only if the value of
    dfs.client.block.write.replace-datanode-on-failure.enable is true.

    ALWAYS: always add a new datanode when an existing datanode is removed.
    
    NEVER: never add a new datanode.

    DEFAULT: 
      Let r be the replication number.
      Let n be the number of existing datanodes.
      Add a new datanode only if r is greater than or equal to 3 and either
      (1) floor(r/2) is greater than or equal to n; or
      (2) r is greater than n and the block is hflushed/appended.
  </description>
</property>

<property>
  <name>dfs.client.block.write.replace-datanode-on-failure.best-effort</name>
  <value>false</value>
  <description>
    This property is used only if the value of
    dfs.client.block.write.replace-datanode-on-failure.enable is true.

    Best effort means that the client will try to replace a failed datanode
    in write pipeline (provided that the policy is satisfied), however, it 
    continues the write operation in case that the datanode replacement also
    fails.

    Suppose the datanode replacement fails.
    false: An exception should be thrown so that the write will fail.
    true : The write should be resumed with the remaining datandoes.
  
    Note that setting this property to true allows writing to a pipeline
    with a smaller number of datanodes.  As a result, it increases the
    probability of data loss.
  </description>
</property>

  <property>
    <name>dfs.client.block.write.replace-datanode-on-failure.min-replication</name>
    <value>0</value>
    <description>
      The minimum number of replications that are needed to not to fail
      the write pipeline if new datanodes can not be found to replace
      failed datanodes (could be due to network failure) in the write pipeline.
      If the number of the remaining datanodes in the write pipeline is greater
      than or equal to this property value, continue writing to the remaining nodes.
      Otherwise throw exception.

      If this is set to 0, an exception will be thrown, when a replacement
      can not be found.
      See also dfs.client.block.write.replace-datanode-on-failure.policy
    </description>
  </property>

<property>
  <name>dfs.blockreport.intervalMsec</name>
  <value>21600000</value>
  <description>Determines block reporting interval in milliseconds.</description>
</property>

<property>
  <name>dfs.blockreport.initialDelay</name>
  <value>0s</value>
  <description>
    Delay for first block report in seconds. Support multiple time unit
    suffix(case insensitive), as described in dfs.heartbeat.interval.
  </description>
</property>

<property>
    <name>dfs.blockreport.split.threshold</name>
    <value>1000000</value>
    <description>If the number of blocks on the DataNode is below this
    threshold then it will send block reports for all Storage Directories
    in a single message.

    If the number of blocks exceeds this threshold then the DataNode will
    send block reports for each Storage Directory in separate messages.

    Set to zero to always split.
    </description>
</property>

<property>
  <name>dfs.namenode.max.full.block.report.leases</name>
  <value>6</value>
  <description>The maximum number of leases for full block reports that the
    NameNode will issue at any given time.  This prevents the NameNode from
    being flooded with full block reports that use up all the RPC handler
    threads.  This number should never be more than the number of RPC handler
    threads or less than 1.
  </description>
</property>

<property>
  <name>dfs.namenode.full.block.report.lease.length.ms</name>
  <value>300000</value>
  <description>
    The number of milliseconds that the NameNode will wait before invalidating
    a full block report lease.  This prevents a crashed DataNode from
    permanently using up a full block report lease.
  </description>
</property>

<property>
  <name>dfs.datanode.directoryscan.interval</name>
  <value>21600s</value>
  <description>Interval in seconds for Datanode to scan data directories and
  reconcile the difference between blocks in memory and on the disk.
  Support multiple time unit suffix(case insensitive), as described
  in dfs.heartbeat.interval.
  </description>
</property>

<property>
  <name>dfs.datanode.directoryscan.threads</name>
  <value>1</value>
  <description>How many threads should the threadpool used to compile reports
  for volumes in parallel have.
  </description>
</property>

<property>
  <name>dfs.datanode.directoryscan.throttle.limit.ms.per.sec</name>
  <value>1000</value>
  <description>The report compilation threads are limited to only running for
  a given number of milliseconds per second, as configured by the
  property. The limit is taken per thread, not in aggregate, e.g. setting
  a limit of 100ms for 4 compiler threads will result in each thread being
  limited to 100ms, not 25ms.

  Note that the throttle does not interrupt the report compiler threads, so the
  actual running time of the threads per second will typically be somewhat
  higher than the throttle limit, usually by no more than 20%.

  Setting this limit to 1000 disables compiler thread throttling. Only
  values between 1 and 1000 are valid. Setting an invalid value will result
  in the throttle being disabled and an error message being logged. 1000 is
  the default setting.
  </description>
</property>

<property>
  <name>dfs.heartbeat.interval</name>
  <value>3s</value>
  <description>
    Determines datanode heartbeat interval in seconds.
    Can use the following suffix (case insensitive):
    ms(millis), s(sec), m(min), h(hour), d(day)
    to specify the time (such as 2s, 2m, 1h, etc.).
    Or provide complete number in seconds (such as 30 for 30 seconds).
  </description>
</property>

<property>
  <name>dfs.datanode.lifeline.interval.seconds</name>
  <value></value>
  <description>
    Sets the interval in seconds between sending DataNode Lifeline Protocol
    messages from the DataNode to the NameNode.  The value must be greater than
    the value of dfs.heartbeat.interval.  If this property is not defined, then
    the default behavior is to calculate the interval as 3x the value of
    dfs.heartbeat.interval.  Note that normal heartbeat processing may cause the
    DataNode to postpone sending lifeline messages if they are not required.
    Under normal operations with speedy heartbeat processing, it is possible
    that no lifeline messages will need to be sent at all.  This property has no
    effect if dfs.namenode.lifeline.rpc-address is not defined.
  </description>
</property>

<property>
  <name>dfs.namenode.handler.count</name>
  <value>10</value>
  <description>The number of Namenode RPC server threads that listen to
  requests from clients.
  If dfs.namenode.servicerpc-address is not configured then
  Namenode RPC server threads listen to requests from all nodes.
  </description>
</property>

<property>
  <name>dfs.namenode.service.handler.count</name>
  <value>10</value>
  <description>The number of Namenode RPC server threads that listen to
  requests from DataNodes and from all other non-client nodes.
  dfs.namenode.service.handler.count will be valid only if
  dfs.namenode.servicerpc-address is configured.
  </description>
</property>

<property>
  <name>dfs.namenode.lifeline.handler.ratio</name>
  <value>0.10</value>
  <description>
    A ratio applied to the value of dfs.namenode.handler.count, which then
    provides the number of RPC server threads the NameNode runs for handling the
    lifeline RPC server.  For example, if dfs.namenode.handler.count is 100, and
    dfs.namenode.lifeline.handler.factor is 0.10, then the NameNode starts
    100 * 0.10 = 10 threads for handling the lifeline RPC server.  It is common
    to tune the value of dfs.namenode.handler.count as a function of the number
    of DataNodes in a cluster.  Using this property allows for the lifeline RPC
    server handler threads to be tuned automatically without needing to touch a
    separate property.  Lifeline message processing is lightweight, so it is
    expected to require many fewer threads than the main NameNode RPC server.
    This property is not used if dfs.namenode.lifeline.handler.count is defined,
    which sets an absolute thread count.  This property has no effect if
    dfs.namenode.lifeline.rpc-address is not defined.
  </description>
</property>

<property>
  <name>dfs.namenode.lifeline.handler.count</name>
  <value></value>
  <description>
    Sets an absolute number of RPC server threads the NameNode runs for handling
    the DataNode Lifeline Protocol and HA health check requests from ZKFC.  If
    this property is defined, then it overrides the behavior of
    dfs.namenode.lifeline.handler.ratio.  By default, it is not defined.  This
    property has no effect if dfs.namenode.lifeline.rpc-address is not defined.
  </description>
</property>

<property>
  <name>dfs.namenode.safemode.threshold-pct</name>
  <value>0.999f</value>
  <description>
    Specifies the percentage of blocks that should satisfy 
    the minimal replication requirement defined by dfs.namenode.replication.min.
    Values less than or equal to 0 mean not to wait for any particular
    percentage of blocks before exiting safemode.
    Values greater than 1 will make safe mode permanent.
  </description>
</property>

<property>
  <name>dfs.namenode.safemode.min.datanodes</name>
  <value>0</value>
  <description>
    Specifies the number of datanodes that must be considered alive
    before the name node exits safemode.
    Values less than or equal to 0 mean not to take the number of live
    datanodes into account when deciding whether to remain in safe mode
    during startup.
    Values greater than the number of datanodes in the cluster
    will make safe mode permanent.
  </description>
</property>

<property>
  <name>dfs.namenode.safemode.extension</name>
  <value>30000</value>
  <description>
    Determines extension of safe mode in milliseconds after the threshold level
    is reached.  Support multiple time unit suffix (case insensitive), as
    described in dfs.heartbeat.interval.
  </description>
</property>

<property>
  <name>dfs.namenode.resource.check.interval</name>
  <value>5000</value>
  <description>
    The interval in milliseconds at which the NameNode resource checker runs.
    The checker calculates the number of the NameNode storage volumes whose
    available spaces are more than dfs.namenode.resource.du.reserved, and
    enters safemode if the number becomes lower than the minimum value
    specified by dfs.namenode.resource.checked.volumes.minimum.
  </description>
</property>

<property>
  <name>dfs.namenode.resource.du.reserved</name>
  <value>104857600</value>
  <description>
    The amount of space to reserve/require for a NameNode storage directory
    in bytes. The default is 100MB.
  </description>
</property>

<property>
  <name>dfs.namenode.resource.checked.volumes</name>
  <value></value>
  <description>
    A list of local directories for the NameNode resource checker to check in
    addition to the local edits directories.
  </description>
</property>

<property>
  <name>dfs.namenode.resource.checked.volumes.minimum</name>
  <value>1</value>
  <description>
    The minimum number of redundant NameNode storage volumes required.
  </description>
</property>

<property>
  <name>dfs.datanode.balance.bandwidthPerSec</name>
  <value>10m</value>
  <description>
        Specifies the maximum amount of bandwidth that each datanode
        can utilize for the balancing purpose in term of
        the number of bytes per second. You can use the following
        suffix (case insensitive):
        k(kilo), m(mega), g(giga), t(tera), p(peta), e(exa)to specify the size
        (such as 128k, 512m, 1g, etc.).
        Or provide complete size in bytes (such as 134217728 for 128 MB).
  </description>
</property>

<property>
  <name>dfs.hosts</name>
  <value></value>
  <description>Names a file that contains a list of hosts that are
  permitted to connect to the namenode. The full pathname of the file
  must be specified.  If the value is empty, all hosts are
  permitted.</description>
</property>

<property>
  <name>dfs.hosts.exclude</name>
  <value></value>
  <description>Names a file that contains a list of hosts that are
  not permitted to connect to the namenode.  The full pathname of the
  file must be specified.  If the value is empty, no hosts are
  excluded.</description>
</property> 

<property>
  <name>dfs.namenode.max.objects</name>
  <value>0</value>
  <description>The maximum number of files, directories and blocks
  dfs supports. A value of zero indicates no limit to the number
  of objects that dfs supports.
  </description>
</property>

<property>
  <name>dfs.namenode.datanode.registration.ip-hostname-check</name>
  <value>true</value>
  <description>
    If true (the default), then the namenode requires that a connecting
    datanode's address must be resolved to a hostname.  If necessary, a reverse
    DNS lookup is performed.  All attempts to register a datanode from an
    unresolvable address are rejected.

    It is recommended that this setting be left on to prevent accidental
    registration of datanodes listed by hostname in the excludes file during a
    DNS outage.  Only set this to false in environments where there is no
    infrastructure to support reverse DNS lookup.
  </description>
</property>

<property>
  <name>dfs.namenode.decommission.interval</name>
  <value>30s</value>
  <description>Namenode periodicity in seconds to check if
    decommission or maintenance is complete. Support multiple time unit
    suffix(case insensitive), as described in dfs.heartbeat.interval.
  </description>
</property>

<property>
  <name>dfs.namenode.decommission.blocks.per.interval</name>
  <value>500000</value>
  <description>The approximate number of blocks to process per decommission
    or maintenance interval, as defined in dfs.namenode.decommission.interval.
  </description>
</property>

<property>
  <name>dfs.namenode.decommission.max.concurrent.tracked.nodes</name>
  <value>100</value>
  <description>
    The maximum number of decommission-in-progress or
    entering-maintenance datanodes nodes that will be tracked at one time by
    the namenode. Tracking these datanode consumes additional NN memory
    proportional to the number of blocks on the datnode. Having a conservative
    limit reduces the potential impact of decommissioning or maintenance of
    a large number of nodes at once.
      
    A value of 0 means no limit will be enforced.
  </description>
</property>

<property>
  <name>dfs.namenode.redundancy.interval.seconds</name>
  <value>3s</value>
  <description>The periodicity in seconds with which the namenode computes 
  low redundancy work for datanodes. Support multiple time unit suffix(case insensitive),
  as described in dfs.heartbeat.interval.
  </description>
</property>

<property>
  <name>dfs.namenode.accesstime.precision</name>
  <value>3600000</value>
  <description>The access time for HDFS file is precise upto this value. 
               The default value is 1 hour. Setting a value of 0 disables
               access times for HDFS.
  </description>
</property>

<property>
  <name>dfs.datanode.plugins</name>
  <value></value>
  <description>Comma-separated list of datanode plug-ins to be activated.
  </description>
</property>

<property>
  <name>dfs.namenode.plugins</name>
  <value></value>
  <description>Comma-separated list of namenode plug-ins to be activated.
  </description>
</property>

<property>
  <name>dfs.namenode.block-placement-policy.default.prefer-local-node</name>
  <value>true</value>
  <description>Controls how the default block placement policy places
  the first replica of a block. When true, it will prefer the node where
  the client is running.  When false, it will prefer a node in the same rack
  as the client. Setting to false avoids situations where entire copies of
  large files end up on a single node, thus creating hotspots.
  </description>
</property>


<property>
  <name>dfs.stream-buffer-size</name>
  <value>4096</value>
  <description>The size of buffer to stream files.
  The size of this buffer should probably be a multiple of hardware
  page size (4096 on Intel x86), and it determines how much data is
  buffered during read and write operations.</description>
</property>

<property>
  <name>dfs.bytes-per-checksum</name>
  <value>512</value>
  <description>The number of bytes per checksum.  Must not be larger than
  dfs.stream-buffer-size</description>
</property>

<property>
  <name>dfs.client-write-packet-size</name>
  <value>65536</value>
  <description>Packet size for clients to write</description>
</property>

<property>
  <name>dfs.client.write.exclude.nodes.cache.expiry.interval.millis</name>
  <value>600000</value>
  <description>The maximum period to keep a DN in the excluded nodes list
  at a client. After this period, in milliseconds, the previously excluded node(s) will
  be removed automatically from the cache and will be considered good for block allocations
  again. Useful to lower or raise in situations where you keep a file open for very long
  periods (such as a Write-Ahead-Log (WAL) file) to make the writer tolerant to cluster maintenance
  restarts. Defaults to 10 minutes.</description>
</property>

<property>
  <name>dfs.namenode.checkpoint.dir</name>
  <value>file://${hadoop.tmp.dir}/dfs/namesecondary</value>
  <description>Determines where on the local filesystem the DFS secondary
      name node should store the temporary images to merge.
      If this is a comma-delimited list of directories then the image is
      replicated in all of the directories for redundancy.
  </description>
</property>

<property>
  <name>dfs.namenode.checkpoint.edits.dir</name>
  <value>${dfs.namenode.checkpoint.dir}</value>
  <description>Determines where on the local filesystem the DFS secondary
      name node should store the temporary edits to merge.
      If this is a comma-delimited list of directories then the edits is
      replicated in all of the directories for redundancy.
      Default value is same as dfs.namenode.checkpoint.dir
  </description>
</property>

<property>
  <name>dfs.namenode.checkpoint.period</name>
  <value>3600s</value>
  <description>
    The number of seconds between two periodic checkpoints.
    Support multiple time unit suffix(case insensitive), as described
    in dfs.heartbeat.interval.
  </description>
</property>

<property>
  <name>dfs.namenode.checkpoint.txns</name>
  <value>1000000</value>
  <description>The Secondary NameNode or CheckpointNode will create a checkpoint
  of the namespace every 'dfs.namenode.checkpoint.txns' transactions, regardless
  of whether 'dfs.namenode.checkpoint.period' has expired.
  </description>
</property>

<property>
  <name>dfs.namenode.checkpoint.check.period</name>
  <value>60s</value>
  <description>The SecondaryNameNode and CheckpointNode will poll the NameNode
  every 'dfs.namenode.checkpoint.check.period' seconds to query the number
  of uncheckpointed transactions. Support multiple time unit suffix(case insensitive),
  as described in dfs.heartbeat.interval.
  </description>
</property>

<property>
  <name>dfs.namenode.checkpoint.max-retries</name>
  <value>3</value>
  <description>The SecondaryNameNode retries failed checkpointing. If the 
  failure occurs while loading fsimage or replaying edits, the number of
  retries is limited by this variable. 
  </description>
</property>

<property>
  <name>dfs.namenode.checkpoint.check.quiet-multiplier</name>
  <value>1.5</value>
  <description>
    Used to calculate the amount of time between retries when in the 'quiet' period
    for creating checkpoints (active namenode already has an up-to-date image from another
    checkpointer), so we wait a multiplier of the dfs.namenode.checkpoint.check.period before
    retrying the checkpoint because another node likely is already managing the checkpoints,
    allowing us to save bandwidth to transfer checkpoints that don't need to be used.
  </description>
</property>

<property>
  <name>dfs.namenode.num.checkpoints.retained</name>
  <value>2</value>
  <description>The number of image checkpoint files (fsimage_*) that will be retained by
  the NameNode and Secondary NameNode in their storage directories. All edit
  logs (stored on edits_* files) necessary to recover an up-to-date namespace from the oldest retained
  checkpoint will also be retained.
  </description>
</property>

<property>
  <name>dfs.namenode.num.extra.edits.retained</name>
  <value>1000000</value>
  <description>The number of extra transactions which should be retained
  beyond what is minimally necessary for a NN restart.
  It does not translate directly to file's age, or the number of files kept,
  but to the number of transactions (here "edits" means transactions).
  One edit file may contain several transactions (edits).
  During checkpoint, NameNode will identify the total number of edits to retain as extra by
  checking the latest checkpoint transaction value, subtracted by the value of this property.
  Then, it scans edits files to identify the older ones that don't include the computed range of
  retained transactions that are to be kept around, and purges them subsequently.
  The retainment can be useful for audit purposes or for an HA setup where a remote Standby Node may have
  been offline for some time and need to have a longer backlog of retained
  edits in order to start again.
  Typically each edit is on the order of a few hundred bytes, so the default
  of 1 million edits should be on the order of hundreds of MBs or low GBs.

  NOTE: Fewer extra edits may be retained than value specified for this setting
  if doing so would mean that more segments would be retained than the number
  configured by dfs.namenode.max.extra.edits.segments.retained.
  </description>
</property>

<property>
  <name>dfs.namenode.max.extra.edits.segments.retained</name>
  <value>10000</value>
  <description>The maximum number of extra edit log segments which should be retained
  beyond what is minimally necessary for a NN restart. When used in conjunction with
  dfs.namenode.num.extra.edits.retained, this configuration property serves to cap
  the number of extra edits files to a reasonable value.
  </description>
</property>

<property>
  <name>dfs.namenode.delegation.key.update-interval</name>
  <value>86400000</value>
  <description>The update interval for master key for delegation tokens 
       in the namenode in milliseconds.
  </description>
</property>

<property>
  <name>dfs.namenode.delegation.token.max-lifetime</name>
  <value>604800000</value>
  <description>The maximum lifetime in milliseconds for which a delegation 
      token is valid.
  </description>
</property>

<property>
  <name>dfs.namenode.delegation.token.renew-interval</name>
  <value>86400000</value>
  <description>The renewal interval for delegation token in milliseconds.
  </description>
</property>

<property>
  <name>dfs.datanode.failed.volumes.tolerated</name>
  <value>0</value>
  <description>The number of volumes that are allowed to
  fail before a datanode stops offering service. By default
  any volume failure will cause a datanode to shutdown.
  </description>
</property>

<property>
  <name>dfs.image.compress</name>
  <value>false</value>
  <description>Should the dfs image be compressed?
  </description>
</property>

<property>
  <name>dfs.image.compression.codec</name>
  <value>org.apache.hadoop.io.compress.DefaultCodec</value>
  <description>If the dfs image is compressed, how should they be compressed?
               This has to be a codec defined in io.compression.codecs.
  </description>
</property>

<property>
  <name>dfs.image.transfer.timeout</name>
  <value>60000</value>
  <description>
        Socket timeout for image transfer in milliseconds. This timeout and the related
        dfs.image.transfer.bandwidthPerSec parameter should be configured such
        that normal image transfer can complete successfully.
        This timeout prevents client hangs when the sender fails during
        image transfer. This is socket timeout during image transfer.
  </description>
</property>

<property>
  <name>dfs.image.transfer.bandwidthPerSec</name>
  <value>0</value>
  <description>
        Maximum bandwidth used for regular image transfers (instead of
        bootstrapping the standby namenode), in bytes per second.
        This can help keep normal namenode operations responsive during
        checkpointing. The maximum bandwidth and timeout in
        dfs.image.transfer.timeout should be set such that normal image
        transfers can complete successfully.
        A default value of 0 indicates that throttling is disabled.
        The maximum bandwidth used for bootstrapping standby namenode is
        configured with dfs.image.transfer-bootstrap-standby.bandwidthPerSec.
  </description>
</property>

  <property>
    <name>dfs.image.transfer-bootstrap-standby.bandwidthPerSec</name>
    <value>0</value>
    <description>
      Maximum bandwidth used for transferring image to bootstrap standby
      namenode, in bytes per second.
      A default value of 0 indicates that throttling is disabled. This default
      value should be used in most cases, to ensure timely HA operations.
      The maximum bandwidth used for regular image transfers is configured
      with dfs.image.transfer.bandwidthPerSec.
    </description>
  </property>

<property>
  <name>dfs.image.transfer.chunksize</name>
  <value>65536</value>
  <description>
        Chunksize in bytes to upload the checkpoint.
        Chunked streaming is used to avoid internal buffering of contents
        of image file of huge size.
  </description>
</property>

<property>
  <name>dfs.edit.log.transfer.timeout</name>
  <value>30000</value>
  <description>
    Socket timeout for edit log transfer in milliseconds. This timeout
    should be configured such that normal edit log transfer for journal
    node syncing can complete successfully.
  </description>
</property>

<property>
  <name>dfs.edit.log.transfer.bandwidthPerSec</name>
  <value>0</value>
  <description>
    Maximum bandwidth used for transferring edit log to between journal nodes
    for syncing, in bytes per second.
    A default value of 0 indicates that throttling is disabled.
  </description>
</property>

<property>
  <name>dfs.namenode.support.allow.format</name>
  <value>true</value>
  <description>Does HDFS namenode allow itself to be formatted?
               You may consider setting this to false for any production
               cluster, to avoid any possibility of formatting a running DFS.
  </description>
</property>

<property>
  <name>dfs.datanode.max.transfer.threads</name>
  <value>4096</value>
  <description>
        Specifies the maximum number of threads to use for transferring data
        in and out of the DN.
  </description>
</property>

<property>
  <name>dfs.datanode.scan.period.hours</name>
  <value>504</value>
  <description>
        If this is positive, the DataNode will not scan any
        individual block more than once in the specified scan period.
        If this is negative, the block scanner is disabled.
        If this is set to zero, then the default value of 504 hours
        or 3 weeks is used. Prior versions of HDFS incorrectly documented
        that setting this key to zero will disable the block scanner.
  </description>
</property>

<property>
  <name>dfs.block.scanner.volume.bytes.per.second</name>
  <value>1048576</value>
  <description>
        If this is 0, the DataNode's block scanner will be disabled.  If this
        is positive, this is the number of bytes per second that the DataNode's
        block scanner will try to scan from each volume.
  </description>
</property>

<property>
  <name>dfs.datanode.readahead.bytes</name>
  <value>4194304</value>
  <description>
        While reading block files, if the Hadoop native libraries are available,
        the datanode can use the posix_fadvise system call to explicitly
        page data into the operating system buffer cache ahead of the current
        reader's position. This can improve performance especially when
        disks are highly contended.

        This configuration specifies the number of bytes ahead of the current
        read position which the datanode will attempt to read ahead. This
        feature may be disabled by configuring this property to 0.

        If the native libraries are not available, this configuration has no
        effect.
  </description>
</property>

<property>
  <name>dfs.datanode.drop.cache.behind.reads</name>
  <value>false</value>
  <description>
        In some workloads, the data read from HDFS is known to be significantly
        large enough that it is unlikely to be useful to cache it in the
        operating system buffer cache. In this case, the DataNode may be
        configured to automatically purge all data from the buffer cache
        after it is delivered to the client. This behavior is automatically
        disabled for workloads which read only short sections of a block
        (e.g HBase random-IO workloads).

        This may improve performance for some workloads by freeing buffer
        cache space usage for more cacheable data.

        If the Hadoop native libraries are not available, this configuration
        has no effect.
  </description>
</property>

<property>
  <name>dfs.datanode.drop.cache.behind.writes</name>
  <value>false</value>
  <description>
        In some workloads, the data written to HDFS is known to be significantly
        large enough that it is unlikely to be useful to cache it in the
        operating system buffer cache. In this case, the DataNode may be
        configured to automatically purge all data from the buffer cache
        after it is written to disk.

        This may improve performance for some workloads by freeing buffer
        cache space usage for more cacheable data.

        If the Hadoop native libraries are not available, this configuration
        has no effect.
  </description>
</property>

<property>
  <name>dfs.datanode.sync.behind.writes</name>
  <value>false</value>
  <description>
        If this configuration is enabled, the datanode will instruct the
        operating system to enqueue all written data to the disk immediately
        after it is written. This differs from the usual OS policy which
        may wait for up to 30 seconds before triggering writeback.

        This may improve performance for some workloads by smoothing the
        IO profile for data written to disk.

        If the Hadoop native libraries are not available, this configuration
        has no effect.
  </description>
</property>

<property>
  <name>dfs.client.failover.max.attempts</name>
  <value>15</value>
  <description>
    Expert only. The number of client failover attempts that should be
    made before the failover is considered failed.
  </description>
</property>

<property>
  <name>dfs.client.failover.sleep.base.millis</name>
  <value>500</value>
  <description>
    Expert only. The time to wait, in milliseconds, between failover
    attempts increases exponentially as a function of the number of
    attempts made so far, with a random factor of +/- 50%. This option
    specifies the base value used in the failover calculation. The
    first failover will retry immediately. The 2nd failover attempt
    will delay at least dfs.client.failover.sleep.base.millis
    milliseconds. And so on.
  </description>
</property>

<property>
  <name>dfs.client.failover.sleep.max.millis</name>
  <value>15000</value>
  <description>
    Expert only. The time to wait, in milliseconds, between failover
    attempts increases exponentially as a function of the number of
    attempts made so far, with a random factor of +/- 50%. This option
    specifies the maximum value to wait between failovers. 
    Specifically, the time between two failover attempts will not
    exceed +/- 50% of dfs.client.failover.sleep.max.millis
    milliseconds.
  </description>
</property>

<property>
  <name>dfs.client.failover.connection.retries</name>
  <value>0</value>
  <description>
    Expert only. Indicates the number of retries a failover IPC client
    will make to establish a server connection.
  </description>
</property>

<property>
  <name>dfs.client.failover.connection.retries.on.timeouts</name>
  <value>0</value>
  <description>
    Expert only. The number of retry attempts a failover IPC client
    will make on socket timeout when establishing a server connection.
  </description>
</property>

<property>
  <name>dfs.client.datanode-restart.timeout</name>
  <value>30s</value>
  <description>
    Expert only. The time to wait, in seconds, from reception of an
    datanode shutdown notification for quick restart, until declaring
    the datanode dead and invoking the normal recovery mechanisms.
    The notification is sent by a datanode when it is being shutdown
    using the shutdownDatanode admin command with the upgrade option.
    Support multiple time unit suffix(case insensitive), as described
    in dfs.heartbeat.interval.
  </description>
</property>

<property>
  <name>dfs.nameservices</name>
  <value></value>
  <description>
    Comma-separated list of nameservices.
  </description>
</property>

<property>
  <name>dfs.nameservice.id</name>
  <value></value>
  <description>
    The ID of this nameservice. If the nameservice ID is not
    configured or more than one nameservice is configured for
    dfs.nameservices it is determined automatically by
    matching the local node's address with the configured address.
  </description>
</property>

<property>
  <name>dfs.internal.nameservices</name>
  <value></value>
  <description>
    Comma-separated list of nameservices that belong to this cluster.
    Datanode will report to all the nameservices in this list. By default
    this is set to the value of dfs.nameservices.
  </description>
</property>

<property>
  <name>dfs.ha.namenodes.EXAMPLENAMESERVICE</name>
  <value></value>
  <description>
    The prefix for a given nameservice, contains a comma-separated
    list of namenodes for a given nameservice (eg EXAMPLENAMESERVICE).

    Unique identifiers for each NameNode in the nameservice, delimited by
    commas. This will be used by DataNodes to determine all the NameNodes
    in the cluster. For example, if you used “mycluster” as the nameservice
    ID previously, and you wanted to use “nn1” and “nn2” as the individual
    IDs of the NameNodes, you would configure a property
    dfs.ha.namenodes.mycluster, and its value "nn1,nn2".
  </description>
</property>

<property>
  <name>dfs.ha.namenode.id</name>
  <value></value>
  <description>
    The ID of this namenode. If the namenode ID is not configured it
    is determined automatically by matching the local node's address
    with the configured address.
  </description>
</property>

<property>
  <name>dfs.ha.log-roll.period</name>
  <value>120s</value>
  <description>
    How often, in seconds, the StandbyNode should ask the active to
    roll edit logs. Since the StandbyNode only reads from finalized
    log segments, the StandbyNode will only be as up-to-date as how
    often the logs are rolled. Note that failover triggers a log roll
    so the StandbyNode will be up to date before it becomes active.
    Support multiple time unit suffix(case insensitive), as described
    in dfs.heartbeat.interval.
  </description>
</property>

<property>
  <name>dfs.ha.tail-edits.period</name>
  <value>60s</value>
  <description>
    How often, in seconds, the StandbyNode should check for new
    finalized log segments in the shared edits log.
    Support multiple time unit suffix(case insensitive), as described
    in dfs.heartbeat.interval.
  </description>
</property>

<property>
  <name>dfs.ha.tail-edits.namenode-retries</name>
  <value>3</value>
  <description>
    Number of retries to use when contacting the namenode when tailing the log.
  </description>
</property>

<property>
  <name>dfs.ha.tail-edits.rolledits.timeout</name>
  <value>60</value>
  <description>The timeout in seconds of calling rollEdits RPC on Active NN.
  </description>
</property>

<property>
  <name>dfs.ha.automatic-failover.enabled</name>
  <value>false</value>
  <description>
    Whether automatic failover is enabled. See the HDFS High
    Availability documentation for details on automatic HA
    configuration.
  </description>
</property>

<property>
  <name>dfs.client.use.datanode.hostname</name>
  <value>false</value>
  <description>Whether clients should use datanode hostnames when
    connecting to datanodes.
  </description>
</property>

<property>
  <name>dfs.datanode.use.datanode.hostname</name>
  <value>false</value>
  <description>Whether datanodes should use datanode hostnames when
    connecting to other datanodes for data transfer.
  </description>
</property>

<property>
  <name>dfs.client.local.interfaces</name>
  <value></value>
  <description>A comma separated list of network interface names to use
    for data transfer between the client and datanodes. When creating
    a connection to read from or write to a datanode, the client
    chooses one of the specified interfaces at random and binds its
    socket to the IP of that interface. Individual names may be
    specified as either an interface name (eg "eth0"), a subinterface
    name (eg "eth0:0"), or an IP address (which may be specified using
    CIDR notation to match a range of IPs).
  </description>
</property>

<property>
  <name>dfs.datanode.shared.file.descriptor.paths</name>
  <value>/dev/shm,/tmp</value>
  <description>
    A comma-separated list of paths to use when creating file descriptors that
    will be shared between the DataNode and the DFSClient.  Typically we use
    /dev/shm, so that the file descriptors will not be written to disk.
    Systems that don't have /dev/shm will fall back to /tmp by default.
  </description>
</property>

<property>
  <name>dfs.short.circuit.shared.memory.watcher.interrupt.check.ms</name>
  <value>60000</value>
  <description>
    The length of time in milliseconds that the short-circuit shared memory
    watcher will go between checking for java interruptions sent from other
    threads.  This is provided mainly for unit tests.
  </description>
</property>

<property>
  <name>dfs.namenode.kerberos.principal</name>
  <value></value>
  <description>
    The NameNode service principal. This is typically set to
    nn/_HOST@REALM.TLD. Each NameNode will substitute _HOST with its
    own fully qualified hostname at startup. The _HOST placeholder
    allows using the same configuration setting on both NameNodes
    in an HA setup.
  </description>
</property>

<property>
  <name>dfs.namenode.keytab.file</name>
  <value></value>
  <description>
    The keytab file used by each NameNode daemon to login as its
    service principal. The principal name is configured with
    dfs.namenode.kerberos.principal.
  </description>
</property>

<property>
  <name>dfs.datanode.kerberos.principal</name>
  <value></value>
  <description>
    The DataNode service principal. This is typically set to
    dn/_HOST@REALM.TLD. Each DataNode will substitute _HOST with its
    own fully qualified hostname at startup. The _HOST placeholder
    allows using the same configuration setting on all DataNodes.
  </description>
</property>

<property>
  <name>dfs.datanode.keytab.file</name>
  <value></value>
  <description>
    The keytab file used by each DataNode daemon to login as its
    service principal. The principal name is configured with
    dfs.datanode.kerberos.principal.
  </description>
</property>

<property>
  <name>dfs.journalnode.kerberos.principal</name>
  <value></value>
  <description>
    The JournalNode service principal. This is typically set to
    jn/_HOST@REALM.TLD. Each JournalNode will substitute _HOST with its
    own fully qualified hostname at startup. The _HOST placeholder
    allows using the same configuration setting on all JournalNodes.
  </description>
</property>

<property>
  <name>dfs.journalnode.keytab.file</name>
  <value></value>
  <description>
    The keytab file used by each JournalNode daemon to login as its
    service principal. The principal name is configured with
    dfs.journalnode.kerberos.principal.
  </description>
</property>

<property>
  <name>dfs.namenode.kerberos.internal.spnego.principal</name>
  <value>${dfs.web.authentication.kerberos.principal}</value>
  <description>
    The server principal used by the NameNode for web UI SPNEGO
    authentication when Kerberos security is enabled. This is
    typically set to HTTP/_HOST@REALM.TLD The SPNEGO server principal
    begins with the prefix HTTP/ by convention.

    If the value is '*', the web server will attempt to login with
    every principal specified in the keytab file
    dfs.web.authentication.kerberos.keytab.
</description>
</property>

<property>
  <name>dfs.journalnode.kerberos.internal.spnego.principal</name>
  <value></value>
  <description>
    The server principal used by the JournalNode HTTP Server for
    SPNEGO authentication when Kerberos security is enabled. This is
    typically set to HTTP/_HOST@REALM.TLD. The SPNEGO server principal
    begins with the prefix HTTP/ by convention.

    If the value is '*', the web server will attempt to login with
    every principal specified in the keytab file
    dfs.web.authentication.kerberos.keytab.

    For most deployments this can be set to ${dfs.web.authentication.kerberos.principal}
    i.e use the value of dfs.web.authentication.kerberos.principal.
  </description>
</property>

<property>
  <name>dfs.secondary.namenode.kerberos.internal.spnego.principal</name>
  <value>${dfs.web.authentication.kerberos.principal}</value>
  <description>
    The server principal used by the Secondary NameNode for web UI SPNEGO
    authentication when Kerberos security is enabled. Like all other
    Secondary NameNode settings, it is ignored in an HA setup.

    If the value is '*', the web server will attempt to login with
    every principal specified in the keytab file
    dfs.web.authentication.kerberos.keytab.
  </description>
</property>

<property>
  <name>dfs.web.authentication.kerberos.principal</name>
  <value></value>
  <description>
    The server principal used by the NameNode for WebHDFS SPNEGO
    authentication.

    Required when WebHDFS and security are enabled. In most secure clusters this
    setting is also used to specify the values for
    dfs.namenode.kerberos.internal.spnego.principal and
    dfs.journalnode.kerberos.internal.spnego.principal.
  </description>
</property>

<property>
  <name>dfs.web.authentication.kerberos.keytab</name>
  <value></value>
  <description>
    The keytab file for the principal corresponding to
    dfs.web.authentication.kerberos.principal.
  </description>
</property>

<property>
  <name>dfs.namenode.kerberos.principal.pattern</name>
  <value>*</value>
  <description>
    A client-side RegEx that can be configured to control
    allowed realms to authenticate with (useful in cross-realm env.)
  </description>
</property>

<property>
  <name>dfs.namenode.avoid.read.stale.datanode</name>
  <value>false</value>
  <description>
    Indicate whether or not to avoid reading from &quot;stale&quot; datanodes whose
    heartbeat messages have not been received by the namenode 
    for more than a specified time interval. Stale datanodes will be
    moved to the end of the node list returned for reading. See
    dfs.namenode.avoid.write.stale.datanode for a similar setting for writes.
  </description>
</property>

<property>
  <name>dfs.namenode.avoid.write.stale.datanode</name>
  <value>false</value>
  <description>
    Indicate whether or not to avoid writing to &quot;stale&quot; datanodes whose 
    heartbeat messages have not been received by the namenode 
    for more than a specified time interval. Writes will avoid using 
    stale datanodes unless more than a configured ratio 
    (dfs.namenode.write.stale.datanode.ratio) of datanodes are marked as 
    stale. See dfs.namenode.avoid.read.stale.datanode for a similar setting
    for reads.
  </description>
</property>

<property>
  <name>dfs.namenode.stale.datanode.interval</name>
  <value>30000</value>
  <description>
    Default time interval in milliseconds for marking a datanode as "stale",
    i.e., if the namenode has not received heartbeat msg from a datanode for
    more than this time interval, the datanode will be marked and treated 
    as "stale" by default. The stale interval cannot be too small since 
    otherwise this may cause too frequent change of stale states. 
    We thus set a minimum stale interval value (the default value is 3 times 
    of heartbeat interval) and guarantee that the stale interval cannot be less
    than the minimum value. A stale data node is avoided during lease/block
    recovery. It can be conditionally avoided for reads (see
    dfs.namenode.avoid.read.stale.datanode) and for writes (see
    dfs.namenode.avoid.write.stale.datanode).
  </description>
</property>

<property>
  <name>dfs.namenode.write.stale.datanode.ratio</name>
  <value>0.5f</value>
  <description>
    When the ratio of number stale datanodes to total datanodes marked
    is greater than this ratio, stop avoiding writing to stale nodes so
    as to prevent causing hotspots.
  </description>
</property>

<property>
  <name>dfs.namenode.invalidate.work.pct.per.iteration</name>
  <value>0.32f</value>
  <description>
    *Note*: Advanced property. Change with caution.
    This determines the percentage amount of block
    invalidations (deletes) to do over a single DN heartbeat
    deletion command. The final deletion count is determined by applying this
    percentage to the number of live nodes in the system.
    The resultant number is the number of blocks from the deletion list
    chosen for proper invalidation over a single heartbeat of a single DN.
    Value should be a positive, non-zero percentage in float notation (X.Yf),
    with 1.0f meaning 100%.
  </description>
</property>

<property>
  <name>dfs.namenode.replication.work.multiplier.per.iteration</name>
  <value>2</value>
  <description>
    *Note*: Advanced property. Change with caution.
    This determines the total amount of block transfers to begin in
    parallel at a DN, for replication, when such a command list is being
    sent over a DN heartbeat by the NN. The actual number is obtained by
    multiplying this multiplier with the total number of live nodes in the
    cluster. The result number is the number of blocks to begin transfers
    immediately for, per DN heartbeat. This number can be any positive,
    non-zero integer.
  </description>
</property>

<property>
  <name>nfs.server.port</name>
  <value>2049</value>
  <description>
      Specify the port number used by Hadoop NFS.
  </description>
</property>

<property>
  <name>nfs.mountd.port</name>
  <value>4242</value>
  <description>
      Specify the port number used by Hadoop mount daemon.
  </description>
</property>

<property>    
  <name>nfs.dump.dir</name>
  <value>/tmp/.hdfs-nfs</value>
  <description>
    This directory is used to temporarily save out-of-order writes before
    writing to HDFS. For each file, the out-of-order writes are dumped after
    they are accumulated to exceed certain threshold (e.g., 1MB) in memory. 
    One needs to make sure the directory has enough space.
  </description>
</property>

<property>
  <name>nfs.rtmax</name>
  <value>1048576</value>
  <description>This is the maximum size in bytes of a READ request
    supported by the NFS gateway. If you change this, make sure you
    also update the nfs mount's rsize(add rsize= # of bytes to the 
    mount directive).
  </description>
</property>

<property>
  <name>nfs.wtmax</name>
  <value>1048576</value>
  <description>This is the maximum size in bytes of a WRITE request
    supported by the NFS gateway. If you change this, make sure you
    also update the nfs mount's wsize(add wsize= # of bytes to the 
    mount directive).
  </description>
</property>

<property>
  <name>nfs.keytab.file</name>
  <value></value>
  <description>
    *Note*: Advanced property. Change with caution.
    This is the path to the keytab file for the hdfs-nfs gateway.
    This is required when the cluster is kerberized.
  </description>
</property>

<property>
  <name>nfs.kerberos.principal</name>
  <value></value>
  <description>
    *Note*: Advanced property. Change with caution.
    This is the name of the kerberos principal. This is required when
    the cluster is kerberized.It must be of this format:
    nfs-gateway-user/nfs-gateway-host@kerberos-realm
  </description>
</property>

<property>
  <name>nfs.allow.insecure.ports</name>
  <value>true</value>
  <description>
    When set to false, client connections originating from unprivileged ports
    (those above 1023) will be rejected. This is to ensure that clients
    connecting to this NFS Gateway must have had root privilege on the machine
    where they're connecting from.
  </description>
</property>

<property>
  <name>hadoop.fuse.connection.timeout</name>
  <value>300</value>
  <description>
    The minimum number of seconds that we'll cache libhdfs connection objects
    in fuse_dfs. Lower values will result in lower memory consumption; higher
    values may speed up access by avoiding the overhead of creating new
    connection objects.
  </description>
</property>

<property>
  <name>hadoop.fuse.timer.period</name>
  <value>5</value>
  <description>
    The number of seconds between cache expiry checks in fuse_dfs. Lower values
    will result in fuse_dfs noticing changes to Kerberos ticket caches more
    quickly.
  </description>
</property>

<property>
  <name>dfs.namenode.metrics.logger.period.seconds</name>
  <value>600</value>
  <description>
    This setting controls how frequently the NameNode logs its metrics. The
    logging configuration must also define one or more appenders for
    NameNodeMetricsLog for the metrics to be logged.
    NameNode metrics logging is disabled if this value is set to zero or
    less than zero.
  </description>
</property>

<property>
  <name>dfs.datanode.metrics.logger.period.seconds</name>
  <value>600</value>
  <description>
    This setting controls how frequently the DataNode logs its metrics. The
    logging configuration must also define one or more appenders for
    DataNodeMetricsLog for the metrics to be logged.
    DataNode metrics logging is disabled if this value is set to zero or
    less than zero.
  </description>
</property>

<property>
  <name>dfs.metrics.percentiles.intervals</name>
  <value></value>
  <description>
    Comma-delimited set of integers denoting the desired rollover intervals 
    (in seconds) for percentile latency metrics on the Namenode and Datanode.
    By default, percentile latency metrics are disabled.
  </description>
</property>

<property>
  <name>dfs.datanode.peer.stats.enabled</name>
  <value>false</value>
  <description>
    A switch to turn on/off tracking DataNode peer statistics.
  </description>
</property>

<property>
  <name>dfs.datanode.outliers.report.interval</name>
  <value>30m</value>
  <description>
    This setting controls how frequently DataNodes will report their peer
    latencies to the NameNode via heartbeats.  This setting supports
    multiple time unit suffixes as described in dfs.heartbeat.interval.
    If no suffix is specified then milliseconds is assumed.

    It is ignored if dfs.datanode.peer.stats.enabled is false.
  </description>
</property>

<property>
  <name>dfs.datanode.fileio.profiling.sampling.percentage</name>
  <value>0</value>
  <description>
    This setting controls the percentage of file I/O events which will be
    profiled for DataNode disk statistics. The default value of 0 disables
    disk statistics. Set to an integer value between 1 and 100 to enable disk
    statistics.
  </description>
</property>

<property>
  <name>hadoop.user.group.metrics.percentiles.intervals</name>
  <value></value>
  <description>
    A comma-separated list of the granularity in seconds for the metrics
    which describe the 50/75/90/95/99th percentile latency for group resolution
    in milliseconds.
    By default, percentile latency metrics are disabled.
  </description>
</property>

<property>
  <name>dfs.encrypt.data.transfer</name>
  <value>false</value>
  <description>
    Whether or not actual block data that is read/written from/to HDFS should
    be encrypted on the wire. This only needs to be set on the NN and DNs,
    clients will deduce this automatically. It is possible to override this setting 
    per connection by specifying custom logic via dfs.trustedchannel.resolver.class. 
  </description>
</property>

<property>
  <name>dfs.encrypt.data.transfer.algorithm</name>
  <value></value>
  <description>
    This value may be set to either "3des" or "rc4". If nothing is set, then
    the configured JCE default on the system is used (usually 3DES.) It is
    widely believed that 3DES is more cryptographically secure, but RC4 is
    substantially faster.
    
    Note that if AES is supported by both the client and server then this 
    encryption algorithm will only be used to initially transfer keys for AES.
    (See dfs.encrypt.data.transfer.cipher.suites.)
  </description>
</property>

<property>
  <name>dfs.encrypt.data.transfer.cipher.suites</name>
  <value></value>
  <description>
    This value may be either undefined or AES/CTR/NoPadding.  If defined, then
    dfs.encrypt.data.transfer uses the specified cipher suite for data
    encryption.  If not defined, then only the algorithm specified in
    dfs.encrypt.data.transfer.algorithm is used.  By default, the property is
    not defined.
  </description>
</property>

<property>
  <name>dfs.encrypt.data.transfer.cipher.key.bitlength</name>
  <value>128</value>
  <description>
    The key bitlength negotiated by dfsclient and datanode for encryption.
    This value may be set to either 128, 192 or 256.
  </description>
</property>

<property>
  <name>dfs.trustedchannel.resolver.class</name>
  <value></value>
  <description>
      TrustedChannelResolver is used to determine whether a channel 
      is trusted for plain data transfer. The TrustedChannelResolver is
      invoked on both client and server side. If the resolver indicates 
      that the channel is trusted, then the data transfer will not be 
      encrypted even if dfs.encrypt.data.transfer is set to true. The
      default implementation returns false indicating that the channel 
      is not trusted.
  </description>
</property>

<property>
  <name>dfs.data.transfer.protection</name>
  <value></value>
  <description>
    A comma-separated list of SASL protection values used for secured
    connections to the DataNode when reading or writing block data.  Possible
    values are authentication, integrity and privacy.  authentication means
    authentication only and no integrity or privacy; integrity implies
    authentication and integrity are enabled; and privacy implies all of
    authentication, integrity and privacy are enabled.  If
    dfs.encrypt.data.transfer is set to true, then it supersedes the setting for
    dfs.data.transfer.protection and enforces that all connections must use a
    specialized encrypted SASL handshake.  This property is ignored for
    connections to a DataNode listening on a privileged port.  In this case, it
    is assumed that the use of a privileged port establishes sufficient trust.
  </description>
</property>

<property>
  <name>dfs.data.transfer.saslproperties.resolver.class</name>
  <value></value>
  <description>
    SaslPropertiesResolver used to resolve the QOP used for a connection to the
    DataNode when reading or writing block data. If not specified, the value of
    hadoop.security.saslproperties.resolver.class is used as the default value.
  </description>
</property>

<property>
  <name>dfs.journalnode.rpc-address</name>
  <value>0.0.0.0:8485</value>
  <description>
    The JournalNode RPC server address and port.
  </description>
</property>

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

<property>
  <name>dfs.journalnode.http-address</name>
  <value>0.0.0.0:8480</value>
  <description>
    The address and port the JournalNode HTTP server listens on.
    If the port is 0 then the server will start on a free port.
  </description>
</property>

<property>
  <name>dfs.journalnode.http-bind-host</name>
  <value></value>
  <description>
    The actual address the HTTP server will bind to. If this optional address
    is set, it overrides only the hostname portion of
    dfs.journalnode.http-address. This is useful for making the JournalNode
    HTTP server listen on allinterfaces by setting it to 0.0.0.0.
  </description>
</property>

<property>
  <name>dfs.journalnode.https-address</name>
  <value>0.0.0.0:8481</value>
  <description>
    The address and port the JournalNode HTTPS server listens on.
    If the port is 0 then the server will start on a free port.
  </description>
</property>

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

<property>
  <name>dfs.namenode.audit.loggers</name>
  <value>default</value>
  <description>
    List of classes implementing audit loggers that will receive audit events.
    These should be implementations of org.apache.hadoop.hdfs.server.namenode.AuditLogger.
    The special value "default" can be used to reference the default audit
    logger, which uses the configured log system. Installing custom audit loggers
    may affect the performance and stability of the NameNode. Refer to the custom
    logger's documentation for more details.
  </description>
</property>

<property>
  <name>dfs.datanode.available-space-volume-choosing-policy.balanced-space-threshold</name>
  <value>10737418240</value> <!-- 10 GB -->
  <description>
    Only used when the dfs.datanode.fsdataset.volume.choosing.policy is set to
    org.apache.hadoop.hdfs.server.datanode.fsdataset.AvailableSpaceVolumeChoosingPolicy.
    This setting controls how much DN volumes are allowed to differ in terms of
    bytes of free disk space before they are considered imbalanced. If the free
    space of all the volumes are within this range of each other, the volumes
    will be considered balanced and block assignments will be done on a pure
    round robin basis.
  </description>
</property>

<property>
  <name>dfs.datanode.available-space-volume-choosing-policy.balanced-space-preference-fraction</name>
  <value>0.75f</value>
  <description>
    Only used when the dfs.datanode.fsdataset.volume.choosing.policy is set to
    org.apache.hadoop.hdfs.server.datanode.fsdataset.AvailableSpaceVolumeChoosingPolicy.
    This setting controls what percentage of new block allocations will be sent
    to volumes with more available disk space than others. This setting should
    be in the range 0.0 - 1.0, though in practice 0.5 - 1.0, since there should
    be no reason to prefer that volumes with less available disk space receive
    more block allocations.
  </description>
</property>

<property>
  <name>dfs.namenode.edits.noeditlogchannelflush</name>
  <value>false</value>
  <description>
    Specifies whether to flush edit log file channel. When set, expensive
    FileChannel#force calls are skipped and synchronous disk writes are
    enabled instead by opening the edit log file with RandomAccessFile("rws")
    flags. This can significantly improve the performance of edit log writes
    on the Windows platform.
    Note that the behavior of the "rws" flags is platform and hardware specific
    and might not provide the same level of guarantees as FileChannel#force.
    For example, the write will skip the disk-cache on SAS and SCSI devices
    while it might not on SATA devices. This is an expert level setting,
    change with caution.
  </description>
</property>

<property>
  <name>dfs.client.cache.drop.behind.writes</name>
  <value></value>
  <description>
    Just like dfs.datanode.drop.cache.behind.writes, this setting causes the
    page cache to be dropped behind HDFS writes, potentially freeing up more
    memory for other uses.  Unlike dfs.datanode.drop.cache.behind.writes, this
    is a client-side setting rather than a setting for the entire datanode.
    If present, this setting will override the DataNode default.

    If the native libraries are not available to the DataNode, this
    configuration has no effect.
  </description>
</property>

<property>
  <name>dfs.client.cache.drop.behind.reads</name>
  <value></value>
  <description>
    Just like dfs.datanode.drop.cache.behind.reads, this setting causes the
    page cache to be dropped behind HDFS reads, potentially freeing up more
    memory for other uses.  Unlike dfs.datanode.drop.cache.behind.reads, this
    is a client-side setting rather than a setting for the entire datanode.  If
    present, this setting will override the DataNode default.

    If the native libraries are not available to the DataNode, this
    configuration has no effect.
  </description>
</property>

<property>
  <name>dfs.client.cache.readahead</name>
  <value></value>
  <description>
    When using remote reads, this setting causes the datanode to
    read ahead in the block file using posix_fadvise, potentially decreasing
    I/O wait times.  Unlike dfs.datanode.readahead.bytes, this is a client-side
    setting rather than a setting for the entire datanode.  If present, this
    setting will override the DataNode default.

    When using local reads, this setting determines how much readahead we do in
    BlockReaderLocal.

    If the native libraries are not available to the DataNode, this
    configuration has no effect.
  </description>
</property>

<property>
  <name>dfs.client.server-defaults.validity.period.ms</name>
  <value>3600000</value>
  <description>
    The amount of milliseconds after which cached server defaults are updated.

    By default this parameter is set to 1 hour.
  </description>
</property>

<property>
  <name>dfs.namenode.enable.retrycache</name>
  <value>true</value>
  <description>
    This enables the retry cache on the namenode. Namenode tracks for
    non-idempotent requests the corresponding response. If a client retries the
    request, the response from the retry cache is sent. Such operations
    are tagged with annotation @AtMostOnce in namenode protocols. It is
    recommended that this flag be set to true. Setting it to false, will result
    in clients getting failure responses to retried request. This flag must 
    be enabled in HA setup for transparent fail-overs.

    The entries in the cache have expiration time configurable
    using dfs.namenode.retrycache.expirytime.millis.
  </description>
</property>

<property>
  <name>dfs.namenode.retrycache.expirytime.millis</name>
  <value>600000</value>
  <description>
    The time for which retry cache entries are retained.
  </description>
</property>

<property>
  <name>dfs.namenode.retrycache.heap.percent</name>
  <value>0.03f</value>
  <description>
    This parameter configures the heap size allocated for retry cache
    (excluding the response cached). This corresponds to approximately
    4096 entries for every 64MB of namenode process java heap size.
    Assuming retry cache entry expiration time (configured using
    dfs.namenode.retrycache.expirytime.millis) of 10 minutes, this
    enables retry cache to support 7 operations per second sustained
    for 10 minutes. As the heap size is increased, the operation rate
    linearly increases.
  </description>
</property>

<property>
  <name>dfs.client.mmap.enabled</name>
  <value>true</value>
  <description>
    If this is set to false, the client won't attempt to perform memory-mapped reads.
  </description>
</property>

<property>
  <name>dfs.client.mmap.cache.size</name>
  <value>256</value>
  <description>
    When zero-copy reads are used, the DFSClient keeps a cache of recently used
    memory mapped regions.  This parameter controls the maximum number of
    entries that we will keep in that cache.

    The larger this number is, the more file descriptors we will potentially
    use for memory-mapped files.  mmaped files also use virtual address space.
    You may need to increase your ulimit virtual address space limits before
    increasing the client mmap cache size.

    Note that you can still do zero-copy reads when this size is set to 0.
  </description>
</property>

<property>
  <name>dfs.client.mmap.cache.timeout.ms</name>
  <value>3600000</value>
  <description>
    The minimum length of time that we will keep an mmap entry in the cache
    between uses.  If an entry is in the cache longer than this, and nobody
    uses it, it will be removed by a background thread.
  </description>
</property>

<property>
  <name>dfs.client.mmap.retry.timeout.ms</name>
  <value>300000</value>
  <description>
    The minimum amount of time that we will wait before retrying a failed mmap
    operation.
  </description>
</property>

<property>
  <name>dfs.client.short.circuit.replica.stale.threshold.ms</name>
  <value>1800000</value>
  <description>
    The maximum amount of time that we will consider a short-circuit replica to
    be valid, if there is no communication from the DataNode.  After this time
    has elapsed, we will re-fetch the short-circuit replica even if it is in
    the cache.
  </description>
</property>

<property>
  <name>dfs.namenode.path.based.cache.block.map.allocation.percent</name>
  <value>0.25</value>
  <description>
    The percentage of the Java heap which we will allocate to the cached blocks
    map.  The cached blocks map is a hash map which uses chained hashing.
    Smaller maps may be accessed more slowly if the number of cached blocks is
    large; larger maps will consume more memory.
  </description>
</property>

<property>
  <name>dfs.datanode.max.locked.memory</name>
  <value>0</value>
  <description>
    The amount of memory in bytes to use for caching of block replicas in
    memory on the datanode. The datanode's maximum locked memory soft ulimit
    (RLIMIT_MEMLOCK) must be set to at least this value, else the datanode
    will abort on startup.

    By default, this parameter is set to 0, which disables in-memory caching.

    If the native libraries are not available to the DataNode, this
    configuration has no effect.
  </description>
</property>

<property>
  <name>dfs.namenode.list.cache.directives.num.responses</name>
  <value>100</value>
  <description>
    This value controls the number of cache directives that the NameNode will
    send over the wire in response to a listDirectives RPC.
  </description>
</property>

<property>
  <name>dfs.namenode.list.cache.pools.num.responses</name>
  <value>100</value>
  <description>
    This value controls the number of cache pools that the NameNode will
    send over the wire in response to a listPools RPC.
  </description>
</property>

<property>
  <name>dfs.namenode.path.based.cache.refresh.interval.ms</name>
  <value>30000</value>
  <description>
    The amount of milliseconds between subsequent path cache rescans.  Path
    cache rescans are when we calculate which blocks should be cached, and on
    what datanodes.

    By default, this parameter is set to 30 seconds.
  </description>
</property>

<property>
  <name>dfs.namenode.path.based.cache.retry.interval.ms</name>
  <value>30000</value>
  <description>
    When the NameNode needs to uncache something that is cached, or cache
    something that is not cached, it must direct the DataNodes to do so by
    sending a DNA_CACHE or DNA_UNCACHE command in response to a DataNode
    heartbeat.  This parameter controls how frequently the NameNode will
    resend these commands.
  </description>
</property>

<property>
  <name>dfs.datanode.fsdatasetcache.max.threads.per.volume</name>
  <value>4</value>
  <description>
    The maximum number of threads per volume to use for caching new data
    on the datanode. These threads consume both I/O and CPU. This can affect
    normal datanode operations.
  </description>
</property>

<property>
  <name>dfs.cachereport.intervalMsec</name>
  <value>10000</value>
  <description>
    Determines cache reporting interval in milliseconds.  After this amount of
    time, the DataNode sends a full report of its cache state to the NameNode.
    The NameNode uses the cache report to update its map of cached blocks to
    DataNode locations.

    This configuration has no effect if in-memory caching has been disabled by
    setting dfs.datanode.max.locked.memory to 0 (which is the default).

    If the native libraries are not available to the DataNode, this
    configuration has no effect.
  </description>
</property>

<property>
  <name>dfs.namenode.edit.log.autoroll.multiplier.threshold</name>
  <value>2.0</value>
  <description>
    Determines when an active namenode will roll its own edit log.
    The actual threshold (in number of edits) is determined by multiplying
    this value by dfs.namenode.checkpoint.txns.

    This prevents extremely large edit files from accumulating on the active
    namenode, which can cause timeouts during namenode startup and pose an
    administrative hassle. This behavior is intended as a failsafe for when
    the standby or secondary namenode fail to roll the edit log by the normal
    checkpoint threshold.
  </description>
</property>

<property>
  <name>dfs.namenode.edit.log.autoroll.check.interval.ms</name>
  <value>300000</value>
  <description>
    How often an active namenode will check if it needs to roll its edit log,
    in milliseconds.
  </description>
</property>

<property>
  <name>dfs.webhdfs.user.provider.user.pattern</name>
  <value>^[A-Za-z_][A-Za-z0-9._-]*[$]?$</value>
  <description>
    Valid pattern for user and group names for webhdfs, it must be a valid java regex.
  </description>
</property>

<property>
  <name>dfs.webhdfs.acl.provider.permission.pattern</name>
  <value>^(default:)?(user|group|mask|other):[[A-Za-z_][A-Za-z0-9._-]]*:([rwx-]{3})?(,(default:)?(user|group|mask|other):[[A-Za-z_][A-Za-z0-9._-]]*:([rwx-]{3})?)*$</value>
  <description>
    Valid pattern for user and group names in webhdfs acl operations, it must be a valid java regex.
  </description>
</property>

<property>
  <name>dfs.webhdfs.socket.connect-timeout</name>
  <value>60s</value>
  <description>
    Socket timeout for connecting to WebHDFS servers. This prevents a
    WebHDFS client from hanging if the server hostname is
    misconfigured, or the server does not response before the timeout
    expires. Value is followed by a unit specifier: ns, us, ms, s, m,
    h, d for nanoseconds, microseconds, milliseconds, seconds,
    minutes, hours, days respectively. Values should provide units,
    but milliseconds are assumed.
  </description>
</property>

<property>
  <name>dfs.webhdfs.socket.read-timeout</name>
  <value>60s</value>
  <description>
    Socket timeout for reading data from WebHDFS servers. This
    prevents a WebHDFS client from hanging if the server stops sending
    data. Value is followed by a unit specifier: ns, us, ms, s, m, h,
    d for nanoseconds, microseconds, milliseconds, seconds, minutes,
    hours, days respectively. Values should provide units,
    but milliseconds are assumed.
  </description>
</property>

<property>
  <name>dfs.client.context</name>
  <value>default</value>
  <description>
    The name of the DFSClient context that we should use.  Clients that share
    a context share a socket cache and short-circuit cache, among other things.
    You should only change this if you don't want to share with another set of
    threads.
  </description>
</property>

<property>
  <name>dfs.client.read.shortcircuit</name>
  <value>false</value>
  <description>
    This configuration parameter turns on short-circuit local reads.
  </description>
</property>

<property>
  <name>dfs.client.socket.send.buffer.size</name>
  <value>0</value>
  <description>
    Socket send buffer size for a write pipeline in DFSClient side.
    This may affect TCP connection throughput.
    If it is set to zero or negative value,
    no buffer size will be set explicitly,
    thus enable tcp auto-tuning on some system.
    The default value is 0.
  </description>
</property>

<property>
  <name>dfs.domain.socket.path</name>
  <value></value>
  <description>
    Optional.  This is a path to a UNIX domain socket that will be used for
    communication between the DataNode and local HDFS clients.
    If the string "_PORT" is present in this path, it will be replaced by the
    TCP port of the DataNode.
  </description>
</property>

<property>
  <name>dfs.domain.socket.disable.interval.seconds</name>
  <value>600</value>
  <description>
    The interval that a DataNode is disabled for future Short-Circuit Reads,
    after an error happens during a Short-Circuit Read. Setting this to 0 will
    not disable Short-Circuit Reads at all after errors happen. Negative values
    are invalid.
  </description>
</property>

<property>
  <name>dfs.client.read.shortcircuit.skip.checksum</name>
  <value>false</value>
  <description>
    If this configuration parameter is set,
    short-circuit local reads will skip checksums.
    This is normally not recommended,
    but it may be useful for special setups.
    You might consider using this
    if you are doing your own checksumming outside of HDFS.
  </description>
</property>

<property>
  <name>dfs.client.read.shortcircuit.streams.cache.size</name>
  <value>256</value>
  <description>
    The DFSClient maintains a cache of recently opened file descriptors.
    This parameter controls the maximum number of file descriptors in the cache.
    Setting this higher will use more file descriptors,
    but potentially provide better performance on workloads
    involving lots of seeks.
  </description>
</property>

<property>
  <name>dfs.client.read.shortcircuit.streams.cache.expiry.ms</name>
  <value>300000</value>
  <description>
    This controls the minimum amount of time
    file descriptors need to sit in the client cache context
    before they can be closed for being inactive for too long.
  </description>
</property>

<property>
  <name>dfs.datanode.shared.file.descriptor.paths</name>
  <value>/dev/shm,/tmp</value>
  <description>
    Comma separated paths to the directory on which
    shared memory segments are created.
    The client and the DataNode exchange information via
    this shared memory segment.
    It tries paths in order until creation of shared memory segment succeeds.
  </description>
</property>

<property>
  <name>dfs.namenode.audit.log.debug.cmdlist</name>
  <value></value>
  <description>
    A comma separated list of NameNode commands that are written to the HDFS
    namenode audit log only if the audit log level is debug.
  </description>
</property>

<property>
  <name>dfs.client.use.legacy.blockreader.local</name>
  <value>false</value>
  <description>
    Legacy short-circuit reader implementation based on HDFS-2246 is used
    if this configuration parameter is true.
    This is for the platforms other than Linux
    where the new implementation based on HDFS-347 is not available.
  </description>
</property>

<property>
  <name>dfs.block.local-path-access.user</name>
  <value></value>
  <description>
    Comma separated list of the users allowed to open block files
    on legacy short-circuit local read.
  </description>
</property>

<property>
  <name>dfs.client.domain.socket.data.traffic</name>
  <value>false</value>
  <description>
    This control whether we will try to pass normal data traffic
    over UNIX domain socket rather than over TCP socket
    on node-local data transfer.
    This is currently experimental and turned off by default.
  </description>
</property>

<property>
  <name>dfs.namenode.reject-unresolved-dn-topology-mapping</name>
  <value>false</value>
  <description>
    If the value is set to true, then namenode will reject datanode 
    registration if the topology mapping for a datanode is not resolved and 
    NULL is returned (script defined by net.topology.script.file.name fails 
    to execute). Otherwise, datanode will be registered and the default rack 
    will be assigned as the topology path. Topology paths are important for 
    data resiliency, since they define fault domains. Thus it may be unwanted 
    behavior to allow datanode registration with the default rack if the 
    resolving topology failed.
  </description>
</property>

<property>
  <name>dfs.namenode.xattrs.enabled</name>
  <value>true</value>
  <description>
    Whether support for extended attributes is enabled on the NameNode.
  </description>
</property>

<property>
  <name>dfs.namenode.fs-limits.max-xattrs-per-inode</name>
  <value>32</value>
  <description>
    Maximum number of extended attributes per inode.
  </description>
</property>

<property>
  <name>dfs.namenode.fs-limits.max-xattr-size</name>
  <value>16384</value>
  <description>
    The maximum combined size of the name and value of an extended attribute
    in bytes. It should be larger than 0, and less than or equal to maximum
    size hard limit which is 32768.
  </description>
</property>

<property>
  <name>dfs.client.slow.io.warning.threshold.ms</name>
  <value>30000</value>
  <description>The threshold in milliseconds at which we will log a slow
    io warning in a dfsclient. By default, this parameter is set to 30000
    milliseconds (30 seconds).
  </description>
</property>

<property>
  <name>dfs.datanode.slow.io.warning.threshold.ms</name>
  <value>300</value>
  <description>The threshold in milliseconds at which we will log a slow
    io warning in a datanode. By default, this parameter is set to 300
    milliseconds.
  </description>
</property>

<property>
  <name>dfs.namenode.lease-recheck-interval-ms</name>
  <value>2000</value>
  <description>During the release of lease a lock is hold that make any
    operations on the namenode stuck. In order to not block them during
    a too long duration we stop releasing lease after this max lock limit.
  </description>
</property>

<property>
  <name>dfs.namenode.max-lock-hold-to-release-lease-ms</name>
  <value>25</value>
  <description>During the release of lease a lock is hold that make any
    operations on the namenode stuck. In order to not block them during
    a too long duration we stop releasing lease after this max lock limit.
  </description>
</property>

<property>
  <name>dfs.namenode.write-lock-reporting-threshold-ms</name>
  <value>5000</value>
  <description>When a write lock is held on the namenode for a long time,
    this will be logged as the lock is released. This sets how long the
    lock must be held for logging to occur.
  </description>
</property>

<property>
  <name>dfs.namenode.read-lock-reporting-threshold-ms</name>
  <value>5000</value>
  <description>When a read lock is held on the namenode for a long time,
    this will be logged as the lock is released. This sets how long the
    lock must be held for logging to occur.
  </description>
</property>

<property>
  <name>dfs.namenode.lock.detailed-metrics.enabled</name>
  <value>false</value>
  <description>If true, the namenode will keep track of how long various
    operations hold the Namesystem lock for and emit this as metrics. These
    metrics have names of the form FSN(Read|Write)LockNanosOperationName,
    where OperationName denotes the name of the operation that initiated the
    lock hold (this will be OTHER for certain uncategorized operations) and
    they export the hold time values in nanoseconds.
  </description>
</property>

<property>
  <name>dfs.namenode.fslock.fair</name>
  <value>true</value>
  <description>If this is true, the FS Namesystem lock will be used in Fair mode,
    which will help to prevent writer threads from being starved, but can provide
    lower lock throughput. See java.util.concurrent.locks.ReentrantReadWriteLock
    for more information on fair/non-fair locks.
  </description>
</property>

<property>
  <name>dfs.namenode.startup.delay.block.deletion.sec</name>
  <value>0</value>
  <description>The delay in seconds at which we will pause the blocks deletion
    after Namenode startup. By default it's disabled.
    In the case a directory has large number of directories and files are
    deleted, suggested delay is one hour to give the administrator enough time
    to notice large number of pending deletion blocks and take corrective
    action.
  </description>
</property>

<property>
  <name>dfs.datanode.block.id.layout.upgrade.threads</name>
  <value>12</value>
  <description>The number of threads to use when creating hard links from
    current to previous blocks during upgrade of a DataNode to block ID-based
    block layout (see HDFS-6482 for details on the layout).</description>
</property>

<property>
  <name>dfs.namenode.list.encryption.zones.num.responses</name>
  <value>100</value>
  <description>When listing encryption zones, the maximum number of zones
    that will be returned in a batch. Fetching the list incrementally in
    batches improves namenode performance.
  </description>
</property>

<property>
  <name>dfs.namenode.list.reencryption.status.num.responses</name>
  <value>100</value>
  <description>When listing re-encryption status, the maximum number of zones
    that will be returned in a batch. Fetching the list incrementally in
    batches improves namenode performance.
  </description>
</property>

  <property>
    <name>dfs.namenode.list.openfiles.num.responses</name>
    <value>1000</value>
    <description>
      When listing open files, the maximum number of open files that will be
      returned in a single batch. Fetching the list incrementally in batches
      improves namenode performance.
    </description>
  </property>

<property>
  <name>dfs.namenode.edekcacheloader.interval.ms</name>
  <value>1000</value>
  <description>When KeyProvider is configured, the interval time of warming
    up edek cache on NN starts up / becomes active. All edeks will be loaded
    from KMS into provider cache. The edek cache loader will try to warm up the
    cache until succeed or NN leaves active state.
  </description>
</property>

<property>
  <name>dfs.namenode.edekcacheloader.initial.delay.ms</name>
  <value>3000</value>
  <description>When KeyProvider is configured, the time delayed until the first
    attempt to warm up edek cache on NN start up / become active.
  </description>
</property>

<property>
  <name>dfs.namenode.reencrypt.sleep.interval</name>
  <value>1m</value>
  <description>Interval the re-encrypt EDEK thread sleeps in the main loop. The
    interval accepts units. If none given, millisecond is assumed.
  </description>
</property>

<property>
  <name>dfs.namenode.reencrypt.batch.size</name>
  <value>1000</value>
  <description>How many EDEKs should the re-encrypt thread process in one batch.
  </description>
</property>

<property>
  <name>dfs.namenode.reencrypt.throttle.limit.handler.ratio</name>
  <value>1.0</value>
  <description>Throttling ratio for the re-encryption, indicating what fraction
    of time should the re-encrypt handler thread work under NN read lock.
    Larger than 1.0 values are interpreted as 1.0. Negative value or 0 are
    invalid values and will fail NN startup.
  </description>
</property>

<property>
  <name>dfs.namenode.reencrypt.throttle.limit.updater.ratio</name>
  <value>1.0</value>
  <description>Throttling ratio for the re-encryption, indicating what fraction
    of time should the re-encrypt updater thread work under NN write lock.
    Larger than 1.0 values are interpreted as 1.0. Negative value or 0 are
    invalid values and will fail NN startup.
  </description>
</property>

<property>
  <name>dfs.namenode.reencrypt.edek.threads</name>
  <value>10</value>
  <description>Maximum number of re-encrypt threads to contact the KMS
    and re-encrypt the edeks.
  </description>
</property>

<property>
  <name>dfs.namenode.inotify.max.events.per.rpc</name>
  <value>1000</value>
  <description>Maximum number of events that will be sent to an inotify client
    in a single RPC response. The default value attempts to amortize away
    the overhead for this RPC while avoiding huge memory requirements for the
    client and NameNode (1000 events should consume no more than 1 MB.)
  </description>
</property>

<property>
  <name>dfs.user.home.dir.prefix</name>
  <value>/user</value>
  <description>The directory to prepend to user name to get the user's
    home direcotry.
  </description>
</property>

<property>
  <name>dfs.datanode.cache.revocation.timeout.ms</name>
  <value>900000</value>
  <description>When the DFSClient reads from a block file which the DataNode is
    caching, the DFSClient can skip verifying checksums.  The DataNode will
    keep the block file in cache until the client is done.  If the client takes
    an unusually long time, though, the DataNode may need to evict the block
    file from the cache anyway.  This value controls how long the DataNode will
    wait for the client to release a replica that it is reading without
    checksums.
  </description>
</property>

<property>
  <name>dfs.datanode.cache.revocation.polling.ms</name>
  <value>500</value>
  <description>How often the DataNode should poll to see if the clients have
    stopped using a replica that the DataNode wants to uncache.
  </description>
</property>

<property>
  <name>dfs.storage.policy.enabled</name>
  <value>true</value>
  <description>
    Allow users to change the storage policy on files and directories.
  </description>
</property>

<property>
  <name>dfs.namenode.legacy-oiv-image.dir</name>
  <value></value>
  <description>Determines where to save the namespace in the old fsimage format
    during checkpointing by standby NameNode or SecondaryNameNode. Users can
    dump the contents of the old format fsimage by oiv_legacy command. If
    the value is not specified, old format fsimage will not be saved in
    checkpoint.
  </description>
</property>

<property>
  <name>dfs.namenode.top.enabled</name>
  <value>true</value>
  <description>Enable nntop: reporting top users on namenode
  </description>
</property>

<property>
  <name>dfs.namenode.top.window.num.buckets</name>
  <value>10</value>
  <description>Number of buckets in the rolling window implementation of nntop
  </description>
</property>

<property>
  <name>dfs.namenode.top.num.users</name>
  <value>10</value>
  <description>Number of top users returned by the top tool
  </description>
</property>

<property>
  <name>dfs.namenode.top.windows.minutes</name>
  <value>1,5,25</value>
  <description>comma separated list of nntop reporting periods in minutes
  </description>
</property>

<property>
    <name>dfs.webhdfs.ugi.expire.after.access</name>
    <value>600000</value>
    <description>How long in milliseconds after the last access
      the cached UGI will expire. With 0, never expire.
    </description>
</property>

<property>
  <name>dfs.namenode.blocks.per.postponedblocks.rescan</name>
  <value>10000</value>
  <description>Number of blocks to rescan for each iteration of
    postponedMisreplicatedBlocks.
  </description>
</property>

<property>
  <name>dfs.datanode.block-pinning.enabled</name>
  <value>false</value>
  <description>Whether pin blocks on favored DataNode.</description>
</property>

<property>
  <name>dfs.client.block.write.locateFollowingBlock.initial.delay.ms</name>
  <value>400</value>
  <description>The initial delay (unit is ms) for locateFollowingBlock,
    the delay time will increase exponentially(double) for each retry.
  </description>
</property>

<property>
  <name>dfs.ha.zkfc.nn.http.timeout.ms</name>
  <value>20000</value>
  <description>
    The HTTP connection and read timeout value (unit is ms ) when DFS ZKFC
    tries to get local NN thread dump after local NN becomes
    SERVICE_NOT_RESPONDING or SERVICE_UNHEALTHY.
    If it is set to zero, DFS ZKFC won't get local NN thread dump.
  </description>
</property>

<property>
  <name>dfs.ha.tail-edits.in-progress</name>
  <value>false</value>
  <description>
    Whether enable standby namenode to tail in-progress edit logs.
    Clients might want to turn it on when they want Standby NN to have
    more up-to-date data.
  </description>
</property>

<property>
  <name>dfs.namenode.ec.system.default.policy</name>
  <value>RS-6-3-1024k</value>
  <description>The default erasure coding policy name will be used
    on the path if no policy name is passed.
  </description>
</property>

<property>
  <name>dfs.namenode.ec.policies.max.cellsize</name>
  <value>4194304</value>
  <description>The maximum cell size of erasure coding policy. Default is 4MB.
  </description>
</property>

<property>
  <name>dfs.datanode.ec.reconstruction.stripedread.timeout.millis</name>
  <value>5000</value>
  <description>Datanode striped read timeout in milliseconds.
  </description>
</property>

<property>
  <name>dfs.datanode.ec.reconstruction.stripedread.buffer.size</name>
  <value>65536</value>
  <description>Datanode striped read buffer size.
  </description>
</property>

<property>
  <name>dfs.datanode.ec.reconstruction.threads</name>
  <value>8</value>
  <description>
    Number of threads used by the Datanode for background
    reconstruction work.
  </description>
</property>

<property>
  <name>dfs.datanode.ec.reconstruction.xmits.weight</name>
  <value>0.5</value>
  <description>
    Datanode uses xmits weight to calculate the relative cost of EC recovery
    tasks comparing to replicated block recovery, of which xmits is always 1.
    Namenode then uses xmits reported from datanode to throttle recovery tasks
    for EC and replicated blocks.
    The xmits of an erasure coding recovery task is calculated as the maximum
    value between the number of read streams and the number of write streams.
  </description>
</property>

<property>
  <name>dfs.namenode.quota.init-threads</name>
  <value>4</value>
  <description>
    The number of concurrent threads to be used in quota initialization. The
    speed of quota initialization also affects the namenode fail-over latency.
    If the size of name space is big, try increasing this.
  </description>
</property>

<property>
  <name>dfs.datanode.transfer.socket.send.buffer.size</name>
  <value>0</value>
  <description>
    Socket send buffer size for DataXceiver (mirroring packets to downstream
    in pipeline). This may affect TCP connection throughput.
    If it is set to zero or negative value, no buffer size will be set
    explicitly, thus enable tcp auto-tuning on some system.
    The default value is 0.
  </description>
</property>

<property>
  <name>dfs.datanode.transfer.socket.recv.buffer.size</name>
  <value>0</value>
  <description>
    Socket receive buffer size for DataXceiver (receiving packets from client
    during block writing). This may affect TCP connection throughput.
    If it is set to zero or negative value, no buffer size will be set
    explicitly, thus enable tcp auto-tuning on some system.
    The default value is 0.
  </description>
</property>

<property>
  <name>dfs.namenode.upgrade.domain.factor</name>
  <value>${dfs.replication}</value>
  <description>
    This is valid only when block placement policy is set to
    BlockPlacementPolicyWithUpgradeDomain. It defines the number of
    unique upgrade domains any block's replicas should have.
    When the number of replicas is less or equal to this value, the policy
    ensures each replica has an unique upgrade domain. When the number of
    replicas is greater than this value, the policy ensures the number of
    unique domains is at least this value.
  </description>
</property>

<property>
  <name>dfs.ha.zkfc.port</name>
  <value>8019</value>
  <description>
    RPC port for Zookeeper Failover Controller.
  </description>
</property>

<property>
  <name>dfs.datanode.bp-ready.timeout</name>
  <value>20s</value>
  <description>
    The maximum wait time for datanode to be ready before failing the
    received request. Setting this to 0 fails requests right away if the
    datanode is not yet registered with the namenode. This wait time
    reduces initial request failures after datanode restart.
    Support multiple time unit suffix(case insensitive), as described
    in dfs.heartbeat.interval.
  </description>
</property>

<property>
  <name>dfs.datanode.cached-dfsused.check.interval.ms</name>
  <value>600000</value>
  <description>
    The interval check time of loading DU_CACHE_FILE in each volume.
    When the cluster doing the rolling upgrade operations, it will
    usually lead dfsUsed cache file of each volume expired and redo the
    du operations in datanode and that makes datanode start slowly. Adjust
    this property can make cache file be available for the time as you want.
  </description>
</property>

<property>
  <name>dfs.webhdfs.rest-csrf.enabled</name>
  <value>false</value>
  <description>
    If true, then enables WebHDFS protection against cross-site request forgery
    (CSRF).  The WebHDFS client also uses this property to determine whether or
    not it needs to send the custom CSRF prevention header in its HTTP requests.
  </description>
</property>

<property>
  <name>dfs.webhdfs.rest-csrf.custom-header</name>
  <value>X-XSRF-HEADER</value>
  <description>
    The name of a custom header that HTTP requests must send when protection
    against cross-site request forgery (CSRF) is enabled for WebHDFS by setting
    dfs.webhdfs.rest-csrf.enabled to true.  The WebHDFS client also uses this
    property to determine whether or not it needs to send the custom CSRF
    prevention header in its HTTP requests.
  </description>
</property>

<property>
  <name>dfs.webhdfs.rest-csrf.methods-to-ignore</name>
  <value>GET,OPTIONS,HEAD,TRACE</value>
  <description>
    A comma-separated list of HTTP methods that do not require HTTP requests to
    include a custom header when protection against cross-site request forgery
    (CSRF) is enabled for WebHDFS by setting dfs.webhdfs.rest-csrf.enabled to
    true.  The WebHDFS client also uses this property to determine whether or
    not it needs to send the custom CSRF prevention header in its HTTP requests.
  </description>
</property>

<property>
  <name>dfs.webhdfs.rest-csrf.browser-useragents-regex</name>
  <value>^Mozilla.*,^Opera.*</value>
  <description>
    A comma-separated list of regular expressions used to match against an HTTP
    request's User-Agent header when protection against cross-site request
    forgery (CSRF) is enabled for WebHDFS by setting
    dfs.webhdfs.reset-csrf.enabled to true.  If the incoming User-Agent matches
    any of these regular expressions, then the request is considered to be sent
    by a browser, and therefore CSRF prevention is enforced.  If the request's
    User-Agent does not match any of these regular expressions, then the request
    is considered to be sent by something other than a browser, such as scripted
    automation.  In this case, CSRF is not a potential attack vector, so
    the prevention is not enforced.  This helps achieve backwards-compatibility
    with existing automation that has not been updated to send the CSRF
    prevention header.
  </description>
</property>

  <property>
    <name>dfs.xframe.enabled</name>
    <value>true</value>
    <description>
      If true, then enables protection against clickjacking by returning
      X_FRAME_OPTIONS header value set to SAMEORIGIN.
      Clickjacking protection prevents an attacker from using transparent or
      opaque layers to trick a user into clicking on a button
      or link on another page.
    </description>
  </property>

  <property>
    <name>dfs.xframe.value</name>
    <value>SAMEORIGIN</value>
    <description>
      This configration value allows user to specify the value for the
      X-FRAME-OPTIONS. The possible values for this field are
      DENY, SAMEORIGIN and ALLOW-FROM. Any other value will throw an
      exception when namenode and datanodes are starting up.
    </description>
  </property>


<property>
  <name>dfs.balancer.keytab.enabled</name>
  <value>false</value>
  <description>
    Set to true to enable login using a keytab for Kerberized Hadoop.
  </description>
</property>

<property>
  <name>dfs.balancer.address</name>
  <value>0.0.0.0:0</value>
  <description>
    The hostname used for a keytab based Kerberos login. Keytab based login
    can be enabled with dfs.balancer.keytab.enabled.
  </description>
</property>

<property>
  <name>dfs.balancer.keytab.file</name>
  <value></value>
  <description>
    The keytab file used by the Balancer to login as its
    service principal. The principal name is configured with
    dfs.balancer.kerberos.principal. Keytab based login can be
    enabled with dfs.balancer.keytab.enabled.
  </description>
</property>

<property>
  <name>dfs.balancer.kerberos.principal</name>
  <value></value>
  <description>
    The Balancer principal. This is typically set to
    balancer/_HOST@REALM.TLD. The Balancer will substitute _HOST with its
    own fully qualified hostname at startup. The _HOST placeholder
    allows using the same configuration setting on different servers.
    Keytab based login can be enabled with dfs.balancer.keytab.enabled.
  </description>
</property>

<property>
  <name>dfs.http.client.retry.policy.enabled</name>
  <value>false</value>
  <description>
    If "true", enable the retry policy of WebHDFS client.
    If "false", retry policy is turned off.
    Enabling the retry policy can be quite useful while using WebHDFS to
    copy large files between clusters that could timeout, or
    copy files between HA clusters that could failover during the copy.
  </description>
</property>

<property>
  <name>dfs.http.client.retry.policy.spec</name>
  <value>10000,6,60000,10</value>
  <description>
    Specify a policy of multiple linear random retry for WebHDFS client,
    e.g. given pairs of number of retries and sleep time (n0, t0), (n1, t1),
    ..., the first n0 retries sleep t0 milliseconds on average,
    the following n1 retries sleep t1 milliseconds on average, and so on.
  </description>
</property>

<property>
  <name>dfs.http.client.failover.max.attempts</name>
  <value>15</value>
  <description>
    Specify the max number of failover attempts for WebHDFS client
    in case of network exception.
  </description>
</property>

<property>
  <name>dfs.http.client.retry.max.attempts</name>
  <value>10</value>
  <description>
    Specify the max number of retry attempts for WebHDFS client,
    if the difference between retried attempts and failovered attempts is
    larger than the max number of retry attempts, there will be no more
    retries.
  </description>
</property>

<property>
  <name>dfs.http.client.failover.sleep.base.millis</name>
  <value>500</value>
  <description>
    Specify the base amount of time in milliseconds upon which the
    exponentially increased sleep time between retries or failovers
    is calculated for WebHDFS client.
  </description>
</property>

<property>
  <name>dfs.http.client.failover.sleep.max.millis</name>
  <value>15000</value>
  <description>
    Specify the upper bound of sleep time in milliseconds between
    retries or failovers for WebHDFS client.
  </description>
</property>

<property>
  <name>dfs.namenode.hosts.provider.classname</name>
  <value>org.apache.hadoop.hdfs.server.blockmanagement.HostFileManager</value>
  <description>
    The class that provides access for host files.
    org.apache.hadoop.hdfs.server.blockmanagement.HostFileManager is used
    by default which loads files specified by dfs.hosts and dfs.hosts.exclude.
    If org.apache.hadoop.hdfs.server.blockmanagement.CombinedHostFileManager is
    used, it will load the JSON file defined in dfs.hosts.
    To change class name, nn restart is required. "dfsadmin -refreshNodes" only
    refreshes the configuration files used by the class.
  </description>
</property>

<property>
  <name>datanode.https.port</name>
  <value>50475</value>
  <description>
    HTTPS port for DataNode.
  </description>
</property>

<property>
  <name>dfs.balancer.dispatcherThreads</name>
  <value>200</value>
  <description>
    Size of the thread pool for the HDFS balancer block mover.
    dispatchExecutor
  </description>
</property>

<property>
  <name>dfs.balancer.movedWinWidth</name>
  <value>5400000</value>
  <description>
    Window of time in ms for the HDFS balancer tracking blocks and its
    locations.
  </description>
</property>

<property>
  <name>dfs.balancer.moverThreads</name>
  <value>1000</value>
  <description>
    Thread pool size for executing block moves.
    moverThreadAllocator
  </description>
</property>

<property>
  <name>dfs.balancer.max-size-to-move</name>
  <value>10737418240</value>
  <description>
    Maximum number of bytes that can be moved by the balancer in a single
    thread.
  </description>
</property>

<property>
  <name>dfs.balancer.getBlocks.min-block-size</name>
  <value>10485760</value>
  <description>
    Minimum block threshold size in bytes to ignore when fetching a source's
    block list.
  </description>
</property>

<property>
  <name>dfs.balancer.getBlocks.size</name>
  <value>2147483648</value>
  <description>
    Total size in bytes of Datanode blocks to get when fetching a source's
    block list.
  </description>
</property>

<property>
  <name>dfs.balancer.block-move.timeout</name>
  <value>0</value>
  <description>
    Maximum amount of time in milliseconds for a block to move. If this is set
    greater than 0, Balancer will stop waiting for a block move completion
    after this time. In typical clusters, a 3 to 5 minute timeout is reasonable.
    If timeout happens to a large proportion of block moves, this needs to be
    increased. It could also be that too much work is dispatched and many nodes
    are constantly exceeding the bandwidth limit as a result. In that case,
    other balancer parameters might need to be adjusted.
    It is disabled (0) by default.
  </description>
</property>

<property>
  <name>dfs.balancer.max-no-move-interval</name>
  <value>60000</value>
  <description>
    If this specified amount of time has elapsed and no block has been moved
    out of a source DataNode, on more effort will be made to move blocks out of
    this DataNode in the current Balancer iteration.
  </description>
</property>

<property>
  <name>dfs.block.invalidate.limit</name>
  <value>1000</value>
  <description>
    The maximum number of invalidate blocks sent by namenode to a datanode
    per heartbeat deletion command. This property works with
    "dfs.namenode.invalidate.work.pct.per.iteration" to throttle block
    deletions.
  </description>
</property>

<property>
  <name>dfs.block.misreplication.processing.limit</name>
  <value>10000</value>
  <description>
    Maximum number of blocks to process for initializing replication queues.
  </description>
</property>

<property>
  <name>dfs.block.placement.ec.classname</name>
  <value>org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicyRackFaultTolerant</value>
  <description>
    Placement policy class for striped files.
    Defaults to BlockPlacementPolicyRackFaultTolerant.class
  </description>
</property>

<property>
  <name>dfs.block.replicator.classname</name>
  <value>org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicyDefault</value>
  <description>
    Class representing block placement policy for non-striped files.
    There are four block placement policies currently being supported:
    BlockPlacementPolicyDefault, BlockPlacementPolicyWithNodeGroup,
    BlockPlacementPolicyRackFaultTolerant and BlockPlacementPolicyWithUpgradeDomain.
    BlockPlacementPolicyDefault chooses the desired number of targets
    for placing block replicas in a default way. BlockPlacementPolicyWithNodeGroup
    places block replicas on environment with node-group layer. BlockPlacementPolicyRackFaultTolerant
    places the replicas to more racks.
    BlockPlacementPolicyWithUpgradeDomain places block replicas that honors upgrade domain policy.
    The details of placing replicas are documented in the javadoc of the corresponding policy classes.
    The default policy is BlockPlacementPolicyDefault, and the corresponding class is
    org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicyDefault.
  </description>
</property>

<property>
  <name>dfs.blockreport.incremental.intervalMsec</name>
  <value>0</value>
  <description>
    If set to a positive integer, the value in ms to wait between sending
    incremental block reports from the Datanode to the Namenode.
  </description>
</property>

<property>
  <name>dfs.checksum.type</name>
  <value>CRC32C</value>
  <description>
    Checksum type
  </description>
</property>

<property>
  <name>dfs.checksum.combine.mode</name>
  <value>MD5MD5CRC</value>
  <description>
    Defines how lower-level chunk/block checksums are combined into file-level
    checksums; the original MD5MD5CRC mode is not comparable between files
    with different block layouts, while modes like COMPOSITE_CRC are
    comparable independently of block layout.
  </description>
</property>

<property>
  <name>dfs.client.block.write.locateFollowingBlock.retries</name>
  <value>5</value>
  <description>
    Number of retries to use when finding the next block during HDFS writes.
  </description>
</property>

<property>
  <name>dfs.client.failover.proxy.provider</name>
  <value></value>
  <description>
    The prefix (plus a required nameservice ID) for the class name of the
    configured Failover proxy provider for the host.  For more detailed
    information, please consult the "Configuration Details" section of
    the HDFS High Availability documentation.
  </description>
</property>

<property>
  <name>dfs.client.key.provider.cache.expiry</name>
  <value>864000000</value>
  <description>
    DFS client security key cache expiration in milliseconds.
  </description>
</property>

<property>
  <name>dfs.client.max.block.acquire.failures</name>
  <value>3</value>
  <description>
    Maximum failures allowed when trying to get block information from a specific datanode.
  </description>
</property>

<property>
  <name>dfs.client.read.prefetch.size</name>
  <value></value>
  <description>
    The number of bytes for the DFSClient will fetch from the Namenode
    during a read operation.  Defaults to 10 * ${dfs.blocksize}.
  </description>
</property>

<property>
  <name>dfs.client.read.short.circuit.replica.stale.threshold.ms</name>
  <value>1800000</value>
  <description>
    Threshold in milliseconds for read entries during short-circuit local reads.
  </description>
</property>

<property>
  <name>dfs.client.read.shortcircuit.buffer.size</name>
  <value>1048576</value>
  <description>
    Buffer size in bytes for short-circuit local reads.
  </description>
</property>

<property>
  <name>dfs.client.read.striped.threadpool.size</name>
  <value>18</value>
  <description>
    The maximum number of threads used for parallel reading
    in striped layout.
  </description>
</property>

<property>
  <name>dfs.client.replica.accessor.builder.classes</name>
  <value></value>
  <description>
    Comma-separated classes for building ReplicaAccessor.  If the classes
    are specified, client will use external BlockReader that uses the
    ReplicaAccessor built by the builder.
  </description>
</property>

<property>
  <name>dfs.client.retry.interval-ms.get-last-block-length</name>
  <value>4000</value>
  <description>
    Retry interval in milliseconds to wait between retries in getting
    block lengths from the datanodes.
  </description>
</property>

<property>
  <name>dfs.client.retry.max.attempts</name>
  <value>10</value>
  <description>
    Max retry attempts for DFSClient talking to namenodes.
  </description>
</property>

<property>
  <name>dfs.client.retry.policy.enabled</name>
  <value>false</value>
  <description>
    If true, turns on DFSClient retry policy.
  </description>
</property>

<property>
  <name>dfs.client.retry.policy.spec</name>
  <value>10000,6,60000,10</value>
  <description>
    Set to pairs of timeouts and retries for DFSClient.
  </description>
</property>

<property>
  <name>dfs.client.retry.times.get-last-block-length</name>
  <value>3</value>
  <description>
    Number of retries for calls to fetchLocatedBlocksAndGetLastBlockLength().
  </description>
</property>

<property>
  <name>dfs.client.retry.window.base</name>
  <value>3000</value>
  <description>
    Base time window in ms for DFSClient retries.  For each retry attempt,
    this value is extended linearly (e.g. 3000 ms for first attempt and
    first retry, 6000 ms for second retry, 9000 ms for third retry, etc.).
  </description>
</property>

<property>
  <name>dfs.client.socket-timeout</name>
  <value>60000</value>
  <description>
    Default timeout value in milliseconds for all sockets.
  </description>
</property>

<property>
  <name>dfs.client.socketcache.capacity</name>
  <value>16</value>
  <description>
    Socket cache capacity (in entries) for short-circuit reads.
  </description>
</property>

<property>
  <name>dfs.client.socketcache.expiryMsec</name>
  <value>3000</value>
  <description>
    Socket cache expiration for short-circuit reads in msec.
  </description>
</property>

<property>
  <name>dfs.client.test.drop.namenode.response.number</name>
  <value>0</value>
  <description>
    The number of Namenode responses dropped by DFSClient for each RPC call.  Used
    for testing the NN retry cache.
  </description>
</property>

<property>
  <name>dfs.client.hedged.read.threadpool.size</name>
  <value>0</value>
  <description>
    Support 'hedged' reads in DFSClient. To enable this feature, set the parameter
    to a positive number. The threadpool size is how many threads to dedicate
    to the running of these 'hedged', concurrent reads in your client.
  </description>
</property>

<property>
  <name>dfs.client.hedged.read.threshold.millis</name>
  <value>500</value>
  <description>
    Configure 'hedged' reads in DFSClient. This is the number of milliseconds
    to wait before starting up a 'hedged' read.
  </description>
</property>

<property>
  <name>dfs.client.write.byte-array-manager.count-limit</name>
  <value>2048</value>
  <description>
    The maximum number of arrays allowed for each array length.
  </description>
</property>

<property>
  <name>dfs.client.write.byte-array-manager.count-reset-time-period-ms</name>
  <value>10000</value>
  <description>
    The time period in milliseconds that the allocation count for each array length is
    reset to zero if there is no increment.
  </description>
</property>

<property>
  <name>dfs.client.write.byte-array-manager.count-threshold</name>
  <value>128</value>
  <description>
    The count threshold for each array length so that a manager is created only after the
    allocation count exceeds the threshold. In other words, the particular array length
    is not managed until the allocation count exceeds the threshold.
  </description>
</property>

<property>
  <name>dfs.client.write.byte-array-manager.enabled</name>
  <value>false</value>
  <description>
    If true, enables byte array manager used by DFSOutputStream.
  </description>
</property>

<property>
  <name>dfs.client.write.max-packets-in-flight</name>
  <value>80</value>
  <description>
    The maximum number of DFSPackets allowed in flight.
  </description>
</property>

<property>
  <name>dfs.content-summary.limit</name>
  <value>5000</value>
  <description>
    The maximum content summary counts allowed in one locking period. 0 or a negative number
    means no limit (i.e. no yielding).
  </description>
</property>

<property>
  <name>dfs.content-summary.sleep-microsec</name>
  <value>500</value>
  <description>
    The length of time in microseconds to put the thread to sleep, between reaquiring the locks
    in content summary computation.
  </description>
</property>

<property>
  <name>dfs.data.transfer.client.tcpnodelay</name>
  <value>true</value>
  <description>
    If true, set TCP_NODELAY to sockets for transferring data from DFS client.
  </description>
</property>

<property>
  <name>dfs.data.transfer.server.tcpnodelay</name>
  <value>true</value>
  <description>
    If true, set TCP_NODELAY to sockets for transferring data between Datanodes.
  </description>
</property>

<property>
  <name>dfs.datanode.balance.max.concurrent.moves</name>
  <value>50</value>
  <description>
    Maximum number of threads for Datanode balancer pending moves.  This
    value is reconfigurable via the "dfsadmin -reconfig" command.
  </description>
</property>

<property>
  <name>dfs.datanode.fsdataset.factory</name>
  <value></value>
  <description>
    The class name for the underlying storage that stores replicas for a
    Datanode.  Defaults to
    org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetFactory.
  </description>
</property>

<property>
  <name>dfs.datanode.fsdataset.volume.choosing.policy</name>
  <value></value>
  <description>
    The class name of the policy for choosing volumes in the list of
    directories.  Defaults to
    org.apache.hadoop.hdfs.server.datanode.fsdataset.RoundRobinVolumeChoosingPolicy.
    If you would like to take into account available disk space, set the
    value to
    "org.apache.hadoop.hdfs.server.datanode.fsdataset.AvailableSpaceVolumeChoosingPolicy".
  </description>
</property>

<property>
  <name>dfs.datanode.hostname</name>
  <value></value>
  <description>
    Optional.  The hostname for the Datanode containing this
    configuration file.  Will be different for each machine.
    Defaults to current hostname.
  </description>
</property>

<property>
  <name>dfs.datanode.lazywriter.interval.sec</name>
  <value>60</value>
  <description>
    Interval in seconds for Datanodes for lazy persist writes.
  </description>
</property>

<property>
  <name>dfs.datanode.network.counts.cache.max.size</name>
  <value>2147483647</value>
  <description>
    The maximum number of entries the datanode per-host network error
    count cache may contain.
  </description>
</property>

<property>
  <name>dfs.datanode.oob.timeout-ms</name>
  <value>1500,0,0,0</value>
  <description>
    Timeout value when sending OOB response for each OOB type, which are
    OOB_RESTART, OOB_RESERVED1, OOB_RESERVED2, and OOB_RESERVED3,
    respectively.  Currently, only OOB_RESTART is used.
  </description>
</property>

<property>
  <name>dfs.datanode.parallel.volumes.load.threads.num</name>
  <value></value>
  <description>
    Maximum number of threads to use for upgrading data directories.
    The default value is the number of storage directories in the
    DataNode.
  </description>
</property>

<property>
  <name>dfs.datanode.ram.disk.replica.tracker</name>
  <value></value>
  <description>
    Name of the class implementing the RamDiskReplicaTracker interface.
    Defaults to
    org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.RamDiskReplicaLruTracker.
  </description>
</property>

<property>
  <name>dfs.datanode.restart.replica.expiration</name>
  <value>50</value>
  <description>
    During shutdown for restart, the amount of time in seconds budgeted for
    datanode restart.
  </description>
</property>

<property>
  <name>dfs.datanode.socket.reuse.keepalive</name>
  <value>4000</value>
  <description>
    The window of time in ms before the DataXceiver closes a socket for a
    single request.  If a second request occurs within that window, the
    socket can be reused.
  </description>
</property>

<property>
  <name>dfs.datanode.socket.write.timeout</name>
  <value>480000</value>
  <description>
    Timeout in ms for clients socket writes to DataNodes.
  </description>
</property>

<property>
  <name>dfs.datanode.sync.behind.writes.in.background</name>
  <value>false</value>
  <description>
    If set to true, then sync_file_range() system call will occur
    asynchronously.  This property is only valid when the property
    dfs.datanode.sync.behind.writes is true.
  </description>
</property>

<property>
  <name>dfs.datanode.transferTo.allowed</name>
  <value>true</value>
  <description>
    If false, break block transfers on 32-bit machines greater than
    or equal to 2GB into smaller chunks.
  </description>
</property>

<property>
  <name>dfs.ha.fencing.methods</name>
  <value></value>
  <description>
    A list of scripts or Java classes which will be used to fence
    the Active NameNode during a failover.  See the HDFS High
    Availability documentation for details on automatic HA
    configuration.
  </description>
</property>

<property>
  <name>dfs.ha.standby.checkpoints</name>
  <value>true</value>
  <description>
    If true, a NameNode in Standby state periodically takes a checkpoint
    of the namespace, saves it to its local storage and then upload to
    the remote NameNode.
  </description>
</property>

<property>
  <name>dfs.ha.zkfc.port</name>
  <value>8019</value>
  <description>
    The port number that the zookeeper failover controller RPC
    server binds to.
  </description>
</property>

<property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/tmp/hadoop/dfs/journalnode/</value>
  <description>
    The directory where the journal edit files are stored.
  </description>
</property>

<property>
  <name>dfs.journalnode.enable.sync</name>
  <value>true</value>
  <description>
    If true, the journal nodes wil sync with each other. The journal nodes
    will periodically gossip with other journal nodes to compare edit log
    manifests and if they detect any missing log segment, they will download
    it from the other journal nodes.
  </description>
</property>

<property>
  <name>dfs.journalnode.sync.interval</name>
  <value>120000</value>
  <description>
    Time interval, in milliseconds, between two Journal Node syncs.
    This configuration takes effect only if the journalnode sync is enabled
    by setting the configuration parameter dfs.journalnode.enable.sync to true.
  </description>
</property>

<property>
  <name>dfs.journalnode.kerberos.internal.spnego.principal</name>
  <value></value>
  <description>
    Kerberos SPNEGO principal name used by the journal node.
  </description>
</property>

<property>
  <name>dfs.journalnode.kerberos.principal</name>
  <value></value>
  <description>
    Kerberos principal name for the journal node.
  </description>
</property>

<property>
  <name>dfs.journalnode.keytab.file</name>
  <value></value>
  <description>
    Kerberos keytab file for the journal node.
  </description>
</property>

<property>
  <name>dfs.ls.limit</name>
  <value>1000</value>
  <description>
    Limit the number of files printed by ls. If less or equal to
    zero, at most DFS_LIST_LIMIT_DEFAULT (= 1000) will be printed.
  </description>
</property>

<property>
  <name>dfs.mover.movedWinWidth</name>
  <value>5400000</value>
  <description>
    The minimum time interval, in milliseconds, that a block can be
    moved to another location again.
  </description>
</property>

<property>
  <name>dfs.mover.moverThreads</name>
  <value>1000</value>
  <description>
    Configure the balancer's mover thread pool size.
  </description>
</property>

<property>
  <name>dfs.mover.retry.max.attempts</name>
  <value>10</value>
  <description>
    The maximum number of retries before the mover consider the
    move failed.
  </description>
</property>

<property>
  <name>dfs.mover.keytab.enabled</name>
  <value>false</value>
  <description>
    Set to true to enable login using a keytab for Kerberized Hadoop.
  </description>
</property>

<property>
  <name>dfs.mover.address</name>
  <value>0.0.0.0:0</value>
  <description>
    The hostname used for a keytab based Kerberos login. Keytab based login
    can be enabled with dfs.mover.keytab.enabled.
  </description>
</property>

<property>
  <name>dfs.mover.keytab.file</name>
  <value></value>
  <description>
    The keytab file used by the Mover to login as its
    service principal. The principal name is configured with
    dfs.mover.kerberos.principal. Keytab based login can be
    enabled with dfs.mover.keytab.enabled.
  </description>
</property>

<property>
  <name>dfs.mover.kerberos.principal</name>
  <value></value>
  <description>
    The Mover principal. This is typically set to
    mover/_HOST@REALM.TLD. The Mover will substitute _HOST with its
    own fully qualified hostname at startup. The _HOST placeholder
    allows using the same configuration setting on different servers.
    Keytab based login can be enabled with dfs.mover.keytab.enabled.
  </description>
</property>

<property>
  <name>dfs.mover.max-no-move-interval</name>
  <value>60000</value>
  <description>
    If this specified amount of time has elapsed and no block has been moved
    out of a source DataNode, on more effort will be made to move blocks out of
    this DataNode in the current Mover iteration.
  </description>
</property>

<property>
  <name>dfs.namenode.audit.log.async</name>
  <value>false</value>
  <description>
    If true, enables asynchronous audit log.
  </description>
</property>

<property>
  <name>dfs.namenode.audit.log.token.tracking.id</name>
  <value>false</value>
  <description>
    If true, adds a tracking ID for all audit log events.
  </description>
</property>

<property>
  <name>dfs.namenode.available-space-block-placement-policy.balanced-space-preference-fraction</name>
  <value>0.6</value>
  <description>
    Only used when the dfs.block.replicator.classname is set to
    org.apache.hadoop.hdfs.server.blockmanagement.AvailableSpaceBlockPlacementPolicy.
    Special value between 0 and 1, noninclusive.  Increases chance of
    placing blocks on Datanodes with less disk space used.
  </description>
</property>

<property>
  <name>dfs.namenode.backup.dnrpc-address</name>
  <value></value>
  <description>
    Service RPC address for the backup Namenode.
  </description>
</property>

<property>
  <name>dfs.namenode.delegation.token.always-use</name>
  <value>false</value>
  <description>
    For testing.  Setting to true always allows the DT secret manager
    to be used, even if security is disabled.
  </description>
</property>

<property>
  <name>dfs.namenode.edits.asynclogging</name>
  <value>true</value>
  <description>
    If set to true, enables asynchronous edit logs in the Namenode.  If set
    to false, the Namenode uses the traditional synchronous edit logs.
  </description>
</property>

<property>
  <name>dfs.namenode.edits.dir.minimum</name>
  <value>1</value>
  <description>
    dfs.namenode.edits.dir includes both required directories
    (specified by dfs.namenode.edits.dir.required) and optional directories.

    The number of usable optional directories must be greater than or equal
    to this property.  If the number of usable optional directories falls
    below dfs.namenode.edits.dir.minimum, HDFS will issue an error.

    This property defaults to 1.
  </description>
</property>

<property>
  <name>dfs.namenode.edits.journal-plugin</name>
  <value></value>
  <description>
    When FSEditLog is creating JournalManagers from dfs.namenode.edits.dir,
    and it encounters a URI with a schema different to "file" it loads the
    name of the implementing class from
    "dfs.namenode.edits.journal-plugin.[schema]". This class must implement
    JournalManager and have a constructor which takes (Configuration, URI).
  </description>
</property>

<property>
  <name>dfs.namenode.file.close.num-committed-allowed</name>
  <value>0</value>
  <description>
    Normally a file can only be closed with all its blocks are committed.
    When this value is set to a positive integer N, a file can be closed
    when N blocks are committed and the rest complete.
  </description>
</property>

<property>
  <name>dfs.namenode.inode.attributes.provider.class</name>
  <value></value>
  <description>
    Name of class to use for delegating HDFS authorization.
  </description>
</property>

<property>
  <name>dfs.namenode.inode.attributes.provider.bypass.users</name>
  <value></value>
  <description>
    A list of user principals (in secure cluster) or user names (in insecure
    cluster) for whom the external attributes provider will be bypassed for all
    operations. This means file attributes stored in HDFS instead of the
    external provider will be used for permission checking and be returned when
    requested.
  </description>
</property>

<property>
  <name>dfs.namenode.max-num-blocks-to-log</name>
  <value>1000</value>
  <description>
    Puts a limit on the number of blocks printed to the log by the Namenode
    after a block report.
  </description>
</property>

<property>
  <name>dfs.namenode.max.op.size</name>
  <value>52428800</value>
  <description>
    Maximum opcode size in bytes.
  </description>
</property>

<property>
  <name>dfs.namenode.missing.checkpoint.periods.before.shutdown</name>
  <value>3</value>
  <description>
    The number of checkpoint period windows (as defined by the property
    dfs.namenode.checkpoint.period) allowed by the Namenode to perform
    saving the namespace before shutdown.
  </description>
</property>

<property>
  <name>dfs.namenode.name.cache.threshold</name>
  <value>10</value>
  <description>
    Frequently accessed files that are accessed more times than this
    threshold are cached in the FSDirectory nameCache.
  </description>
</property>

<property>
  <name>dfs.namenode.replication.max-streams</name>
  <value>2</value>
  <description>
    Hard limit for the number of highest-priority replication streams.
  </description>
</property>

<property>
  <name>dfs.namenode.replication.max-streams-hard-limit</name>
  <value>4</value>
  <description>
    Hard limit for all replication streams.
  </description>
</property>

<property>
  <name>dfs.namenode.reconstruction.pending.timeout-sec</name>
  <value>300</value>
  <description>
    Timeout in seconds for block reconstruction.  If this value is 0 or less,
    then it will default to 5 minutes.
  </description>
</property>

<property>
  <name>dfs.namenode.stale.datanode.minimum.interval</name>
  <value>3</value>
  <description>
    Minimum number of missed heartbeats intervals for a datanode to
    be marked stale by the Namenode.  The actual interval is calculated as
    (dfs.namenode.stale.datanode.minimum.interval * dfs.heartbeat.interval)
    in seconds.  If this value is greater than the property
    dfs.namenode.stale.datanode.interval, then the calculated value above
    is used.
  </description>
</property>

<property>
  <name>dfs.namenode.storageinfo.defragment.timeout.ms</name>
  <value>4</value>
  <description>
    Timeout value in ms for the StorageInfo compaction run.
  </description>
</property>

<property>
  <name>dfs.namenode.storageinfo.defragment.interval.ms</name>
  <value>600000</value>
  <description>
    The thread for checking the StorageInfo for defragmentation will
    run periodically.  The time between runs is determined by this
    property.
  </description>
</property>

<property>
  <name>dfs.namenode.storageinfo.defragment.ratio</name>
  <value>0.75</value>
  <description>
    The defragmentation threshold for the StorageInfo.
  </description>
</property>

<property>
  <name>dfs.namenode.snapshot.capture.openfiles</name>
  <value>false</value>
  <description>
    If true, snapshots taken will have an immutable shared copy of
    the open files that have valid leases. Even after the open files
    grow or shrink in size, snapshot will always have the previous
    point-in-time version of the open files, just like all other
    closed files. Default is false.
    Note: The file length captured for open files in snapshot is
    whats recorded in NameNode at the time of snapshot and it may
    be shorter than what the client has written till then. In order
    to capture the latest length, the client can call hflush/hsync
    with the flag SyncFlag.UPDATE_LENGTH on the open files handles.
  </description>
</property>

<property>
  <name>dfs.namenode.snapshot.skip.capture.accesstime-only-change</name>
  <value>false</value>
  <description>
    If accessTime of a file/directory changed but there is no other
    modification made to the file/directory, the changed accesstime will
    not be captured in next snapshot. However, if there is other modification
    made to the file/directory, the latest access time will be captured
    together with the modification in next snapshot.
  </description>
</property>

<property>
  <name>dfs.namenode.snapshotdiff.allow.snap-root-descendant</name>
  <value>true</value>
  <description>
    If enabled, snapshotDiff command can be run for any descendant directory
    under a snapshot root directory and the diff calculation will be scoped
    to the given descendant directory. Otherwise, snapshot diff command can
    only be run for a snapshot root directory.
  </description>
</property>

<property>
  <name>dfs.namenode.snapshotdiff.listing.limit</name>
  <value>1000</value>
  <description>
    Limit the number of entries generated by getSnapshotDiffReportListing within
    one rpc call to the namenode.If less or equal to zero, at most
    DFS_NAMENODE_SNAPSHOT_DIFF_LISTING_LIMIT_DEFAULT (= 1000) will be sent
    across to the client within one rpc call.
  </description>
</property>
<property>
  <name>dfs.namenode.snapshot.max.limit</name>
  <value>65536</value>
  <description>
    Limits the maximum number of snapshots allowed per snapshottable
    directory.If the configuration is not set, the default limit
    for maximum no of snapshots allowed is 65536.
  </description>
</property>

<property>
  <name>dfs.namenode.snapshot.skiplist.max.levels</name>
  <value>0</value>
  <description>
    Maximum no of the skip levels to be maintained in the skip list for
    storing directory snapshot diffs. By default, it is set to 0 and a linear
    list will be used to store the directory snapshot diffs.
  </description>
</property>
<property>
  <name>dfs.namenode.snapshot.skiplist.interval</name>
  <value>10</value>
  <description>
    The interval after which the skip levels will be formed in the skip list
    for storing directory snapshot diffs. By default, value is set to 10.
  </description>
</property>

<property>
  <name>dfs.pipeline.ecn</name>
  <value>false</value>
  <description>
    If true, allows ECN (explicit congestion notification) from the
    Datanode.
  </description>
</property>

<property>
  <name>dfs.qjournal.accept-recovery.timeout.ms</name>
  <value>120000</value>
  <description>
    Quorum timeout in milliseconds during accept phase of
    recovery/synchronization for a specific segment.
  </description>
</property>

<property>
  <name>dfs.qjournal.finalize-segment.timeout.ms</name>
  <value>120000</value>
  <description>
    Quorum timeout in milliseconds during finalizing for a specific
    segment.
  </description>
</property>

<property>
  <name>dfs.qjournal.get-journal-state.timeout.ms</name>
  <value>120000</value>
  <description>
    Timeout in milliseconds when calling getJournalState().
    JournalNodes.
  </description>
</property>

<property>
  <name>dfs.qjournal.new-epoch.timeout.ms</name>
  <value>120000</value>
  <description>
    Timeout in milliseconds when getting an epoch number for write
    access to JournalNodes.
  </description>
</property>

<property>
  <name>dfs.qjournal.prepare-recovery.timeout.ms</name>
  <value>120000</value>
  <description>
    Quorum timeout in milliseconds during preparation phase of
    recovery/synchronization for a specific segment.
  </description>
</property>

<property>
  <name>dfs.qjournal.queued-edits.limit.mb</name>
  <value>10</value>
  <description>
    Queue size in MB for quorum journal edits.
  </description>
</property>

<property>
  <name>dfs.qjournal.select-input-streams.timeout.ms</name>
  <value>20000</value>
  <description>
    Timeout in milliseconds for accepting streams from JournalManagers.
  </description>
</property>

<property>
  <name>dfs.qjournal.start-segment.timeout.ms</name>
  <value>20000</value>
  <description>
    Quorum timeout in milliseconds for starting a log segment.
  </description>
</property>

<property>
  <name>dfs.qjournal.write-txns.timeout.ms</name>
  <value>20000</value>
  <description>
    Write timeout in milliseconds when writing to a quorum of remote
    journals.
  </description>
</property>

<property>
  <name>dfs.quota.by.storage.type.enabled</name>
  <value>true</value>
  <description>
    If true, enables quotas based on storage type.
  </description>
</property>

<property>
  <name>dfs.secondary.namenode.kerberos.principal</name>
  <value></value>
  <description>
    Kerberos principal name for the Secondary NameNode.
  </description>
</property>

<property>
  <name>dfs.secondary.namenode.keytab.file</name>
  <value></value>
  <description>
    Kerberos keytab file for the Secondary NameNode.
  </description>
</property>

<property>
  <name>dfs.web.authentication.filter</name>
  <value>org.apache.hadoop.hdfs.web.AuthFilter</value>
  <description>
    Authentication filter class used for WebHDFS.
  </description>
</property>

<property>
  <name>dfs.web.authentication.simple.anonymous.allowed</name>
  <value></value>
  <description>
    If true, allow anonymous user to access WebHDFS. Set to
    false to disable anonymous authentication.
  </description>
</property>

<property>
  <name>dfs.web.ugi</name>
  <value></value>
  <description>
    dfs.web.ugi is deprecated. Use hadoop.http.staticuser.user instead.
  </description>
</property>

<property>
  <name>dfs.webhdfs.netty.high.watermark</name>
  <value>65535</value>
  <description>
    High watermark configuration to Netty for Datanode WebHdfs.
  </description>
</property>

<property>
  <name>dfs.webhdfs.netty.low.watermark</name>
  <value>32768</value>
  <description>
    Low watermark configuration to Netty for Datanode WebHdfs.
  </description>
</property>

<property>
  <name>dfs.webhdfs.oauth2.access.token.provider</name>
  <value></value>
  <description>
    Access token provider class for WebHDFS using OAuth2.
    Defaults to org.apache.hadoop.hdfs.web.oauth2.ConfCredentialBasedAccessTokenProvider.
  </description>
</property>

<property>
  <name>dfs.webhdfs.oauth2.client.id</name>
  <value></value>
  <description>
    Client id used to obtain access token with either credential or
    refresh token.
  </description>
</property>

<property>
  <name>dfs.webhdfs.oauth2.enabled</name>
  <value>false</value>
  <description>
    If true, enables OAuth2 in WebHDFS
  </description>
</property>

<property>
  <name>dfs.webhdfs.oauth2.refresh.url</name>
  <value></value>
  <description>
    URL against which to post for obtaining bearer token with
    either credential or refresh token.
  </description>
</property>

<property>
  <name>ssl.server.keystore.keypassword</name>
  <value></value>
  <description>
    Keystore key password for HTTPS SSL configuration
  </description>
</property>

<property>
  <name>ssl.server.keystore.location</name>
  <value></value>
  <description>
    Keystore location for HTTPS SSL configuration
  </description>
</property>

<property>
  <name>ssl.server.keystore.password</name>
  <value></value>
  <description>
    Keystore password for HTTPS SSL configuration
  </description>
</property>

<property>
  <name>ssl.server.truststore.location</name>
  <value></value>
  <description>
    Truststore location for HTTPS SSL configuration
  </description>
</property>

<property>
  <name>ssl.server.truststore.password</name>
  <value></value>
  <description>
    Truststore password for HTTPS SSL configuration
  </description>
</property>

<!--Disk baalncer properties-->
  <property>
    <name>dfs.disk.balancer.max.disk.throughputInMBperSec</name>
    <value>10</value>
    <description>Maximum disk bandwidth used by diskbalancer
      during read from a source disk. The unit is MB/sec.
    </description>
  </property>

  <property>
    <name>dfs.disk.balancer.block.tolerance.percent</name>
    <value>10</value>
    <description>
      When a disk balancer copy operation is proceeding, the datanode is still
      active. So it might not be possible to move the exactly specified
      amount of data. So tolerance allows us to define a percentage which
      defines a good enough move.
    </description>
  </property>

  <property>
    <name>dfs.disk.balancer.max.disk.errors</name>
    <value>5</value>
    <description>
      During a block move from a source to destination disk, we might
      encounter various errors. This defines how many errors we can tolerate
      before we declare a move between 2 disks (or a step) has failed.
    </description>
  </property>

  <property>
    <name>dfs.disk.balancer.plan.valid.interval</name>
    <value>1d</value>
    <description>
      Maximum amount of time disk balancer plan is valid. This setting
      supports multiple time unit suffixes as described in
      dfs.heartbeat.interval. If no suffix is specified then milliseconds
      is assumed.
    </description>
  </property>


  <property>
    <name>dfs.disk.balancer.enabled</name>
    <value>true</value>
    <description>
        This enables the diskbalancer feature on a cluster. By default, disk
      balancer is enabled.
    </description>
  </property>

  <property>
    <name>dfs.disk.balancer.plan.threshold.percent</name>
    <value>10</value>
    <description>
      The percentage threshold value for volume Data Density in a plan.
      If the absolute value of volume Data Density which is out of
      threshold value in a node, it means that the volumes corresponding to
      the disks should do the balancing in the plan. The default value is 10.
    </description>
  </property>

  <property>
    <name>dfs.namenode.provided.enabled</name>
    <value>false</value>
    <description>
      Enables the Namenode to handle provided storages.
    </description>
  </property>

  <property>
    <name>dfs.provided.storage.id</name>
    <value>DS-PROVIDED</value>
    <description>
      The storage ID used for provided stores.
    </description>
  </property>

  <property>
    <name>dfs.provided.aliasmap.class</name>
    <value>org.apache.hadoop.hdfs.server.common.blockaliasmap.impl.TextFileRegionAliasMap</value>
    <description>
      The class that is used to specify the input format of the blocks on
      provided storages. The default is
      org.apache.hadoop.hdfs.server.common.blockaliasmap.impl.TextFileRegionAliasMap which uses
      file regions to describe blocks. The file regions are specified as a
      delimited text file. Each file region is a 6-tuple containing the
      block id, remote file path, offset into file, length of block, the
      block pool id containing the block, and the generation stamp of the
      block.
    </description>
  </property>

  <property>
    <name>dfs.provided.aliasmap.inmemory.batch-size</name>
    <value>500</value>
    <description>
      The batch size when iterating over the database backing the aliasmap
    </description>
  </property>

  <property>
    <name>dfs.provided.aliasmap.inmemory.dnrpc-address</name>
    <value>0.0.0.0:50200</value>
    <description>
      The address where the aliasmap server will be running
    </description>
  </property>

  <property>
    <name>dfs.provided.aliasmap.inmemory.leveldb.dir</name>
    <value>/tmp</value>
    <description>
      The directory where the leveldb files will be kept
    </description>
  </property>

  <property>
    <name>dfs.provided.aliasmap.inmemory.enabled</name>
    <value>false</value>
    <description>
      Don't use the aliasmap by default. Some tests will fail
      because they try to start the namenode twice with the
      same parameters if you turn it on.
    </description>
  </property>

  <property>
    <name>dfs.provided.aliasmap.text.delimiter</name>
    <value>,</value>
    <description>
        The delimiter used when the provided block map is specified as
        a text file.
    </description>
  </property>

  <property>
    <name>dfs.provided.aliasmap.text.read.file</name>
    <value></value>
    <description>
        The path specifying the provided block map as a text file, specified as
        a URI.
    </description>
  </property>

  <property>
    <name>dfs.provided.aliasmap.text.codec</name>
    <value></value>
    <description>
        The codec used to de-compress the provided block map.
    </description>
  </property>

  <property>
    <name>dfs.provided.aliasmap.text.write.dir</name>
    <value></value>
    <description>
        The path to which the provided block map should be written as a text
        file, specified as a URI.
    </description>
  </property>

  <property>
    <name>dfs.provided.aliasmap.leveldb.path</name>
    <value></value>
    <description>
      The read/write path for the leveldb-based alias map
      (org.apache.hadoop.hdfs.server.common.blockaliasmap.impl.LevelDBFileRegionAliasMap).
      The path has to be explicitly configured when this alias map is used.
    </description>
  </property>

  <property>
    <name>dfs.provided.aliasmap.load.retries</name>
    <value>0</value>
    <description>
      The number of retries on the Datanode to load the provided aliasmap;
      defaults to 0.
    </description>
  </property>

  <property>
    <name>dfs.lock.suppress.warning.interval</name>
    <value>10s</value>
    <description>Instrumentation reporting long critical sections will suppress
      consecutive warnings within this interval.</description>
  </property>

  <property>
    <name>httpfs.buffer.size</name>
    <value>4096</value>
    <description>
      The size buffer to be used when creating or opening httpfs filesystem IO stream.
    </description>
  </property>

  <property>
    <name>dfs.webhdfs.use.ipc.callq</name>
    <value>true</value>
    <description>Enables routing of webhdfs calls through rpc
      call queue</description>
  </property>

  <property>
    <name>dfs.datanode.disk.check.min.gap</name>
    <value>15m</value>
    <description>
      The minimum gap between two successive checks of the same DataNode
      volume. This setting supports multiple time unit suffixes as described
      in dfs.heartbeat.interval. If no suffix is specified then milliseconds
      is assumed.
    </description>
  </property>

  <property>
    <name>dfs.datanode.disk.check.timeout</name>
    <value>10m</value>
    <description>
      Maximum allowed time for a disk check to complete during DataNode
      startup. If the check does not complete within this time interval
      then the disk is declared as failed. This setting supports
      multiple time unit suffixes as described in dfs.heartbeat.interval.
      If no suffix is specified then milliseconds is assumed.
    </description>
  </property>

  <property>
    <name>dfs.use.dfs.network.topology</name>
    <value>true</value>
    <description>
      Enables DFSNetworkTopology to choose nodes for placing replicas.
      When enabled, NetworkTopology will be instantiated as class defined in
      property dfs.net.topology.impl, otherwise NetworkTopology will be
      instantiated as class defined in property net.topology.impl.
    </description>
  </property>

  <property>
    <name>dfs.net.topology.impl</name>
    <value>org.apache.hadoop.hdfs.net.DFSNetworkTopology</value>
    <description>
      The implementation class of NetworkTopology used in HDFS. By default,
      the class org.apache.hadoop.hdfs.net.DFSNetworkTopology is specified and
      used in block placement.
      This property only works when dfs.use.dfs.network.topology is true.
    </description>
  </property>

  <property>
    <name>dfs.qjm.operations.timeout</name>
    <value>60s</value>
    <description>
      Common key to set timeout for related operations in
      QuorumJournalManager. This setting supports multiple time unit suffixes
      as described in dfs.heartbeat.interval.
      If no suffix is specified then milliseconds is assumed.
    </description>
  </property>

  <property>
    <name>dfs.reformat.disabled</name>
    <value>false</value>
    <description>
      Disable reformat of NameNode. If it's value is set to "true"
      and metadata directories already exist then attempt to format NameNode
      will throw NameNodeFormatException.
    </description>
  </property>
</configuration>
