

<!DOCTYPE html>
<html lang="en">
  <head>
	<meta name="generator" content="Hugo 0.101.0" />
    <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="http://apache.github.io/hadoop/">Current (trunk)</a></li>
               
                  <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.4.0/">3.4.0</a></li>
               
               <li><a href="https://hadoop.apache.org/docs/r3.3.6/">3.3.6</a></li>
               
               <li><a href="https://hadoop.apache.org/docs/r2.10.2/">2.10.2</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="jumbotron">
      <div class="container">
        
        <!---
  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><img src="hadoop-logo.jpg" alt="hadoop-logo"> Apache Hadoop</p>
<p>The Apache® Hadoop® project develops open-source software for reliable, scalable, distributed computing.</p>
<p>The Apache Hadoop software library is a framework that allows for the distributed processing of large data sets across clusters of computers using simple programming models. It is designed to scale up from single servers to thousands of machines, each offering local computation and storage. Rather than rely on hardware to deliver high-availability, the library itself is designed to detect and handle failures at the application layer, so delivering a highly-available service on top of a cluster of computers, each of which may be prone to failures.</p>

        
        <p>
          <a class="btn btn-primary btn-lg" href="https://hadoop.apache.org/docs/stable" role="button">Learn more &raquo;</a>
          <a class="btn btn-warning btn-lg" href="/releases.html" role="button">Download &raquo;</a>
          <a class="btn btn-success btn-lg" href="https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html" role="button">Getting started &raquo;</a>
        </p>
      </div>
    </div>

    <div class="container">
      
      <div class="row">
        <div class="col-md-4">
          <h2>Latest news</h2>
            <div class="col-md-12">
            
            <div class="panel panel-default">
               <div class="panel-heading clearfix"><a class="pull-left" href=/release/3.4.0.html>Release 3.4.0 available</a> <small class="pull-right">2024 Mar 17 </small></div>
               <div class="panel-body">
                  <!---
  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 first release of Apache Hadoop 3.4 line. It contains 2888 bug fixes, improvements and enhancements since 3.3.</p>
<p>Users are encouraged to read the <a href="/docs/r3.4.0/index.html">overview of major changes</a>.
For details of please check <a href="http://hadoop.apache.org/docs/r3.4.0/hadoop-project-dist/hadoop-common/release/3.4.0/RELEASENOTES.3.4.0.html">release notes</a> and <a href="http://hadoop.apache.org/docs/r3.4.0/hadoop-project-dist/hadoop-common/release/3.4.0/CHANGELOG.3.4.0.html">changelog</a>.</p>

               </div>
              </div>
            
            <div class="panel panel-default">
               <div class="panel-heading clearfix"><a class="pull-left" href=/release/3.3.6.html>Release 3.3.6 available</a> <small class="pull-right">2023 Jun 23 </small></div>
               <div class="panel-body">
                  <!---
  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 release of Apache Hadoop 3.3 line.</p>
<p>It contains 117 bug fixes, improvements and enhancements since 3.3.5.
Users of Apache Hadoop 3.3.5 and earlier should upgrade to this release.</p>
<p>Feature highlights:</p>
<h2 id="sbom-artifacts">SBOM artifacts</h2>
<p>Starting from this release, Hadoop publishes Software Bill of Materials (SBOM) using
CycloneDX Maven plugin. For more information on SBOM, please go to
<a href="https://cwiki.apache.org/confluence/display/COMDEV/SBOM">SBOM</a>.</p>
<h2 id="hdfs-rbf-rdbms-based-token-storage-support">HDFS RBF: RDBMS based token storage support</h2>
<p>HDFS Router-Router Based Federation now supports storing delegation tokens on MySQL,
<a href="https://issues.apache.org/jira/browse/HADOOP-18535">HADOOP-18535</a>
which improves token operation through over the original Zookeeper-based implementation.</p>
<h2 id="new-file-system-apis">New File System APIs</h2>
<p><a href="https://issues.apache.org/jira/browse/HADOOP-18671">HADOOP-18671</a> moved a number of
HDFS-specific APIs to Hadoop Common to make it possible for certain applications that
depend on HDFS semantics to run on other Hadoop compatible file systems.</p>
<p>In particular, recoverLease() and isFileClosed() are exposed through LeaseRecoverable
interface, while setSafeMode() is exposed through SafeMode interface.</p>
<p>Users are encouraged to read the <a href="/docs/r3.3.6/index.html">overview of major changes</a> since release 3.3.5.
For details of 117 bug fixes, improvements, and other enhancements since the previous 3.3.5 release,
please check <a href="http://hadoop.apache.org/docs/r3.3.6/hadoop-project-dist/hadoop-common/release/3.3.6/RELEASENOTES.3.3.6.html">release notes</a> and <a href="http://hadoop.apache.org/docs/r3.3.6/hadoop-project-dist/hadoop-common/release/3.3.6/CHANGELOG.3.3.6.html">changelog</a>.</p>

               </div>
              </div>
            
            <div class="panel panel-default">
               <div class="panel-heading clearfix"><a class="pull-left" href=/release/3.3.5.html>Release 3.3.5 available</a> <small class="pull-right">2023 Mar 22 </small></div>
               <div class="panel-body">
                  <!---
  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 release of Apache Hadoop 3.3 line.</p>
<p>Key changes include</p>
<ul>
<li>A big update of dependencies to try and keep those reports of
transitive CVEs under control -both genuine and false positives.</li>
<li>Critical fix to ABFS input stream prefetching for correct reading.</li>
<li>Vectored IO API for all FSDataInputStream implementations, with
high-performance versions for file:// and s3a:// filesystems.
file:// through java native IO
s3a:// parallel GET requests.</li>
<li>Arm64 binaries. Note, because the arm64 release was on a different
platform, the jar files may not match those of the x86
release -and therefore the maven artifacts.</li>
<li>Security fixes in Hadoop&rsquo;s own code.</li>
</ul>
<p>Users of Apache Hadoop 3.3.4 and earlier should upgrade to
this release.</p>
<p>All users are encouraged to read the <a href="http://hadoop.apache.org/docs/r3.3.5/index.html">overview of major changes</a>
since release 3.3.4.</p>
<p>For details of bug fixes, improvements, and other enhancements since
the previous 3.3.4 release, please check <a href="http://hadoop.apache.org/docs/r3.3.5/hadoop-project-dist/hadoop-common/release/3.3.5/RELEASENOTES.3.3.5.html">release notes</a>
and <a href="http://hadoop.apache.org/docs/r3.3.5/hadoop-project-dist/hadoop-common/release/3.3.5/CHANGELOG.3.3.5.html">changelog</a>.</p>
<h2 id="azure-abfs-critical-stream-prefetch-fix">Azure ABFS: Critical Stream Prefetch Fix</h2>
<p>The ABFS connector has a critical bug fix
<a href="https://issues.apache.org/jira/browse/HADOOP-18546">https://issues.apache.org/jira/browse/HADOOP-18546</a>:
<em>ABFS. Disable purging list of in-progress reads in abfs stream close().</em></p>
<p>All users of the abfs connector in hadoop releases 3.3.2+ MUST either upgrade
to this release or disable prefetching by setting
<code>fs.azure.readaheadqueue.depth</code> to <code>0</code>.</p>

               </div>
              </div>
            
            <div class="panel panel-default">
               <div class="panel-heading clearfix"><a class="pull-left" href=/release/3.3.4.html>Release 3.3.4 available</a> <small class="pull-right">2022 Aug 8 </small></div>
               <div class="panel-body">
                  <!---
  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 release of Apache Hadoop 3.3 line.</p>
<p>It contains a small number security and critical integration fixes since 3.3.3.</p>
<p>Users of Apache Hadoop 3.3.3 should upgrade to this release.</p>
<p>Users of hadoop 2.x and hadoop 3.2 should also upgrade to the 3.3.x line.
As well as feature enhancements, this is the sole branch currently
receiving fixes for anything other than critical security/data integrity
issues.</p>
<p>Users are encouraged to read the <a href="/docs/r3.3.4/index.html">overview of major changes</a> since release 3.3.3.
For details of bug fixes, improvements, and other enhancements since the previous 3.3.3 release,
please check <a href="http://hadoop.apache.org/docs/r3.3.4/hadoop-project-dist/hadoop-common/release/3.3.4/RELEASENOTES.3.3.4.html">release notes</a> and <a href="http://hadoop.apache.org/docs/r3.3.4/hadoop-project-dist/hadoop-common/release/3.3.4/CHANGELOG.3.3.4.html">changelog</a>.</p>

               </div>
              </div>
            
            <div class="panel panel-default">
               <div class="panel-heading clearfix"><a class="pull-left" href=/release/3.2.4.html>Release 3.2.4 available</a> <small class="pull-right">2022 Jul 22 </small></div>
               <div class="panel-body">
                  <!---
  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 third stable release of Apache Hadoop 3.2 line.</p>
<p>It contains 153 bug fixes, improvements and enhancements since 3.2.3.</p>
<p>Users are encouraged to read the <a href="/docs/r3.2.4/index.html">overview of major changes</a> since 3.2.3.
For details of 153 bug fixes, improvements, and other enhancements since the previous 3.2.3 release,
please check <a href="http://hadoop.apache.org/docs/r3.2.4/hadoop-project-dist/hadoop-common/release/3.2.4/RELEASENOTES.3.2.4.html">release notes</a> and <a href="http://hadoop.apache.org/docs/r3.2.4/hadoop-project-dist/hadoop-common/release/3.2.4/CHANGELOG.3.2.4.html">changelog</a>.</p>

               </div>
              </div>
            
            <p><a class="next" href="/release.html">Release archive &rarr;</a></p>
            <p><a class="next" href="/news.html">News archive &rarr;</a></p>
          </div>
       </div>
        <div class="col-md-4">
          
          <h2>Modules</h2>
          <!---
  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>The project includes these modules:</p>
<ul>
<li><strong>Hadoop Common</strong>: The common utilities that support the other Hadoop modules.</li>
<li><strong>Hadoop Distributed File System (HDFS™)</strong>: A distributed file system that provides high-throughput access to application data.</li>
<li><strong>Hadoop YARN</strong>: A framework for job scheduling and cluster resource management.</li>
<li><strong>Hadoop MapReduce</strong>: A YARN-based system for parallel processing of large data sets.</li>
</ul>

          
          <h2>Who Uses Hadoop?</h2>
          <p>
            A wide variety of companies and organizations use Hadoop for both research and production.
             Users are encouraged to add themselves to the Hadoop <a href="https://wiki.apache.org/hadoop2/PoweredBy">PoweredBy wiki page</a>.</p>
       </div>
       <div class="col-md-4">
         
         <h2>Related projects</h2>
         <!---
  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>Other Hadoop-related projects at Apache include:</p>
<ul>
<li><a href="https://ambari.apache.org"><strong>Ambari™</strong></a>: A web-based tool for provisioning,
managing, and monitoring Apache Hadoop clusters which includes
support for Hadoop HDFS, Hadoop MapReduce, Hive, HCatalog, HBase,
ZooKeeper, Oozie, Pig and Sqoop. Ambari also provides a dashboard
for viewing cluster health such as heatmaps and ability to view
MapReduce, Pig and Hive applications visually alongwith features to
diagnose their performance characteristics in a user-friendly
manner.</li>
<li><a href="https://avro.apache.org"><strong>Avro™</strong></a>: A data serialization system.</li>
<li><a href="https://cassandra.apache.org/"><strong>Cassandra™</strong></a>: A scalable multi-master database
with no single points of failure.</li>
<li><a href="https://chukwa.apache.org/"><strong>Chukwa™</strong></a>: A data collection system for managing
large distributed systems.</li>
<li><a href="https://hbase.apache.org/"><strong>HBase™</strong></a>: A scalable, distributed database that
supports structured data storage for large tables.</li>
<li><a href="https://hive.apache.org/"><strong>Hive™</strong></a>: A data warehouse infrastructure that provides
data summarization and ad hoc querying.</li>
<li><a href="https://mahout.apache.org/"><strong>Mahout™</strong></a>: A Scalable machine learning and data
mining library.</li>
<li><a href="https://ozone.apache.org/"><strong>Ozone™</strong></a>: A scalable, redundant, and
distributed object store for Hadoop.</li>
<li><a href="https://pig.apache.org"><strong>Pig™</strong></a>: A high-level data-flow language and execution
framework for parallel computation.</li>
<li><a href="https://spark.apache.org"><strong>Spark™</strong></a>: A fast and general compute engine for
Hadoop data. Spark provides a simple and expressive programming
model that supports a wide range of applications, including ETL,
machine learning, stream processing, and graph computation.</li>
<li><a href="https://submarine.apache.org"><strong>Submarine</strong></a>: A unified AI platform which allows
engineers and data scientists to run Machine Learning and Deep Learning workload in
distributed cluster.</li>
<li><a href="https://tez.apache.org"><strong>Tez™</strong></a>: A generalized data-flow programming framework,
built on Hadoop YARN, which provides a powerful and flexible engine
to execute an arbitrary DAG of tasks to process data for both batch
and interactive use-cases. Tez is being adopted by Hive™, Pig™ and
other frameworks in the Hadoop ecosystem, and also by other
commercial software (e.g. ETL tools), to replace Hadoop™ MapReduce
as the underlying execution engine.</li>
<li><a href="https://zookeeper.apache.org"><strong>ZooKeeper™</strong></a>: A high-performance coordination
service for distributed applications.</li>
</ul>

         
        </div>
      </div>

      <hr>


    </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-2024 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>

