

<!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.0.4-alpha.html">Release 2.0.4-alpha available</a></h1>
            <p><small>2013 Apr 25 </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>This release delivers a number of critical bug-fixes for hadoop-2.x
uncovered during integration testing.</p>
<p>Please see the <a href="https://hadoop.apache.org/docs/r2.0.4-alpha/hadoop-project-dist/hadoop-common/releasenotes.html">Hadoop 2.0.4-alpha Release
Notes</a>
for details.</p>


            
            <h1><a href="/release/0.23.7.html">Release 0.23.7 available</a></h1>
            <p><small>2013 Apr 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>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.7/hadoop-project-dist/hadoop-common/releasenotes.html">Hadoop 0.23.7 Release
Notes</a>
for details.</p>


            
            <h1><a href="/release/1.1.2.html">Release 1.1.2 available</a></h1>
            <p><small>2013 Feb 15 </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>Point release for the 1.1.X line. Bug fixes and improvements, as
documented in the <a href="https://hadoop.apache.org/docs/r1.1.2/releasenotes.html">Hadoop 1.1.2 Release
Notes</a>.</p>


            
            <h1><a href="/release/2.0.3-alpha.html">Release 2.0.3-alpha available</a></h1>
            <p><small>2013 Feb 14 </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>This is the latest (alpha) version in the hadoop-2.x series.</p>
<p>This release delivers significant major features and stability over
previous releases in hadoop-2.x series:</p>
<ul>
<li>QJM for HDFS HA for NameNode</li>
<li>Multi-resource scheduling (CPU and memory) for YARN</li>
<li>YARN ResourceManager Restart</li>
<li>Significant stability at scale for YARN (over 30,000 nodes and 14
million applications so far, at time of release)</li>
</ul>
<p>This release, like previous releases in hadoop-2.x series is still
considered <em>alpha</em> primarily since some of APIs aren&rsquo;t fully-baked and
we expect some churn in future. Furthermore, please note that there are
some API changes from previous hadoop-2.0.2-alpha release and
applications will need to recompile against hadoop-2.0.3-alpha.</p>
<p>Please see the <a href="https://hadoop.apache.org/docs/r2.0.3-alpha/hadoop-project-dist/hadoop-common/releasenotes.html">Hadoop 2.0.3-alpha Release
Notes</a>
for details.</p>


            
            <h1><a href="/release/0.23.6.html">Release 0.23.6 available</a></h1>
            <p><small>2013 Feb 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>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.6/hadoop-project-dist/hadoop-common/releasenotes.html">Hadoop 0.23.6 Release
Notes</a>
for details.</p>


            
            <h1><a href="/release/1.1.1.html">Release 1.1.1 available</a></h1>
            <p><small>2012 Dec 1 </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>Point release for the 1.1.X line. Bug fixes and improvements, as
documented in the <a href="https://hadoop.apache.org/docs/r1.1.1/releasenotes.html">Hadoop 1.1.1 Release
Notes</a>.</p>


            
            <h1><a href="/release/0.23.5.html">Release 0.23.5 available</a></h1>
            <p><small>2012 Nov 28 </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.5/hadoop-project-dist/hadoop-common/releasenotes.html">Hadoop 0.23.5 Release
Notes</a>
for details.</p>


            
            <h1><a href="/release/0.23.4.html">Release 0.23.4 available</a></h1>
            <p><small>2012 Oct 15 </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. Most notably this release now
incluses support for upgrading a 1.X HDFS cluster with append/synch
enabled.</p>
<p>Please see the <a href="https://hadoop.apache.org/docs/r0.23.4/hadoop-project-dist/hadoop-common/releasenotes.html">Hadoop 0.23.4 Release
Notes</a>
for details.</p>


            
            <h1><a href="/release/1.1.0.html">Release 1.1.0 available</a></h1>
            <p><small>2012 Oct 13 </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>This is a beta release for version 1.1.</p>
<p>This release has approximately 135 enhancements and bug fixes compared
to Hadoop-1.0.4, including:</p>
<ul>
<li>Many performance improvements in HDFS, backported from trunk</li>
<li>Improvements in Security to use SPNEGO instead of Kerberized SSL for
HTTP transactions</li>
<li>Lower default minimum heartbeat for task trackers from 3 sec to
300msec to increase job throughput on small clusters</li>
<li>Port of Gridmix v3</li>
<li>Set MALLOC_ARENA_MAX in hadoop-config.sh to resolve problems with
glibc in RHEL-6</li>
<li>Splittable bzip2 files</li>
<li>Of course it also has the same security fix as release 1.0.4.</li>
</ul>
<p>Please see the <a href="https://hadoop.apache.org/docs/r1.1.0/releasenotes.html">Hadoop 1.1.0 Release
Notes</a> for
details.</p>


            
            <h1><a href="/release/1.0.4.html">Release 1.0.4 available</a></h1>
            <p><small>2012 Oct 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>This is a Security Patch release for version 1.0.</p>
<p>There are four bug fixes and feature enhancements in this minor release:</p>
<ul>
<li>Security issue CVE-2012-4449: Hadoop tokens use a 20-bit secret</li>
<li>HADOOP-7154 - set MALLOC_ARENA_MAX in hadoop-config.sh to resolve
problems with glibc in RHEL-6</li>
<li>HDFS-3652 - FSEditLog failure removes the wrong edit stream when
storage dirs have same name</li>
<li>MAPREDUCE-4399 - Fix (up to 3x) performance regression in shuffle</li>
</ul>
<p>Please see the <a href="https://hadoop.apache.org/docs/r1.0.4/releasenotes.html">Hadoop 1.0.4 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/6.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 disabled">
    <span aria-hidden="true">&nbsp;&hellip;&nbsp;</span>
  </li>
  <li class="page-item">
    <a class="page-link" href="/release/page/6.html">6</a>
  </li>
  <li class="page-item active">
    <a class="page-link" href="/release/page/7.html">7</a>
  </li>
  <li class="page-item">
    <a class="page-link" href="/release/page/8.html">8</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/8.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>

