

<!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  active">
             <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">
<h1>Criteria for Committership</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.
-->
<p>Committers are responsible for reviewing and integrating code changes.
The PMC votes to make a contributor a committer based on an assessment
of their contributions to the project. Contributions can be made in many
ways, and there is no one route to committership. That said, here are
the general criteria that the PMC looks for from all potential
committers:</p>
<ul>
<li>
<p><strong>A history of sustained contribution to the project.</strong> This is a
way for a contributor to demonstrate their expertise in an area, and
thus their ability to help review and commit contributions by others
in that same area. Sustained contribution is also a way of
demonstrating commitment to the project, essentially that someone
will continue contributing even after they become a committer.</p>
</li>
<li>
<p><strong>High-quality contributions.</strong> As experienced contributors,
committers set an example for others in the project, and help
inculcate a culture of high-quality contributions. For code
contributions, this means clean, documented code which includes unit
tests if appropriate and passes precommit checks. For reviews, this
means thorough, actionable feedback, and a +1 vote (even
non-binding) only when there is a high degree of confidence in the
change.</p>
</li>
<li>
<p><strong>Community involvement.</strong> Contributors are always expected to be
polite, constructive, and respectful of others during community
interactions. Disagreement can (and will) happen over technical
issues, but the discussion should remain friendly and focused on
technical merits. Committers also have the additional responsibility
of mentoring newer contributors, as well as helping to grow the
community through actions like responding to emails on the user and
dev list.</p>
</li>
</ul>
<h1 id="example-paths-to-committership">Example Paths to Committership</h1>
<p>Here are a few hypothetical example paths to a commit bit:</p>
<p><em>Han Meimei</em> works at a big company operating a large Apache Hadoop
cluster. While deploying the newest version of Hadoop to her staging
cluster, she discovers a number of bugs and performance regressions. She
files JIRAs for these issues, and is able to post patches for some of
them. On the remaining JIRAs, she works with other community members by
doing additional debugging on her cluster and testing and reviewing
intermediate patches. Additionally, Han Meimei works with the release
manager of the release line, <em>Lei Li</em>, to make sure critical issues are
backported to the next maintenance release. Han Meimei also makes an
effort to help fix and review other critical issues targeted at the next
maintenance release, even though her cluster is not currently affected.
She continues doing similar stabilization work for subsequent
maintenance releases in this release line, demonstrating her commitment
to shipping high-quality upstream releases.</p>
<p><em>Elise</em> works at a commercial big data vendor as a developer. Elise
ramps up by doing some newbie JIRAs, but then gets involved with a large
cross-company development effort happening on a feature branch. Elise
helps to review the design of the feature, providing constructive
feedback, and works with other community members to divide the work into
subtasks. At this point, the PMC grants Elise branch committership to
accelerate development. Elise submits good patches for a number of
subtasks, and shows care and thoroughness when reviewing and committing
code of others. After the feature branch is later merged to trunk, Elise
continues to find and fix bugs related to the feature, as well as
reviewing code contributions from others.</p>
<p><em>Raj</em> works as a test engineer at a commercial big data vendor. Raj
notices the lack of integration testing upstream, and contributes a test
harness for fault-injection testing which is committed to the project.
Raj coordinates with the PMC to get the test harness running on Apache
infrastructure, and starts triaging the output and filing JIRAs for
relevant bugs with reproductions. Raj helps with gathering logs and
reproducing issues, and continues making improvements to the test
harness.</p>
<p><em>Peter</em> is a technical writer interested in improving Hadoop&rsquo;s
documentation. He starts by fixing outdated information and incorrect
examples, reaching out to subject matter experts and exploring the
codebase to clarify technical details. As Peter becomes more familiar
with the set of documentation, he realizes that a newly contributed
feature didn&rsquo;t include sufficient documentation, and contributes a guide
on how to setup and use the feature that also explains some of the
design decisions that influenced API design. Peter continues to broaden
his doc contributions to more and more areas, and also is active
answering user questions on the mailing list. This demonstrates his
knowledge of the project, attention to detail, and also his user-focus.</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>

