<!---
  Licensed 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. See accompanying LICENSE file.
-->

Apache Hadoop ${project.version}
================================

Apache Hadoop ${project.version} is a minor release in the 2.x.y release
line, building upon the previous stable release 2.9.2.

Here is a short overview of the major features and improvements.

*   HDFS

    *   Consistent reads from standby node. This allows better load balancing on HDFS
        clusters, especially those with a high read/write operation ratio. See
        [HDFS-12943](https://jira.apache.org/jira/browse/HDFS-12943) and
        [HDFS-14204](https://jira.apache.org/jira/browse/HDFS-14204) for more details.

    *   Improvements related to rolling upgrade support from 2.x to 3.x.

    *   NameNode port based selective encryption. This allows enforcing different security
        constraints for different types of traffic. See [HDFS-13541](https://issues.apache.org/jira/browse/HDFS-13541)
        for more details.

    *   Cost-based fair call queue. This improves fairness and stability in a large, multi-tenant
        HDFS cluster. See [HDFS-14403](https://issues.apache.org/jira/browse/HDFS-14403) for more details.

*   YARN

    *   Support for user-defined countable resource types beyond CPU and memory. This was
        ported from the 3.x.y release line. See [YARN-3926](https://issues.apache.org/jira/browse/YARN-3926),
        [YARN-8200](https://issues.apache.org/jira/browse/YARN-8200),
        and the [YARN resource model documentation](./hadoop-yarn/hadoop-yarn-site/ResourceProfiles.html) for
        more information.

    *   Native support for GPUs as a schedulable resource type. This builds on the above, and was also ported
        from the 3.x.y release line. See [YARN-6223](https://issues.apache.org/jira/browse/YARN-6223) and
        [YARN-8200](https://issues.apache.org/jira/browse/YARN-8200) for more information.

Getting Started
===============

The Hadoop documentation includes the information you need to get started using
Hadoop. Begin with the
[Single Node Setup](./hadoop-project-dist/hadoop-common/SingleCluster.html) which
shows you how to set up a single-node Hadoop installation. Then move on to the
[Cluster Setup](./hadoop-project-dist/hadoop-common/ClusterSetup.html) to learn how
to set up a multi-node Hadoop installation.
