

<!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  active">
             <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">
<h1>Apache Hadoop Release Versioning</h1>
<!---
  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.
-->
<h2 id="background">Background</h2>
<p>Apache Hadoop uses a version format of
<strong>&lt;major&gt;.&lt;minor&gt;.&lt;maintenance&gt;</strong>, where each version
component is a numeric value. Versions can also have additional suffixes
like <em>&quot;-alpha2&quot;</em> or <em>&quot;-beta1&quot;</em>, which denote the API compatibility
guarantees and quality of the release. We use <em>&ldquo;a.b.c&rdquo;</em> and <em>&ldquo;x.y.z&rdquo;</em> to
denote a dotted version triplet.</p>
<p>Major versions are used to introduce substantial, potentially
incompatible, changes. Examples of this include the replacement of
MapReduce 1 with YARN and MapReduce 2 in Hadoop 2, and the required Java
runtime version from JDK7 to JDK8 in Hadoop 3.</p>
<p>Minor versions are used to introduce new compatible features within a
major release line.</p>
<p>Maintenance releases include bug fixes or low-risk supportability
changes.</p>
<p>Hadoop&rsquo;s versioning scheme has evolved over the years. The early days of
0.20.2 leading up to the 1.y releases saw a <a href="http://blog.cloudera.com/blog/2012/01/an-update-on-apache-hadoop-1-0/">plethora of parallel
releases</a>
with different featuresets. Release activities coalesced in the early
2.y release era, with a mostly linear progression of releases from 2.0.0
through 2.7.0.</p>
<p>However, the ongoing maintenance of the 2.6.z and 2.7.z re-introduced
parallel active release lines to Hadoop. Additional plans for 2.8.z and
3.0.z releases mean potentially four active release lines, necessitating
clarification on Hadoop versioning and how it affects these parallel
release branches.</p>
<h2 id="versioning-rules">Versioning rules</h2>
<p>To establish a common foundation of knowledge, we require the following
in terms of release versions.</p>
<ul>
<li>For <strong>a.b.c</strong> (maintenance) releases, the &ldquo;c&quot;s need to be released
in order.</li>
<li>For <strong>a.b.0</strong> (minor) releases, the &ldquo;b&quot;s need to be released in
order.</li>
<li>For <strong>a.0.0</strong> (major) releases, it comes after a specific x.y.0
minor release.</li>
</ul>
<p>This means that new major releases need to be coordinated with the
previous minor release. New minor and maintenance releases only require
coordination within their release line.</p>
<p><em>&quot;-alphaX&rdquo;</em> and <em>&quot;-betaX&rdquo;</em> suffixed version can be treated as a.b.c
versions, with the first (e.g. <em>&quot;-alpha1&quot;</em>) being the a.b.0 release.</p>
<p>When it comes to setting fix versions, this policy is encoded by the
following set of rules:</p>
<ol>
<li>For each <strong>minor</strong> release line, set the <strong>lowest unreleased a.b.c
version, where c ≥ 0</strong>.</li>
<li>For each <strong>major</strong> release line, set the <strong>lowest unreleased a.b.0
version</strong>.</li>
</ol>
<h2 id="example">Example</h2>
<p>As an example, as of August 3rd, 2016, the latest releases in the 2.6.x
and 2.7.x lines are 2.6.4 and 2.7.2. We have also cut the following
branches for planned future releases: branch-2.7.3, branch-2.8, and
branch-3.0.0-alpha1.</p>
<p>If we are committing a bugfix that is intended for the 2.6.5 release, we
would commit to:</p>
<ol>
<li>trunk (3.0.0-alpha2)</li>
<li>branch-3.0.0-alpha1 (3.0.0-alpha1)</li>
<li>branch-2 (2.9.0)</li>
<li>branch-2.8 (2.8.0)</li>
<li>branch-2.7 (2.7.4)</li>
<li>branch-2.7.3 (2.7.3)</li>
<li>branch-2.6 (2.6.5)</li>
</ol>
<p>Applying the above rules for setting fix versions:</p>
<ol>
<li>Rule 1: 2.6.z and 2.7.z are both minor release lines, so set
<strong>2.6.5</strong> and <strong>2.7.3</strong></li>
<li>Rule 2: 2.y.z and 3.y.z the major release lines, so set <strong>2.8.0</strong>
and <strong>3.0.0-alpha1</strong></li>
</ol>
<p>Note that when backporting changes, we always make sure to backport to
the next higher release in a release line. For instance, we make sure to
backport to branch-2.7 (2.7.4) when backporting to branch-2.7.3 (2.7.3),
and to branch-2 (2.9.0) when backporting to branch-2.8 (2.8.0). This
preserves the monotonicity of releases.</p>

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

