

<!DOCTYPE html>
<html lang="en">
  <head>
	<meta name="generator" content="Hugo 0.83.1" />
    <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="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.3.1.html>Release 3.3.1 available</a> <small class="pull-right">2021 Jun 15 </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 stable release of Apache Hadoop 3.3.x line. It contains 697 bug fixes, improvements and enhancements since 3.3.0.</p>
<p>Users are encouraged to read the <a href="/docs/r3.3.1/index.html">overview of major changes</a> since 3.3.0.
For details of 697 bug fixes, improvements, and other enhancements since the previous 3.3.0 release,
please check <a href="http://hadoop.apache.org/docs/r3.3.1/hadoop-project-dist/hadoop-common/release/3.3.1/RELEASENOTES.3.3.1.html">release notes</a> and <a href="http://hadoop.apache.org/docs/r3.3.1/hadoop-project-dist/hadoop-common/release/3.3.1/CHANGES.3.3.1.html">changelog</a>
detail the changes since 3.3.0.</p>

               </div>
              </div>
            
            <div class="panel panel-default">
               <div class="panel-heading clearfix"><a class="pull-left" href=/news/2021-04-17-ozone-1.1.0.html>Ozone 1.1.0 is released</a> <small class="pull-right">2021 Apr 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>General available(GA) release of Apache Hadoop Ozone with Volume/Bucket Quota Support, Security related enhancements, ofs/o3fs performance improvements, Recon improvements etc.</p>
<p>For more information check the <a href="https://hadoop.apache.org/ozone/release/1.1.0/">ozone site</a>.</p>

               </div>
              </div>
            
            <div class="panel panel-default">
               <div class="panel-heading clearfix"><a class="pull-left" href=/release/3.2.2.html>Release 3.2.2 available</a> <small class="pull-right">2021 Jan 9 </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 second stable release of Apache Hadoop 3.2 line. It contains 516 bug fixes, improvements and enhancements since 3.2.1.</p>
<p>Users are encouraged to read the <a href="/docs/r3.2.2/index.html">overview of major changes</a> since 3.2.1.
For details of 516 bug fixes, improvements, and other enhancements since the previous 3.2.1 release,
please check <a href="http://hadoop.apache.org/docs/r3.2.2/hadoop-project-dist/hadoop-common/release/3.2.2/RELEASENOTES.3.2.2.html">release notes</a> and <a href="http://hadoop.apache.org/docs/r3.2.2/hadoop-project-dist/hadoop-common/release/3.2.2/CHANGELOG.3.2.2.html">changelog</a>
detail the changes since 3.2.1.</p>

               </div>
              </div>
            
            <div class="panel panel-default">
               <div class="panel-heading clearfix"><a class="pull-left" href=/release/2.10.1.html>Release 2.10.1 available</a> <small class="pull-right">2020 Sep 21 </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 second stable release of Apache Hadoop 2.10 line. It contains 218 bug fixes, improvements and enhancements since 2.10.0.</p>
<p>Users are encouraged to read the <a href="/docs/r2.10.1/index.html">overview of major changes</a> since 2.10.0.
For details of 218 bug fixes, improvements, and other enhancements since the previous 2.10.0 release,
please check <a href="http://hadoop.apache.org/docs/r2.10.1/hadoop-project-dist/hadoop-common/release/2.10.1/RELEASENOTES.2.10.1.html">release notes</a> and <a href="http://hadoop.apache.org/docs/r2.10.1/hadoop-project-dist/hadoop-common/release/2.10.1/CHANGES.2.10.1.html">changelog</a>
detail the changes since 2.10.0.</p>

               </div>
              </div>
            
            <div class="panel panel-default">
               <div class="panel-heading clearfix"><a class="pull-left" href=/news/2020-09-02-ozone-1.0.0.html>Ozone 1.0.0 is released</a> <small class="pull-right">2020 Sep 2 </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>First general available(GA) release of Apache Hadoop Ozone with OM HA, OFS, Security phase II, Ozone Filesystem performance improvement, security enabled Hadoop 2.x support, bucket link, Recon / Recon UI improvment, etc.</p>
<p>For more information check the <a href="https://hadoop.apache.org/ozone/release/1.0.0/">ozone site</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>
<li><strong><a href="https://hadoop.apache.org/ozone/">Hadoop Ozone</a></strong>: An object store for Hadoop.</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/hadoop/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://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-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>

