

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    
    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="icon" href="/favicon.ico">
    <base href="https://hadoop.apache.org">
    <title>Apache Hadoop</title>

    
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

    
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
    <link rel="stylesheet" href="/css/hadoop.css">

    
    
  </head>

  <body>

    <nav class="navbar navbar-inverse navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <img class="navbar-logo" src="/elephant.png">
          <a class="navbar-brand" href="/"> Apache Hadoop</a>
        </div>
        
   <div id="navbar" class="navbar-collapse collapse">
     <ul class="nav navbar-nav">
       
       
          
             <li class=""><a href="releases.html">Download</a></li>
          
       
          
            <li class="dropdown ">
             <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Documentation <span class="caret"></span></a>
             <ul class="dropdown-menu">
               
                  <li ><a href="https://hadoop.apache.org/docs/current/">Latest</a></li>
               
                  <li ><a href="https://hadoop.apache.org/docs/stable/">Stable</a></li>
               
               
               <li role="separator" class="divider"></li>
               
               <li><a href="https://hadoop.apache.org/docs/r3.3.1/">3.3.1</a></li>
               
               <li><a href="https://hadoop.apache.org/docs/r3.2.2/">3.2.2</a></li>
               
               <li><a href="https://hadoop.apache.org/docs/r2.10.1/">2.10.1</a></li>
               
               <li><a href="https://hadoop.apache.org/docs/r3.1.4/">3.1.4</a></li>
               
               <li role="separator" class="divider"></li>
               <li><a href="https://wiki.apache.org/hadoop">Wiki</a></li>
               
             </ul>
           </li>
          
       
          
            <li class="dropdown ">
             <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Community <span class="caret"></span></a>
             <ul class="dropdown-menu">
               
                  <li ><a href="/bylaws.html">Bylaws</a></li>
               
                  <li ><a href="/committer_criteria.html">Criteria for Committership</a></li>
               
                  <li ><a href="/mailing_lists.html">Mailing lists</a></li>
               
                  <li ><a href="/cve_list.html">Published CVEs</a></li>
               
                  <li ><a href="/who.html">Who We are</a></li>
               
               
             </ul>
           </li>
          
       
          
            <li class="dropdown ">
             <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Development <span class="caret"></span></a>
             <ul class="dropdown-menu">
               
                  <li ><a href="https://cwiki.apache.org/confluence/display/HADOOP/How&#43;To&#43;Contribute">How to Contribute</a></li>
               
                  <li ><a href="/issue_tracking.html">Issue Tracking</a></li>
               
                  <li ><a href="/version_control.html">Version Control</a></li>
               
                  <li ><a href="/versioning.html">Versioning</a></li>
               
               
             </ul>
           </li>
          
       
          
            <li class="dropdown ">
             <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Help <span class="caret"></span></a>
             <ul class="dropdown-menu">
               
                  <li ><a href="https://www.cafepress.com/hadoop">Buy Stuff</a></li>
               
                  <li ><a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
               
                  <li ><a href="https://www.apache.org/foundation/thanks.html">Thanks</a></li>
               
               
             </ul>
           </li>
          
       
     </ul>
	  <ul class="nav navbar-nav navbar-right">
      <li>
       <a href="https://www.apache.org/">Apache Software Foundation <span class="glyphicon glyphicon-new-window" aria-hidden="true"></span></a>
      </li>


     </ul>
   </div>

      </div>
    </nav>

<div class="container">

<section id="main">
  <div>
    <h1 id="title">Releases Archive</h1>
        <ul id="list">
            
            <h1><a href="/release/2.7.1.html">Release 2.7.1 (stable) available</a></h1>
            <p><small>2015 Jul 6 </small></p>

            <!---
  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.
-->
<p>A point release for the 2.7 line. This release is now considered stable.</p>
<p>Please see the <a href="https://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-common/releasenotes.html">Hadoop 2.7.1 Release
Notes</a>
for the list of 131 bug fixes and patches since the previous release
2.7.0. Please look at the 2.7.0 section below for the list of enhancements enabled by this first
stable release of 2.7.x.</p>


            
            <h1><a href="/release/2.7.0.html">Release 2.7.0 available</a></h1>
            <p><small>2015 Apr 21 </small></p>

            <!---
  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.
-->
<p>Apache Hadoop 2.7.0 contains a number of significant enhancements. A few
of them are noted below.</p>
<ul>
<li>IMPORTANT notes</li>
<li>This release drops support for JDK6 runtime and works with JDK
7+ only.</li>
<li>This release is not yet ready for production use. Critical
issues are being ironed out via testing and downstream adoption.
Production users should wait for a 2.7.1/2.7.2 release.</li>
<li>Hadoop Common</li>
<li><a href="https://issues.apache.org/jira/browse/HADOOP-9629">HADOOP-9629</a> -
Support Windows Azure Storage - Blob as a file system in Hadoop.</li>
<li>Hadoop HDFS</li>
<li><a href="https://issues.apache.org/jira/browse/HDFS-3107">HDFS-3107</a> -
Support for file truncate</li>
<li><a href="https://issues.apache.org/jira/browse/HDFS-7584">HDFS-7584</a> -
Support for quotas per storage type</li>
<li><a href="https://issues.apache.org/jira/browse/HDFS-3689">HDFS-3689</a> -
Support for files with variable-length blocks</li>
<li>Hadoop YARN</li>
<li><a href="https://issues.apache.org/jira/browse/YARN-3100">YARN-3100</a> -
Make YARN authorization pluggable</li>
<li><a href="https://issues.apache.org/jira/browse/YARN-1492">YARN-1492</a> -
Automatic shared, global caching of YARN localized resources
(beta)</li>
<li>Hadoop MapReduce</li>
<li><a href="https://issues.apache.org/jira/browse/MAPREDUCE-5583">MAPREDUCE-5583</a> -
Ability to limit running Map/Reduce tasks of a job</li>
<li><a href="https://issues.apache.org/jira/browse/MAPREDUCE-4815">MAPREDUCE-4815</a> -
Speed up FileOutputCommitter for very large jobs with many
output files.</li>
</ul>
<p>Please see the <a href="https://hadoop.apache.org/docs/r2.7.0/hadoop-project-dist/hadoop-common/releasenotes.html">Hadoop 2.7.0 Release
Notes</a>
for details.</p>


            
            <h1><a href="/release/2.5.2.html">Release 2.5.2 available</a></h1>
            <p><small>2014 Nov 19 </small></p>

            <!---
  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.
-->
<p>Apache Hadoop 2.5.2 is a point release in the 2.5.x release line, and
fixes a few critical issues in 2.5.1</p>


            
            <h1><a href="/release/2.6.0.html">Release 2.6.0 available</a></h1>
            <p><small>2014 Nov 18 </small></p>

            <!---
  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.
-->
<p>Apache Hadoop 2.6.0 contains a number of significant enhancements such
as:</p>
<ul>
<li>Hadoop Common</li>
<li><a href="https://issues.apache.org/jira/browse/HADOOP-10433">HADOOP-10433</a> -
Key management server (beta)</li>
<li><a href="https://issues.apache.org/jira/browse/HADOOP-10607">HADOOP-10607</a> -
Credential provider (beta)</li>
<li>Hadoop HDFS</li>
<li>Heterogeneous Storage Tiers - Phase 2</li>
<li><a href="https://issues.apache.org/jira/browse/HDFS-5682">HDFS-5682</a> -
Application APIs for heterogeneous storage</li>
<li><a href="https://issues.apache.org/jira/browse/HDFS-7228">HDFS-7228</a> -
SSD storage tier</li>
<li><a href="https://issues.apache.org/jira/browse/HDFS-5851">HDFS-5851</a> -
Memory as a storage tier (beta)</li>
<li><a href="https://issues.apache.org/jira/browse/HDFS-6584">HDFS-6584</a> -
Support for Archival Storage</li>
<li><a href="https://issues.apache.org/jira/browse/HDFS-6134">HDFS-6134</a> -
Transparent data at rest encryption (beta)</li>
<li><a href="https://issues.apache.org/jira/browse/HDFS-2856">HDFS-2856</a> -
Operating secure DataNode without requiring root access</li>
<li><a href="https://issues.apache.org/jira/browse/HDFS-6740">HDFS-6740</a> -
Hot swap drive: support add/remove data node volumes without
restarting data node (beta)</li>
<li><a href="https://issues.apache.org/jira/browse/HDFS-6606">HDFS-6606</a> -
AES support for faster wire encryption</li>
<li>Hadoop YARN</li>
<li><a href="https://issues.apache.org/jira/browse/YARN-896">YARN-896</a> -
Support for long running services in YARN</li>
<li><a href="https://issues.apache.org/jira/browse/YARN-913">YARN-913</a> -
Service Registry for applications</li>
<li><a href="https://issues.apache.org/jira/browse/YARN-666">YARN-666</a> -
Support for rolling upgrades</li>
<li><a href="https://issues.apache.org/jira/browse/YARN-556">YARN-556</a> -
Work-preserving restarts of ResourceManager</li>
<li><a href="https://issues.apache.org/jira/browse/YARN-1336">YARN-1336</a> -
Container-preserving restart of NodeManager</li>
<li><a href="https://issues.apache.org/jira/browse/YARN-796">YARN-796</a> -
Support node labels during scheduling</li>
<li><a href="https://issues.apache.org/jira/browse/YARN-1051">YARN-1051</a> -
Support for time-based resource reservations in Capacity
Scheduler (beta)</li>
<li><a href="https://issues.apache.org/jira/browse/YARN-1964">YARN-1964</a> -
Support running of applications natively in Docker containers
(alpha)</li>
</ul>
<p>Please see the <a href="https://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/releasenotes.html">Hadoop 2.6.0 Release
Notes</a>
for details.</p>


            
            <h1><a href="/release/2.5.1.html">Release 2.5.1 available</a></h1>
            <p><small>2014 Sep 12 </small></p>

            <!---
  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.
-->
<p>Apache Hadoop 2.5.1 is a point release in the 2.5.x release line, and
fixes a few release issues with 2.5.0.</p>


            
            <h1><a href="/release/2.5.0.html">Release 2.5.0 available</a></h1>
            <p><small>2014 Aug 11 </small></p>

            <!---
  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.
-->
<p>Apache Hadoop 2.5.0 is a minor release in the 2.x release line.</p>
<p>The release includes the following major features and improvements:</p>
<ul>
<li>Authentication improvements when using an HTTP proxy server.</li>
<li>A new Hadoop Metrics sink that allows writing directly to Graphite.</li>
<li>Specification for Hadoop Compatible Filesystem effort.</li>
<li>Support for POSIX-style filesystem extended attributes.</li>
<li>OfflineImageViewer to browse an fsimage via the WebHDFS API.</li>
<li>Supportability improvements and bug fixes to the NFS gateway.</li>
<li>Modernized web UIs (HTML5 and Javascript) for HDFS daemons.</li>
<li>YARN&rsquo;s REST APIs support submitting and killing applications.</li>
<li>Kerberos integration for the YARN&rsquo;s timeline store.</li>
<li>FairScheduler allows creating user queues at runtime under any
specified parent queue.</li>
</ul>
<p>Users are encouraged to try out 2.5.0</p>
<p>Please see the <a href="https://hadoop.apache.org/docs/r2.5.0/hadoop-project-dist/hadoop-common/releasenotes.html">Hadoop 2.5.0 Release
Notes</a>
for details.</p>


            
            <h1><a href="/release/2.4.1.html">Release 2.4.1 available</a></h1>
            <p><small>2014 Jun 30 </small></p>

            <!---
  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.
-->
<p>Apache Hadoop 2.4.1 is a bug-fix release for the stable 2.4.x line.</p>
<p>There is also a security bug fix in this minor release.</p>
<ul>
<li>CVE-2014-0229: Add privilege checks to HDFS admin sub-commands
refreshNamenodes, deleteBlockPool and shutdownDatanode.</li>
</ul>
<p>Users are encouraged to immediately move to 2.4.1.</p>
<p>Please see the <a href="https://hadoop.apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-common/releasenotes.html">Hadoop 2.4.1 Release
Notes</a>
for details.</p>


            
            <h1><a href="/release/0.23.11.html">Release 0.23.11 available</a></h1>
            <p><small>2014 Jun 27 </small></p>

            <!---
  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.
-->
<p>A point release for the 0.23.X line. Bug fixes to continue
stabilization.</p>
<p>Please see the <a href="https://hadoop.apache.org/docs/r0.23.11/hadoop-project-dist/hadoop-common/releasenotes.html">Hadoop 0.23.11 Release
Notes</a>
for details.</p>


            
            <h1><a href="/release/2.4.0.html">Release 2.4.0 available</a></h1>
            <p><small>2014 Apr 7 </small></p>

            <!---
  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.
-->
<p>Apache Hadoop 2.4.0 contains a number of significant enhancements such
as:</p>
<ul>
<li>Support for Access Control Lists in HDFS</li>
<li>Native support for Rolling Upgrades in HDFS</li>
<li>Usage of protocol-buffers for HDFS FSImage for smooth operational
upgrades</li>
<li>Complete HTTPS support in HDFS</li>
<li>Support for Automatic Failover of the YARN ResourceManager</li>
<li>Enhanced support for new applications on YARN with Application
History Server and Application Timeline Server</li>
<li>Support for strong SLAs in YARN CapacityScheduler via Preemption</li>
</ul>
<p>Please see the <a href="https://hadoop.apache.org/docs/r2.4.0/hadoop-project-dist/hadoop-common/releasenotes.html">Hadoop 2.4.0 Release
Notes</a>
for details.</p>


            
            <h1><a href="/release/2.3.0.html">Release 2.3.0 available</a></h1>
            <p><small>2014 Feb 20 </small></p>

            <!---
  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.
-->
<p>Apache Hadoop 2.3.0 contains a number of significant enhancements such
as:</p>
<ul>
<li>Support for Heterogeneous Storage hierarchy in HDFS.</li>
<li>In-memory cache for HDFS data with centralized administration and
management.</li>
<li>Simplified distribution of MapReduce binaries via HDFS in YARN
Distributed Cache.</li>
</ul>
<p>Please see the <a href="https://hadoop.apache.org/docs/r2.3.0/hadoop-project-dist/hadoop-common/releasenotes.html">Hadoop 2.3.0 Release
Notes</a>
for details.</p>


            
        </ul>
  </div>

<ul class="pagination">
  <li class="page-item">
    <a href="/release.html" class="page-link" aria-label="First"><span aria-hidden="true">&laquo;&laquo;</span></a>
  </li>
  <li class="page-item">
    <a href="/release/page/4.html" class="page-link" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a>
  </li>
  <li class="page-item">
    <a class="page-link" href="/release.html">1</a>
  </li>
  <li class="page-item">
    <a class="page-link" href="/release/page/2.html">2</a>
  </li>
  <li class="page-item">
    <a class="page-link" href="/release/page/3.html">3</a>
  </li>
  <li class="page-item">
    <a class="page-link" href="/release/page/4.html">4</a>
  </li>
  <li class="page-item active">
    <a class="page-link" href="/release/page/5.html">5</a>
  </li>
  <li class="page-item">
    <a class="page-link" href="/release/page/6.html">6</a>
  </li>
  <li class="page-item disabled">
    <span aria-hidden="true">&nbsp;&hellip;&nbsp;</span>
  </li>
  <li class="page-item">
    <a class="page-link" href="/release/page/11.html">11</a>
  </li>
  <li class="page-item">
    <a href="/release/page/6.html" class="page-link" aria-label="Next"><span aria-hidden="true">&raquo;</span></a>
  </li>
  <li class="page-item">
    <a href="/release/page/11.html" class="page-link" aria-label="Last"><span aria-hidden="true">&raquo;&raquo;</span></a>
  </li>
</ul>


</section>
</div>

<div class="container">
<footer class="footer container">
  <div class="col-md-6">
  <p>Apache Hadoop, Hadoop, Apache, the Apache feather logo,
    and the Apache Hadoop project logo are either registered trademarks or trademarks of the Apache Software Foundation
     in the United States and other countries</p>
  <p>Copyright © 2006-2021 The Apache Software Foundation</p>
  <p><a href="/privacy_policy.html">Privacy policy</a></p>
  </div>
  <div class="col-md-6">
    <img class="img-responsive" src="/asf_logo_wide.png"/>
  </div>
</footer>
</div>
    
    
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script>window.jQuery || document.write('<script src="../../assets/js/vendor/jquery.min.js"><\/script>')</script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
    <script>
    $(function() { $('table').addClass('table table-striped'); })
    </script>

<script type="application/javascript">
var doNotTrack = false;
if (!doNotTrack) {
	(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
	(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
	m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
	})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
	ga('create', 'UA-7453027-1', 'auto');
	
	ga('send', 'pageview');
}
</script>
</body>
</html>

