You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by jd...@apache.org on 2016/04/11 18:28:13 UTC

[08/45] incubator-kudu git commit: Add 0.8.0 docs

http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/c78a2f80/releases/0.8.0/docs/contributing.html
----------------------------------------------------------------------
diff --git a/releases/0.8.0/docs/contributing.html b/releases/0.8.0/docs/contributing.html
new file mode 100644
index 0000000..3c0f0e8
--- /dev/null
+++ b/releases/0.8.0/docs/contributing.html
@@ -0,0 +1,640 @@
+---
+title: Contributing to Apache Kudu (incubating)
+layout: default
+active_nav: docs
+last_updated: 'Last updated 2016-04-11 08:31:49 PDT'
+---
+<!--
+
+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.
+-->
+
+
+<div class="container">
+  <div class="row">
+    <div class="col-md-9">
+
+<h1>Contributing to Apache Kudu (incubating)</h1>
+      <div class="sect1">
+<h2 id="_contributing_patches_using_gerrit"><a class="link" href="#_contributing_patches_using_gerrit">Contributing Patches Using Gerrit</a></h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>The Kudu team uses Gerrit for code review, rather than Github pull requests. Typically,
+you pull from Github but push to Gerrit, and Gerrit is used to review code and merge
+it into Github.</p>
+</div>
+<div class="paragraph">
+<p>See the <a href="https://www.mediawiki.org/wiki/Gerrit/Tutorial">Gerrit Tutorial</a>
+for an overview of using Gerrit for code review.</p>
+</div>
+<div class="sect2">
+<h3 id="_initial_setup_for_gerrit"><a class="link" href="#_initial_setup_for_gerrit">Initial Setup for Gerrit</a></h3>
+<div class="olist arabic">
+<ol class="arabic">
+<li>
+<p>Sign in to <a href="http://gerrit.cloudera.org:8080">Gerrit</a> using your Github username.</p>
+</li>
+<li>
+<p>Go to <a href="http://gerrit.cloudera.org:8080/#/settings/">Settings</a>. Update your name
+and email address on the <strong>Contact Information</strong> page, and upload a SSH public key.
+If you do not update your name, it will show up as "Anonymous Coward" in Gerrit reviews.</p>
+</li>
+<li>
+<p>If you have not done so, clone the main Kudu repository. By default, the main remote
+is called <code>origin</code>. When you fetch or pull, you will do so from <code>origin</code>.</p>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">git clone https://github.com/apache/incubator-kudu kudu</code></pre>
+</div>
+</div>
+</li>
+<li>
+<p>Change to the new <code>kudu</code> directory.</p>
+</li>
+<li>
+<p>Add a <code>gerrit</code> remote. In the following command, substitute &lt;username&gt; with your
+Github username.</p>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">git remote add gerrit ssh://&lt;username&gt;@gerrit.cloudera.org:29418/kudu</code></pre>
+</div>
+</div>
+</li>
+<li>
+<p>Run the following command to install the
+Gerrit <code>commit-msg</code> hook. Use the following command, replacing <code>&lt;username&gt;</code> with your
+Github username.</p>
+<div class="listingblock">
+<div class="content">
+<pre>gitdir=$(git rev-parse --git-dir); scp -p -P 29418 &lt;username&gt;@gerrit.cloudera.org:hooks/commit-msg ${gitdir}/hooks/</pre>
+</div>
+</div>
+</li>
+<li>
+<p>Be sure you have set the Kudu repository to use <code>pull --rebase</code> by default. You
+can use the following two commands, assuming you have only ever checked out <code>master</code>
+so far:</p>
+<div class="listingblock">
+<div class="content">
+<pre>git config branch.autosetuprebase always
+git config branch.master.rebase true</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>If for some reason you had already checked out branches other than <code>master</code>, substitute
+<code>master</code> for the other branch names in the second command above.</p>
+</div>
+</li>
+</ol>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_submitting_patches"><a class="link" href="#_submitting_patches">Submitting Patches</a></h3>
+<div class="paragraph">
+<p>To submit a patch, first commit your change (using a descriptive multi-line
+commit message if possible), then push the request to the <code>gerrit</code> remote. For instance, to push a change
+to the <code>master</code> branch:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>git push gerrit HEAD:refs/for/master --no-thin</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>or to push a change to the <code>gh-pages</code> branch (to update the website):</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>git push gerrit HEAD:refs/for/gh-pages --no-thin</pre>
+</div>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+The <code>--no-thin</code> argument is a workaround to prevent an error in Gerrit. See
+<a href="https://code.google.com/p/gerrit/issues/detail?id=1582" class="bare">https://code.google.com/p/gerrit/issues/detail?id=1582</a>.
+</td>
+</tr>
+</table>
+</div>
+<div class="admonitionblock tip">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-tip" title="Tip"></i>
+</td>
+<td class="content">
+Consider creating Git aliases for the above commands. Gerrit also includes
+a command-line tool called
+<a href="https://www.mediawiki.org/wiki/Gerrit/Tutorial#Installing_git-review">git-review</a>,
+which you may find helpful.
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>Gerrit will add a change ID to your commit message and will create a Gerrit review,
+whose URL will be emitted as part of the push reply. If desired, you can send a message
+to the <code>kudu-dev</code> mailing list, explaining your patch and requesting review.</p>
+</div>
+<div class="paragraph">
+<p>After getting feedback, you can update or amend your commit, (for instance, using
+a command like <code>git commit --amend</code>) while leaving the Change
+ID intact. Push your change to Gerrit again, and this will create a new patch set
+in Gerrit and notify all reviewers about the change.</p>
+</div>
+<div class="paragraph">
+<p>When your code has been reviewed and is ready to be merged into the Kudu code base,
+a Kudu committer will merge it using Gerrit. You can discard your local branch.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_abandoning_a_review"><a class="link" href="#_abandoning_a_review">Abandoning a Review</a></h3>
+<div class="paragraph">
+<p>If your patch is not accepted or you decide to pull it from consideration, you can
+use the Gerrit UI to <strong>Abandon</strong> the patch. It will still show in Gerrit&#8217;s history,
+but will not be listed as a pending review.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_reviewing_patches_in_gerrit"><a class="link" href="#_reviewing_patches_in_gerrit">Reviewing Patches In Gerrit</a></h3>
+<div class="paragraph">
+<p>You can view a unified or side-by-side diff of changes in Gerrit using the web UI.
+To leave a comment, click the relevant line number or highlight the relevant part
+of the line, and type 'c' to bring up a comment box. To submit your comments and/or
+your review status, go up to the top level of the review and click <strong>Reply</strong>. You can
+add additional top-level comments here, and submit them.</p>
+</div>
+<div class="paragraph">
+<p>To check out code from a Gerrit review, click <strong>Download</strong> and paste the relevant Git
+commands into your Git client. You can then update the commit and push to Gerrit to
+submit a patch to the review, even if you were not the original reviewer.</p>
+</div>
+<div class="paragraph">
+<p>Gerrit allows you to vote on a review. A vote of <code>+2</code> from at least one committer
+(besides the submitter) is required before the patch can be merged.</p>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_code_style"><a class="link" href="#_code_style">Code Style</a></h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Get familiar with these guidelines so that your contributions can be reviewed and
+integrated quickly and easily.</p>
+</div>
+<div class="paragraph">
+<p>In general, Kudu follows the
+<a href="http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml">Google C++ Style Guide</a>,
+with the following exceptions:</p>
+</div>
+<div class="sect2">
+<h3 id="_limitations_on_code_boost_code_library_use"><a class="link" href="#_limitations_on_code_boost_code_library_use">Limitations on <code>boost</code> Library Use</a></h3>
+<div class="paragraph">
+<p><code>boost</code> libraries can be used in cases where a suitable
+replacement does not exist in the Kudu code base. However, try to avoid introducing
+dependencies on new <code>boost</code> libraries, and use Kudu code in preference
+to <code>boost</code> where available. For example, do not use `boost&#8217;s scoped pointer
+implementations.</p>
+</div>
+<div class="ulist">
+<div class="title">Approved <code>boost</code> Libraries</div>
+<ul>
+<li>
+<p><code>boost::assign</code> (container literals)</p>
+</li>
+<li>
+<p><code>boost::shared_mutex</code> (but prefer Kudu&#8217;s spin lock implementation for short
+critical sections)</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Check that any features from <code>boost</code> you use are present in <strong><code>boost</code> 1.46</strong>
+or earlier, for compatibility with RHEL 6.</p>
+</div>
+<div class="paragraph">
+<div class="title"><code>boost</code> Libraries and the Kudu C++ Client</div>
+<p>Do not use <code>boost</code> in any public headers for the Kudu C++ client, because
+<code>boost</code> commonly breaks backward compatibility, and passing data between two <code>boost</code>
+versions (one by the user, one by Kudu) causes serious issues.</p>
+</div>
+<div class="paragraph">
+<p>In addition, do not create dependencies from the Kudu C++ client to any <code>boost</code>
+libraries. <code>libboost_system</code> is particularly troublesome, as any <code>boost</code> code
+that throws exceptions will grow a dependency on it. Among other things, you
+cannot use <code>boost::{lock_guard,unique_lock,shared_lock}</code> in any code consumed
+by the C++ client (such as <em>common/</em> and <em>util/</em>).</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_line_length"><a class="link" href="#_line_length">Line length</a></h3>
+<div class="paragraph">
+<p>The Kudu team allows line lengths of 100 characters per line, rather than Google&#8217;s standard of 80. Try to
+keep under 80 where possible, but you can spill over to 100 or so if necessary.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_pointers"><a class="link" href="#_pointers">Pointers</a></h3>
+<div class="paragraph">
+<div class="title">Smart Pointers and Singly-Owned Pointers</div>
+<p>Generally, most objects should have clear "single-owner" semantics.
+Most of the time, singly-owned objects can be wrapped in a <code>gscoped_ptr&lt;&gt;</code>
+which ensures deletion on scope exit and prevents accidental copying.
+<code>gscoped_ptr</code> is similar to C++11&#8217;s <code>unique_ptr</code> in that it has a <code>release</code>
+method and also provides emulated <code>move</code> semantics (see <em>gscoped_ptr.h</em> for
+example usage).</p>
+</div>
+<div class="paragraph">
+<p>If an object is singly owned, but referenced from multiple places, such as when
+the pointed-to object is known to be valid at least as long as the pointer itself,
+associate a comment with the constructor which takes and stores the raw pointer,
+as in the following example.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-c++" data-lang="c++">  // 'blah' must remain valid for the lifetime of this class
+  MyClass(const Blah* blah) :
+    blah_(blah) {
+  }</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>If you use raw pointers within STL collections or inside of vectors and other containers,
+associate a comment with the container, which explains the ownership
+semantics (owned or un-owned). Use utility code from <em>gutil/stl_util.h</em>, such as
+<code>STLDeleteElements</code> or <code>ElementDeleter</code>, to ease handling of deletion of the
+contained elements.</p>
+</div>
+<div class="admonitionblock warning">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-warning" title="Warning"></i>
+</td>
+<td class="content">
+Using <code>std::auto_ptr</code> is strictly disallowed because of its difficult and
+bug-prone semantics.
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<div class="title">Smart Pointers for Multiply-Owned Pointers:</div>
+<p>Although single ownership is ideal, sometimes it is not possible, particularly
+when multiple threads are in play and the lifetimes of the pointers are not
+clearly defined. In these cases, you can use either <code>std::tr1::shared_ptr</code> or
+Kudu&#8217;s own <code>scoped_refptr</code> from <em>gutil/ref_counted.hpp</em>. Each of these mechanisms
+relies on reference counting to automatically delete the referent once no more
+pointers remain. The key difference between these two types of pointers is that
+<code>scoped_refptr</code> requires that the object extend a <code>RefCounted</code> base class, and
+stores its reference count inside the object storage itself, while <code>shared_ptr</code>
+maintains a separate reference count on the heap.</p>
+</div>
+<div class="paragraph">
+<p>The pros and cons are:</p>
+</div>
+<div class="ulist none">
+<div class="title"><code>shared_ptr</code></div>
+<ul class="none">
+<li>
+<p><span class="icon green"><i class="fa fa-plus-circle"></i></span> can be used with any type of object, without the
+object deriving from a special base class</p>
+</li>
+<li>
+<p><span class="icon green"><i class="fa fa-plus-circle"></i></span> part of the standard library and familiar to most
+C++ developers</p>
+</li>
+<li>
+<p><span class="icon red"><i class="fa fa-minus-circle"></i></span> creating a new object requires two allocations instead
+of one (one to create the ref count, and one to create the object)</p>
+</li>
+<li>
+<p><span class="icon red"><i class="fa fa-minus-circle"></i></span> the ref count may not be near the object on the heap,
+so extra cache misses may be incurred on access</p>
+</li>
+<li>
+<p><span class="icon red"><i class="fa fa-minus-circle"></i></span> the <code>shared_ptr</code> instance itself requires 16 bytes
+(pointer to the ref count and pointer to the object)</p>
+</li>
+<li>
+<p><span class="icon red"><i class="fa fa-minus-circle"></i></span> if you convert from the <code>shared_ptr</code> to a raw pointer,
+you can&#8217;t get back the <code>shared_ptr</code></p>
+</li>
+</ul>
+</div>
+<div class="ulist none">
+<div class="title"><code>scoped_refptr</code></div>
+<ul class="none">
+<li>
+<p><span class="icon green"><i class="fa fa-plus-circle fa-pro"></i></span> only requires a single allocation, and ref count
+is on the same cache line as the object</p>
+</li>
+<li>
+<p><span class="icon green"><i class="fa fa-plus-circle fa-pro"></i></span> the pointer only requires 8 bytes (since
+the ref count is within the object)</p>
+</li>
+<li>
+<p><span class="icon green"><i class="fa fa-plus-circle fa-pro"></i></span> you can manually increase or decrease
+reference counts when more control is required</p>
+</li>
+<li>
+<p><span class="icon green"><i class="fa fa-plus-circle fa-pro"></i></span> you can convert from a raw pointer back
+to a <code>scoped_refptr</code> safely without worrying about double freeing</p>
+</li>
+<li>
+<p><span class="icon green"><i class="fa fa-plus-circle fa-pro"></i></span> since we control the implementation, we
+can implement features, such as debug builds that capture the stack trace of every
+referent to help debug leaks.</p>
+</li>
+<li>
+<p><span class="icon red"><i class="fa fa-minus-circle fa-con"></i></span> the referred-to object must inherit
+from <code>RefCounted</code></p>
+</li>
+<li>
+<p><span class="icon red"><i class="fa fa-minus-circle fa-con"></i></span> does not support <code>weak_ptr&lt;&gt;</code> use cases</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Since <code>scoped_refptr</code> is generally faster and smaller, try to use it
+rather than <code>shared_ptr</code> in new code. Existing code uses <code>shared_ptr</code>
+in many places. When interfacing with that code, you can continue to use <code>shared_ptr</code>.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_function_binding_and_callbacks"><a class="link" href="#_function_binding_and_callbacks">Function Binding and Callbacks</a></h3>
+<div class="paragraph">
+<p>Existing code uses <code>boost::bind</code> and <code>boost::function</code> for function binding and
+callbacks. For new code, use the <code>Callback</code> and <code>Bind</code> classes in <code>gutil</code> instead.
+While less full-featured (<code>Bind</code> doesn&#8217;t support argument
+place holders, wrapped function pointers, or function objects), they provide
+more options by the way of argument lifecycle management. For example, a
+bound argument whose class extends <code>RefCounted</code> will be incremented during <code>Bind</code>
+and decremented when the <code>Callback</code> goes out of scope.</p>
+</div>
+<div class="paragraph">
+<p>See the large file comment in <em>gutil/callback.h</em> for more details, and
+<em>util/callback_bind-test.cc</em> for examples.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="__code_cmake_code_style_guide"><a class="link" href="#__code_cmake_code_style_guide"><code>CMake</code> Style Guide</a></h3>
+<div class="paragraph">
+<p><code>CMake</code> allows commands in lower, upper, or mixed case. To keep
+the CMake files consistent, please use the following guidelines:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><strong>built-in commands</strong> in lowercase</p>
+</li>
+</ul>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>add_subdirectory(some/path)</pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><strong>built-in arguments</strong> in uppercase</p>
+</li>
+</ul>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>message(STATUS "message goes here")</pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><strong>custom commands or macros</strong> in uppercase</p>
+</li>
+</ul>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>ADD_KUDU_TEST(some-test)</pre>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_gflags"><a class="link" href="#_gflags">GFlags</a></h3>
+<div class="paragraph">
+<p>Kudu uses gflags for both command-line and file-based configuration. Use these guidelines
+to add a new gflag. All new gflags must conform to these
+guidelines. Existing non-conformant ones will be made conformant in time.</p>
+</div>
+<div class="paragraph">
+<div class="title">Name</div>
+<p>The gflag&#8217;s name conveys a lot of information, so choose a good name. The name
+will propagate into other systems, such as the <a href="configuration_reference.html">Configuration
+Reference</a>.
+- The different parts of a multi-word name should be separated by underscores.
+  For example, <code>fs_data_dirs</code>.
+- The name should be prefixed with the context that it affects. For example,
+  <code>webserver_num_worker_threads</code> and <code>cfile_default_block_size</code>. Context can be
+  difficult to define, so bear in mind that this prefix will be
+  used to group similar gflags together. If the gflag affects the entire
+  process, it should not be prefixed.
+- If the gflag is for a quantity, the name should be suffixed with the units.
+  For example, <code>remote_bootstrap_idle_timeout_ms</code>.
+- Where possible, use short names. This will save time for those entering
+  command line options by hand.
+- The name is part of Kudu&#8217;s compatibility contract, and should not change
+  without very good reason.</p>
+</div>
+<div class="paragraph">
+<div class="title">Default value</div>
+<p>Choosing a default value is generally simple, but like the name, it propagates
+into other systems.
+- The default value is part of Kudu&#8217;s compatibility contract, and should not
+  change without very good reason.</p>
+</div>
+<div class="paragraph">
+<div class="title">Description</div>
+<p>The gflag&#8217;s description should supplement the name and provide additional
+context and information. Like the name, the description propagates into other
+systems.
+- The description may include multiple sentences. Each should begin with a
+  capital letter, end with a period, and begin one space after the previous.
+- The description should NOT include the gflag&#8217;s type or default value; they are
+  provided out-of-band.
+- The description should be in the third person. Do not use words like <code>you</code>.
+- A gflag description can be changed freely; it is not expected to remain the
+  same across Kudu releases.</p>
+</div>
+<div class="paragraph">
+<div class="title">Tags</div>
+<p>Kudu&#8217;s gflag tagging mechanism adds machine-readable context to each gflag, for
+use in consuming systems such as documentation or management tools. See the large block
+comment in <em>flag_tags.h</em> for guidelines.</p>
+</div>
+<div class="ulist">
+<div class="title">Miscellaneous</div>
+<ul>
+<li>
+<p>Avoid creating multiple gflags for the same logical parameter. For
+example, many Kudu binaries need to configure a WAL directory. Rather than
+creating <code>foo_wal_dir</code> and <code>bar_wal_dir</code> gflags, better to have a single
+<code>kudu_wal_dir</code> gflag for use universally.</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_testing"><a class="link" href="#_testing">Testing</a></h2>
+<div class="sectionbody">
+<div class="dlist">
+<dl>
+<dt class="hdlist1">All new code should have tests.</dt>
+<dd>
+<p>Add new tests either in existing files, or create new test files as necessary.</p>
+</dd>
+<dt class="hdlist1">All bug fixes should have tests.</dt>
+<dd>
+<p>It&#8217;s OK to fix a bug without adding a
+new test if it&#8217;s triggered by an existing test case. For example, if a
+race shows up when running a multi-threaded system test after 20
+minutes or so, it&#8217;s worth trying to make a more targeted test case to
+trigger the bug. But if that&#8217;s hard to do, the existing system test
+should be enough.</p>
+</dd>
+<dt class="hdlist1">Tests should run quickly (&lt; 1s).</dt>
+<dd>
+<p>If you want to write a time-intensive
+test, make the runtime dependent on <code>KuduTest#AllowSlowTests</code>, which is
+enabled via the <code>KUDU_ALLOW_SLOW_TESTS</code> environment variable and is
+used by Jenkins test execution.</p>
+</dd>
+<dt class="hdlist1">Tests which run a number of iterations of some task should use a <code>gflags</code> command-line argument for the number of iterations.</dt>
+<dd>
+<p>This is handy for writing quick stress tests or performance tests.</p>
+</dd>
+<dt class="hdlist1">Commits which may affect performance should include before/after <code>perf-stat(1)</code> output.</dt>
+<dd>
+<p>This will show performance improvement or non-regression.
+Performance-sensitive code should include some test case which can be used as a
+targeted benchmark.</p>
+</dd>
+</dl>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_documentation"><a class="link" href="#_documentation">Documentation</a></h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>See <a href="style_guide.html">Documentation Style Guide</a> for guidelines about contributing
+to the official Kudu documentation.</p>
+</div>
+</div>
+</div>
+    </div>
+    <div class="col-md-3">
+
+  <div id="toc" data-spy="affix" data-offset-top="70">
+  <ul>
+
+      <li>
+
+          <a href="introduction.html">Introducing Kudu</a> 
+      </li> 
+      <li>
+
+          <a href="release_notes.html">Kudu Release Notes</a> 
+      </li> 
+      <li>
+
+          <a href="quickstart.html">Getting Started with Kudu</a> 
+      </li> 
+      <li>
+
+          <a href="installation.html">Installation Guide</a> 
+      </li> 
+      <li>
+
+          <a href="configuration.html">Configuring Kudu</a> 
+      </li> 
+      <li>
+
+          <a href="kudu_impala_integration.html">Using Impala with Kudu</a> 
+      </li> 
+      <li>
+
+          <a href="administration.html">Administering Kudu</a> 
+      </li> 
+      <li>
+
+          <a href="troubleshooting.html">Troubleshooting Kudu</a> 
+      </li> 
+      <li>
+
+          <a href="developing.html">Developing Applications with Kudu</a> 
+      </li> 
+      <li>
+
+          <a href="schema_design.html">Kudu Schema Design</a> 
+      </li> 
+      <li>
+
+          <a href="transaction_semantics.html">Kudu Transaction Semantics</a> 
+      </li> 
+      <li>
+<span class="active-toc">Contributing to Kudu</span>
+            <ul class="sectlevel1">
+<li><a href="#_contributing_patches_using_gerrit">Contributing Patches Using Gerrit</a>
+<ul class="sectlevel2">
+<li><a href="#_initial_setup_for_gerrit">Initial Setup for Gerrit</a></li>
+<li><a href="#_submitting_patches">Submitting Patches</a></li>
+<li><a href="#_abandoning_a_review">Abandoning a Review</a></li>
+<li><a href="#_reviewing_patches_in_gerrit">Reviewing Patches In Gerrit</a></li>
+</ul>
+</li>
+<li><a href="#_code_style">Code Style</a>
+<ul class="sectlevel2">
+<li><a href="#_limitations_on_code_boost_code_library_use">Limitations on <code>boost</code> Library Use</a></li>
+<li><a href="#_line_length">Line length</a></li>
+<li><a href="#_pointers">Pointers</a></li>
+<li><a href="#_function_binding_and_callbacks">Function Binding and Callbacks</a></li>
+<li><a href="#__code_cmake_code_style_guide"><code>CMake</code> Style Guide</a></li>
+<li><a href="#_gflags">GFlags</a></li>
+</ul>
+</li>
+<li><a href="#_testing">Testing</a></li>
+<li><a href="#_documentation">Documentation</a></li>
+</ul> 
+      </li> 
+      <li>
+
+          <a href="style_guide.html">Kudu Documentation Style Guide</a> 
+      </li> 
+      <li>
+
+          <a href="configuration_reference.html">Kudu Configuration Reference</a> 
+      </li> 
+  </ul>
+  </div>
+    </div>
+  </div>
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/c78a2f80/releases/0.8.0/docs/developing.html
----------------------------------------------------------------------
diff --git a/releases/0.8.0/docs/developing.html b/releases/0.8.0/docs/developing.html
new file mode 100644
index 0000000..cdc8e01
--- /dev/null
+++ b/releases/0.8.0/docs/developing.html
@@ -0,0 +1,249 @@
+---
+title: Developing Applications With Apache Kudu (incubating)
+layout: default
+active_nav: docs
+last_updated: 'Last updated 2016-04-11 08:31:49 PDT'
+---
+<!--
+
+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.
+-->
+
+
+<div class="container">
+  <div class="row">
+    <div class="col-md-9">
+
+<h1>Developing Applications With Apache Kudu (incubating)</h1>
+      <div id="preamble">
+<div class="sectionbody">
+<div class="paragraph">
+<p>Kudu provides C++ and Java client APIs, as well as reference examples to illustrate
+their use. A Python API is included, but it is currently considered experimental,
+unstable, and subject to change at any time.</p>
+</div>
+<div class="admonitionblock warning">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-warning" title="Warning"></i>
+</td>
+<td class="content">
+Use of server-side or private interfaces is not supported, and interfaces
+which are not part of public APIs have no stability guarantees.
+</td>
+</tr>
+</table>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_viewing_the_api_documentation"><a class="link" href="#_viewing_the_api_documentation">Viewing the API Documentation</a></h2>
+<div class="sectionbody">
+<div class="paragraph">
+<div class="title">C++ API Documentation</div>
+<p>The documentation for the C++ client APIs is included in the header files in
+<code>/usr/include/kudu/</code> if you installed Kudu using packages or subdirectories
+of <code>src/kudu/client/</code> if you built Kudu from source. If you installed Kudu using parcels,
+no headers are included in your installation. and you will need to <a href="#build_kudu">build
+Kudu from source</a> in order to have access to the headers and shared libraries.</p>
+</div>
+<div class="paragraph">
+<p>The following command is a naive approach to finding relevant header files. Use
+of any APIs other than the client APIs is unsupported.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">$ find /usr/include/kudu -type f -name *.h</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<div class="title">Java API Documentation</div>
+<p>You can view the <a href="../apidocs/index.html">Java API documentation</a> online. Alternatively,
+after <a href="#build_java_client">building the Java client</a>, Java API documentation is available
+in <code>java/kudu-client/target/apidocs/index.html</code>.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_working_examples"><a class="link" href="#_working_examples">Working Examples</a></h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Several example applications are provided in the
+<a href="https://github.com/cloudera/kudu-examples">kudu-examples</a> Github
+repository. Each example includes a <code>README</code> that shows how to compile and run
+it. These examples illustrate correct usage of the Kudu APIs, as well as how to
+set up a virtual machine to run Kudu. The following list includes some of the
+examples that are available today. Check the repository itself in case this list goes
+out of date.</p>
+</div>
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><code>java-example</code></dt>
+<dd>
+<p>A simple Java application which connects to a Kudu instance, creates a table, writes data to it, then drops the table.</p>
+</dd>
+<dt class="hdlist1"><code>collectl</code></dt>
+<dd>
+<p>A small Java application which listens on a TCP socket for time series data corresponding to the Collectl wire protocol.
+The commonly-available collectl tool can be used to send example data to the server.</p>
+</dd>
+<dt class="hdlist1"><code>clients/python</code></dt>
+<dd>
+<p>An experimental Python client for Kudu.</p>
+</dd>
+<dt class="hdlist1"><code>demo-vm-setup</code></dt>
+<dd>
+<p>Scripts to download and run a VirtualBox virtual machine with Kudu already installed.
+See <a href="quickstart.html">Quickstart</a> for more information.</p>
+</dd>
+</dl>
+</div>
+<div class="paragraph">
+<p>These examples should serve as helpful starting points for your own Kudu applications and integrations.</p>
+</div>
+<div class="sect2">
+<h3 id="_maven_artifacts"><a class="link" href="#_maven_artifacts">Maven Artifacts</a></h3>
+<div class="paragraph">
+<p>The following Maven <code>&lt;dependency&gt;</code> element is valid for the Kudu public beta:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-xml" data-lang="xml">&lt;dependency&gt;
+  &lt;groupId&gt;org.kududb&lt;/groupId&gt;
+  &lt;artifactId&gt;kudu-client&lt;/artifactId&gt;
+  &lt;version&gt;0.5.0&lt;/version&gt;
+&lt;/dependency&gt;</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Because the Maven artifacts are not in Maven Central, use the following <code>&lt;repository&gt;</code>
+element:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-xml" data-lang="xml">&lt;repository&gt;
+  &lt;id&gt;cdh.repo&lt;/id&gt;
+  &lt;name&gt;Cloudera Repositories&lt;/name&gt;
+  &lt;url&gt;https://repository.cloudera.com/artifactory/cloudera-repos&lt;/url&gt;
+  &lt;snapshots&gt;
+    &lt;enabled&gt;false&lt;/enabled&gt;
+  &lt;/snapshots&gt;
+&lt;/repository&gt;</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>See subdirectories of <a href="https://github.com/cloudera/kudu-examples/tree/master/java" class="bare">https://github.com/cloudera/kudu-examples/tree/master/java</a> for
+example Maven pom.xml files.</p>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_example_impala_commands_with_kudu"><a class="link" href="#_example_impala_commands_with_kudu">Example Impala Commands With Kudu</a></h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>See <a href="kudu_impala_integration.html">Using Impala With Kudu</a> for guidance on installing
+and using Impala with Kudu, including several <code>impala-shell</code> examples.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_integration_with_mapreduce_yarn_and_other_frameworks"><a class="link" href="#_integration_with_mapreduce_yarn_and_other_frameworks">Integration with MapReduce, YARN, and Other Frameworks</a></h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Kudu was designed to integrate with MapReduce, YARN, Spark, and other frameworks in
+the Hadoop ecosystem. See <a href="https://github.com/apache/incubator-kudu/blob/master/java/kudu-client-tools/src/main/java/org/kududb/mapreduce/tools/RowCounter.java">RowCounter.java</a>
+and
+<a href="https://github.com/apache/incubator-kudu/blob/master/java/kudu-client-tools/src/main/java/org/kududb/mapreduce/tools/ImportCsv.java">ImportCsv.java</a>
+for examples which you can model your own integrations on. Stay tuned for more examples
+using YARN and Spark in the future.</p>
+</div>
+</div>
+</div>
+    </div>
+    <div class="col-md-3">
+
+  <div id="toc" data-spy="affix" data-offset-top="70">
+  <ul>
+
+      <li>
+
+          <a href="introduction.html">Introducing Kudu</a> 
+      </li> 
+      <li>
+
+          <a href="release_notes.html">Kudu Release Notes</a> 
+      </li> 
+      <li>
+
+          <a href="quickstart.html">Getting Started with Kudu</a> 
+      </li> 
+      <li>
+
+          <a href="installation.html">Installation Guide</a> 
+      </li> 
+      <li>
+
+          <a href="configuration.html">Configuring Kudu</a> 
+      </li> 
+      <li>
+
+          <a href="kudu_impala_integration.html">Using Impala with Kudu</a> 
+      </li> 
+      <li>
+
+          <a href="administration.html">Administering Kudu</a> 
+      </li> 
+      <li>
+
+          <a href="troubleshooting.html">Troubleshooting Kudu</a> 
+      </li> 
+      <li>
+<span class="active-toc">Developing Applications with Kudu</span>
+            <ul class="sectlevel1">
+<li><a href="#_viewing_the_api_documentation">Viewing the API Documentation</a></li>
+<li><a href="#_working_examples">Working Examples</a>
+<ul class="sectlevel2">
+<li><a href="#_maven_artifacts">Maven Artifacts</a></li>
+</ul>
+</li>
+<li><a href="#_example_impala_commands_with_kudu">Example Impala Commands With Kudu</a></li>
+<li><a href="#_integration_with_mapreduce_yarn_and_other_frameworks">Integration with MapReduce, YARN, and Other Frameworks</a></li>
+</ul> 
+      </li> 
+      <li>
+
+          <a href="schema_design.html">Kudu Schema Design</a> 
+      </li> 
+      <li>
+
+          <a href="transaction_semantics.html">Kudu Transaction Semantics</a> 
+      </li> 
+      <li>
+
+          <a href="contributing.html">Contributing to Kudu</a> 
+      </li> 
+      <li>
+
+          <a href="style_guide.html">Kudu Documentation Style Guide</a> 
+      </li> 
+      <li>
+
+          <a href="configuration_reference.html">Kudu Configuration Reference</a> 
+      </li> 
+  </ul>
+  </div>
+    </div>
+  </div>
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/c78a2f80/releases/0.8.0/docs/images/kudu-architecture-2.png
----------------------------------------------------------------------
diff --git a/releases/0.8.0/docs/images/kudu-architecture-2.png b/releases/0.8.0/docs/images/kudu-architecture-2.png
new file mode 100644
index 0000000..fcaeba5
Binary files /dev/null and b/releases/0.8.0/docs/images/kudu-architecture-2.png differ

http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/c78a2f80/releases/0.8.0/docs/index.html
----------------------------------------------------------------------
diff --git a/releases/0.8.0/docs/index.html b/releases/0.8.0/docs/index.html
new file mode 100644
index 0000000..5194399
--- /dev/null
+++ b/releases/0.8.0/docs/index.html
@@ -0,0 +1,100 @@
+---
+title: Apache Kudu (incubating) Documentation
+layout: default
+active_nav: docs
+last_updated: 'Last updated 2016-04-11 08:31:49 PDT'
+---
+<!--
+
+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.
+-->
+
+
+<div class="container">
+  <div class="row">
+    <div class="col-md-9">
+
+<h1>Apache Kudu (incubating) Documentation</h1>
+      <div id="preamble">
+<div class="sectionbody">
+<div class="landing_page">
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><a href="introduction.html">Introducing Kudu</a></dt>
+<dd>
+<p>Get familiar with what sets Kudu apart.</p>
+</dd>
+<dt class="hdlist1"><a href="release_notes.html">Kudu Beta Release Notes</a></dt>
+<dd>
+<p>Find out what to expect in Kudu public beta releases, as well as known issues, workarounds,
+and limitations.</p>
+</dd>
+<dt class="hdlist1"><a href="quickstart.html">Getting Started With Kudu</a></dt>
+<dd>
+<p>Deploy a simple proof-of-concept Kudu cluster to try it out for yourself.</p>
+</dd>
+<dt class="hdlist1"><a href="installation.html">Installation Guide</a></dt>
+<dd>
+<p>Read about all the different options for installing Kudu.</p>
+</dd>
+<dt class="hdlist1"><a href="configuration.html">Configuring Kudu</a></dt>
+<dd>
+<p>Find out how to customize your Kudu cluster.</p>
+</dd>
+<dt class="hdlist1"><a href="kudu_impala_integration.html">Using Kudu with Apache Impala (incubating)</a></dt>
+<dd>
+<p>Learn about using Impala to create, query, and update your Kudu tables.</p>
+</dd>
+<dt class="hdlist1"><a href="administration.html">Administering Kudu</a></dt>
+<dd>
+<p>Keep Kudu running smoothly.</p>
+</dd>
+<dt class="hdlist1"><a href="troubleshooting.html">Troubleshooting Kudu</a></dt>
+<dd>
+<p>Find guidelines for solving problems with your Kudu cluster.</p>
+</dd>
+<dt class="hdlist1"><a href="developing.html">Developing Applications With Kudu</a></dt>
+<dd>
+<p>Get information about developing with the Kudu APIs and links to working example code.</p>
+</dd>
+<dt class="hdlist1"><a href="schema_design.html">Kudu Schema Design</a></dt>
+<dd>
+<p>Learn about designing Kudu table schemas.</p>
+</dd>
+<dt class="hdlist1"><a href="transaction_semantics.html">Kudu Transaction Semantics</a></dt>
+<dd>
+<p>Information about transaction semantics in Kudu.</p>
+</dd>
+<dt class="hdlist1"><a href="contributing.html">Contributing to Kudu</a></dt>
+<dd>
+<p>Get involved in the Kudu community.</p>
+</dd>
+<dt class="hdlist1"><a href="style_guide.html">Kudu Documentation Style Guide</a></dt>
+<dd>
+<p>Get familiar with the guidelines for documentation contributions to the Kudu project.</p>
+</dd>
+<dt class="hdlist1"><a href="configuration_reference.html">Kudu Configuration Reference</a></dt>
+<dd>
+<p>Find out about individual Kudu configuration options.</p>
+</dd>
+</dl>
+</div>
+</div>
+</div>
+</div>
+    </div>
+    <div class="col-md-3">
+
+    </div>
+  </div>
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/c78a2f80/releases/0.8.0/docs/installation.html
----------------------------------------------------------------------
diff --git a/releases/0.8.0/docs/installation.html b/releases/0.8.0/docs/installation.html
new file mode 100644
index 0000000..206b848
--- /dev/null
+++ b/releases/0.8.0/docs/installation.html
@@ -0,0 +1,1129 @@
+---
+title: Installing Apache Kudu (incubating)
+layout: default
+active_nav: docs
+last_updated: 'Last updated 2016-04-11 08:31:49 PDT'
+---
+<!--
+
+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.
+-->
+
+
+<div class="container">
+  <div class="row">
+    <div class="col-md-9">
+
+<h1>Installing Apache Kudu (incubating)</h1>
+      <div id="preamble">
+<div class="sectionbody">
+<div class="paragraph">
+<p>You can deploy Kudu on a cluster using packages or you can build Kudu
+from source. To run Kudu without installing anything, use the <a href="quickstart.html#quickstart_vm">Kudu Quickstart VM</a>.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+Kudu is currently easier to install and manage with <a href="http://www.cloudera.com/content/www/en-us/products/cloudera-manager.html">Cloudera Manager</a>,
+version 5.4.7 or newer. If you use Cloudera Manager, see also Cloudera&#8217;s
+<a href="http://www.cloudera.com/content/www/en-us/documentation/betas/kudu/latest/topics/kudu_installation.html">Kudu documentation</a>.
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<div class="title">Upgrading Kudu</div>
+<p>To upgrade Kudu from a previous version, see <a href="#upgrade">Upgrade from 0.7.1 to 0.8.0</a>.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_prerequisites_and_requirements"><a class="link" href="#_prerequisites_and_requirements">Prerequisites and Requirements</a></h2>
+<div class="sectionbody">
+<div class="ulist">
+<div class="title">Hardware</div>
+<ul>
+<li>
+<p>A host to run the Kudu master.</p>
+</li>
+<li>
+<p>One or more hosts to run Kudu tablet servers. When using replication, a minimum of
+three tablet servers is necessary.</p>
+</li>
+</ul>
+</div>
+<div class="dlist">
+<div class="title">Operating System Requirements</div>
+<dl>
+<dt class="hdlist1">Linux</dt>
+<dd>
+<div class="ulist">
+<ul>
+<li>
+<p>RHEL 6, RHEL 7, Ubuntu 14.04 (Trusty), or SLES 12.</p>
+</li>
+<li>
+<p>A kernel and fileystem that support <em>hole punching</em>. Hole punching is the use of the
+<code>fallocate(2)</code> system call with the <code>FALLOC_FL_PUNCH_HOLE</code> option set. See
+<a href="troubleshooting.html#req_hole_punching">troubleshooting hole punching</a> for more
+information.</p>
+</li>
+<li>
+<p>ntp.</p>
+</li>
+</ul>
+</div>
+</dd>
+<dt class="hdlist1">OS X</dt>
+<dd>
+<div class="ulist">
+<ul>
+<li>
+<p>OS X 10.10 Yosemite or OS X 10.11 El Capitan.</p>
+</li>
+<li>
+<p>Prebuilt OS X packages are not provided.</p>
+</li>
+</ul>
+</div>
+</dd>
+<dt class="hdlist1">Windows</dt>
+<dd>
+<div class="ulist">
+<ul>
+<li>
+<p>Microsoft Windows is unsupported.</p>
+</li>
+</ul>
+</div>
+</dd>
+</dl>
+</div>
+<div class="ulist">
+<div class="title">Storage</div>
+<ul>
+<li>
+<p>If solid state storage is available, storing Kudu WALs on such high-performance
+media may significantly improve latency when Kudu is configured for its highest
+durability levels.</p>
+</li>
+</ul>
+</div>
+<div class="ulist">
+<div class="title">Management</div>
+<ul>
+<li>
+<p>If you use Cloudera Manager and CDH, Cloudera Manager 5.4.3 or newer is required.
+Cloudera Manager 5.4.7 and newer provide better monitoring and administration options.</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="install_packages"><a class="link" href="#install_packages">Install Using Packages</a></h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>You can install Kudu using packages managed by the operating system.</p>
+</div>
+<table id="kudu_package_locations" class="tableblock frame-all grid-all spread">
+<caption class="title">Table 1. Kudu Package Locations</caption>
+<colgroup>
+<col style="width: 33%;">
+<col style="width: 33%;">
+<col style="width: 33%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-right valign-top">OS</th>
+<th class="tableblock halign-left valign-top">Repository</th>
+<th class="tableblock halign-left valign-top">Individual Packages</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-right valign-top"><p class="tableblock"><strong>RHEL</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="http://archive.cloudera.com/beta/kudu/redhat/6/x86_64/kudu/cloudera-kudu.repo">RHEL 6</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="http://archive.cloudera.com/beta/kudu/redhat/6/x86_64/kudu/0.5.0/RPMS/x86_64/">RHEL 6</a></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-right valign-top"><p class="tableblock"><strong>Ubuntu</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="http://archive.cloudera.com/beta/kudu/ubuntu/trusty/amd64/kudu/cloudera.list">Trusty</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="http://archive.cloudera.com/beta/kudu/ubuntu/trusty/amd64/kudu/pool/contrib/k/kudu/">Trusty</a></p></td>
+</tr>
+</tbody>
+</table>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+For later versions of Ubuntu, the Ubuntu Trusty packages are reported to install, though they have not been extensively tested.
+</td>
+</tr>
+</table>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+packages are not yet provided for SLES.
+</td>
+</tr>
+</table>
+</div>
+<div class="sect2">
+<h3 id="_install_on_rhel_hosts"><a class="link" href="#_install_on_rhel_hosts">Install On RHEL Hosts</a></h3>
+<div class="olist arabic">
+<ol class="arabic">
+<li>
+<p>Download and configure the Kudu repositories for your operating system, or manually
+download individual RPMs, the appropriate link from <a href="#kudu_package_locations">Kudu Package Locations</a>.</p>
+</li>
+<li>
+<p>If using a Yum repository, use the following commands to install Kudu packages on
+each host.</p>
+<div class="listingblock">
+<div class="content">
+<pre>sudo yum install kudu                         # Base Kudu files
+sudo yum install kudu-master                  # Kudu master init.d service script and default configuration
+sudo yum install kudu-tserver                 # Kudu tablet server init.d service script and default configuration
+sudo yum install kudu-client0                 # Kudu C++ client shared library
+sudo yum install kudu-client-devel            # Kudu C++ client SDK</pre>
+</div>
+</div>
+</li>
+<li>
+<p>To manually install the Kudu RPMs, first download them, then use the command
+<code>sudo rpm -ivh &lt;RPM to install&gt;</code> and install the
+<code>kudu-master</code> and <code>kudu-tserver</code> packages on the appropriate hosts. These packages
+provide the operating system commands to start and stop Kudu.</p>
+</li>
+</ol>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_install_on_ubuntu_or_debian_hosts"><a class="link" href="#_install_on_ubuntu_or_debian_hosts">Install On Ubuntu or Debian Hosts</a></h3>
+<div class="olist arabic">
+<ol class="arabic">
+<li>
+<p>If using an Ubuntu or Debian repository, use the following commands to install Kudu
+packages on each host.</p>
+<div class="listingblock">
+<div class="content">
+<pre>sudo apt-get install kudu                     # Base Kudu files
+sudo apt-get install kudu-master              # Service scripts for managing kudu-master
+sudo apt-get install kudu-tserver             # Service scripts for managing kudu-tserver
+sudo apt-get install libkuduclient0           # Kudu C++ client shared library
+sudo apt-get install libkuduclient-dev        # Kudu C++ client SDK</pre>
+</div>
+</div>
+</li>
+<li>
+<p>To manually install individual DEBs, first download them, then use the command
+<code>sudo dpkg -i &lt;DEB to install&gt;</code> to install them.</p>
+</li>
+</ol>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_verify_the_installation"><a class="link" href="#_verify_the_installation">Verify the Installation</a></h3>
+<div class="olist arabic">
+<ol class="arabic">
+<li>
+<p>Verify that services are running using one of the following methods:</p>
+<div class="ulist">
+<ul>
+<li>
+<p>Examine the output of the <code>ps</code> command on servers to verify one or both of <code>kudu-master</code>
+or <code>kudu-tserver</code> processes is running.</p>
+</li>
+<li>
+<p>Access the Master or Tablet Server web UI by opening <code>http://&lt;_host_name_&gt;:8051/</code>
+for masters
+or <code>http://&lt;_host_name_&gt;:8050/</code> for tablet servers.</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>If Kudu isn&#8217;t running, have a look at the log files in '/var/log/kudu', and if there&#8217;s a file
+ending with '.FATAL' then it means Kudu wasn&#8217;t able to start.</p>
+<div class="ulist">
+<ul>
+<li>
+<p>If the error is 'Error during hole punch test', it might be a problem
+<a href="troubleshooting.html#req_hole_punching">with your OS</a>.</p>
+</li>
+<li>
+<p>If the error is 'Couldn&#8217;t get the current time', it&#8217;s a
+<a href="troubleshooting.html#ntp">problem with ntp</a>.</p>
+</li>
+<li>
+<p>If it&#8217;s something else that doesn&#8217;t seem obvious or if you&#8217;ve tried the above solutions without
+luck, you can ask for help on the
+<a href="https://groups.google.com/forum/#!forum/kudu-user">user mailing list</a>.</p>
+</li>
+</ul>
+</div>
+</li>
+</ol>
+</div>
+</div>
+<div class="sect2">
+<h3 id="required_config_without_cm"><a class="link" href="#required_config_without_cm">Required Configuration</a></h3>
+<div class="paragraph">
+<p>Additional configuration steps are required on each host before you can start Kudu services.</p>
+</div>
+<div class="olist arabic">
+<ol class="arabic">
+<li>
+<p>The packages create a <code>kudu-conf</code> entry in the operating system&#8217;s alternatives database,
+and they ship the built-in <code>conf.dist</code> alternative. To adjust your configuration,
+you can either edit the files in <code>/etc/kudu/conf/</code> directly, or create a new alternative
+using the operating system utilities, make sure it is the link pointed to by <code>/etc/kudu/conf/</code>,
+and create custom configuration files there. Some parts of the configuration are configured
+in <code>/etc/default/kudu-master</code> and <code>/etc/default/kudu-tserver</code> files as well. You
+should include or duplicate these configuration options if you create custom configuration files.</p>
+<div class="paragraph">
+<p>Review the configuration, including the default WAL and data directory locations,
+and adjust them according to your requirements.</p>
+</div>
+</li>
+</ol>
+</div>
+<div class="olist arabic">
+<ol class="arabic">
+<li>
+<p>Start Kudu services using the following commands:</p>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">$ sudo service kudu-master start
+$ sudo service kudu-tserver start</code></pre>
+</div>
+</div>
+</li>
+<li>
+<p>To stop Kudu services, use the following commands:</p>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">$ sudo service kudu-master stop
+$ sudo service kudu-tserver stop</code></pre>
+</div>
+</div>
+</li>
+<li>
+<p>Configure the Kudu services to start automatically when the server starts, by adding
+them to the default runlevel.</p>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">$ sudo chkconfig kudu-master on                # RHEL / CentOS
+$ sudo chkconfig kudu-tserver on               # RHEL / CentOS
+
+$ sudo update-rc.d kudu-master defaults        # Debian / Ubuntu
+$ sudo update-rc.d kudu-tserver defaults       # Debian / Ubuntu</code></pre>
+</div>
+</div>
+</li>
+<li>
+<p>For additional configuration of Kudu services, see <a href="configuration.html">Configuring
+Kudu</a>.</p>
+</li>
+</ol>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_build_from_source"><a class="link" href="#_build_from_source">Build From Source</a></h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>If installing Kudu using parcels or packages does not provide the flexibility you
+need, you can build Kudu from source. You can build from source on any supported operating system.</p>
+</div>
+<div class="admonitionblock warning">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-warning" title="Warning"></i>
+</td>
+<td class="content">
+<div class="title">Known Build Issues</div>
+<div class="ulist">
+<ul>
+<li>
+<p>It is not possible to build Kudu on Microsoft Windows.</p>
+</li>
+<li>
+<p>A C+11 capable compiler (GCC 4.8) is required.</p>
+</li>
+</ul>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="sect2">
+<h3 id="rhel_from_source"><a class="link" href="#rhel_from_source">RHEL or CentOS</a></h3>
+<div class="paragraph">
+<p>RHEL or CentOS 6.6 or later is required to build Kudu from source. To build
+on a version older than 7.0, the Red Hat Developer Toolset must be installed
+(in order to have access to a C++11 capable compiler).</p>
+</div>
+<div class="olist arabic">
+<ol class="arabic">
+<li>
+<p>Install the prerequisite libraries, if they are not installed.</p>
+<div class="listingblock">
+<div class="content">
+<pre>$ sudo yum install gcc gcc-c++ autoconf automake libtool \
+  boost-static boost-devel cyrus-sasl-devel \
+  cyrus-sasl-plain patch pkgconfig make rsync vim-common gdb git</pre>
+</div>
+</div>
+</li>
+<li>
+<p>If building on RHEL or CentOS older than 7.0, install the Red Hat Developer
+Toolset.</p>
+<div class="listingblock">
+<div class="content">
+<pre>$ DTLS_RPM=rhscl-devtoolset-3-epel-6-x86_64.noarch.rpm
+$ DTLS_RPM_URL=https://www.softwarecollections.org/en/scls/rhscl/devtoolset-3/epel-6-x86_64/download/${DTLS_RPM}
+$ wget ${DTLS_RPM_URL} -O ${DTLS_RPM}
+$ sudo yum install -y scl-utils ${DTLS_RPM}
+$ sudo yum install -y devtoolset-3-toolchain</pre>
+</div>
+</div>
+</li>
+<li>
+<p>Optional: Install the gem and ruby-devel packages, and the <code>asciidoctor</code> gem if you plan to build documentation.</p>
+<div class="listingblock">
+<div class="content">
+<pre>$ sudo yum install gem ruby-devel
+$ sudo gem install asciidoctor</pre>
+</div>
+</div>
+</li>
+<li>
+<p>Clone the Git repository and change to the new <code>kudu</code> directory.</p>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">$ git clone https://github.com/apache/incubator-kudu kudu
+$ cd kudu</code></pre>
+</div>
+</div>
+</li>
+<li>
+<p>Build any missing third-party requirements using the <code>build-if-necessary.sh</code> script. Not using
+the devtoolset will result in <code>Host compiler appears to require libatomic, but cannot find it.</code></p>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">$ build-support/enable_devtoolset.sh thirdparty/build-if-necessary.sh</code></pre>
+</div>
+</div>
+</li>
+<li>
+<p>Build Kudu, using the utilities installed in the previous step. Choose a build
+directory for the intermediate output, which can be anywhere in your filesystem
+except for the <code>kudu</code> directory itself. Notice that the devtoolset must still be specified,
+else you&#8217;ll get <code>cc1plus: error: unrecognized command line option "-std=c++11"</code>.</p>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">mkdir -p build/release
+cd build/release
+../../build-support/enable_devtoolset.sh \
+  ../../thirdparty/installed/bin/cmake \
+  -DCMAKE_BUILD_TYPE=release \
+  ../..
+make -j4</code></pre>
+</div>
+</div>
+</li>
+<li>
+<p>Optional: Install Kudu binaries, libraries, and headers.
+If you do not specify an installation directory through the <code>DESTDIR</code>
+environment variable, <code>/usr/local/</code> is the default.</p>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">sudo make DESTDIR=/opt/kudu install</code></pre>
+</div>
+</div>
+</li>
+<li>
+<p>Optional: Build the documentation. NOTE: This command builds local documentation that
+is not appropriate for uploading to the Kudu website.</p>
+<div class="listingblock">
+<div class="content">
+<pre>$ make docs</pre>
+</div>
+</div>
+</li>
+</ol>
+</div>
+<div class="exampleblock">
+<div class="title">Example 1. RHEL / CentOS Build Script</div>
+<div class="content">
+<div class="paragraph">
+<p>This script provides an overview of the procedure to build Kudu on a
+newly-installed RHEL or CentOS host, and can be used as the basis for an
+automated deployment scenario. It skips the steps marked <strong>Optional</strong> above.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">#!/bin/bash
+
+sudo yum -y install gcc gcc-c++ autoconf automake libtool \
+  boost-static boost-devel cyrus-sasl-devel \
+  cyrus-sasl-plain patch pkgconfig make rsync vim-common gdb git
+DTLS_RPM=rhscl-devtoolset-3-epel-6-x86_64.noarch.rpm
+DTLS_RPM_URL=https://www.softwarecollections.org/en/scls/rhscl/devtoolset-3/epel-6-x86_64/download/${DTLS_RPM}
+wget ${DTLS_RPM_URL} -O ${DTLS_RPM}
+sudo yum install -y scl-utils ${DTLS_RPM}
+sudo yum install -y devtoolset-3-toolchain
+cd kudu
+build-support/enable_devtoolset.sh thirdparty/build-if-necessary.sh
+mkdir -p build/release
+cd build/release
+../../build-support/enable_devtoolset.sh \
+  ../../thirdparty/installed/bin/cmake \
+  -DCMAKE_BUILD_TYPE=release \
+  ../..
+make -j4</code></pre>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="ubuntu_from_source"><a class="link" href="#ubuntu_from_source">Ubuntu or Debian</a></h3>
+<div class="olist arabic">
+<ol class="arabic">
+<li>
+<p>Install the prerequisite libraries, if they are not installed.</p>
+<div class="listingblock">
+<div class="content">
+<pre>$ sudo apt-get install git autoconf automake libboost-thread-dev \
+  libboost-system-dev curl gcc g++ libsasl2-dev libsasl2-modules \
+  libtool ntp patch pkg-config make rsync unzip vim-common gdb python</pre>
+</div>
+</div>
+</li>
+<li>
+<p>Optional: Install the <code>asciidoctor</code> gem and xsltproc if you plan to build documentation.</p>
+<div class="listingblock">
+<div class="content">
+<pre>$ sudo apt-get install asciidoctor xsltproc</pre>
+</div>
+</div>
+</li>
+<li>
+<p>Clone the Git repository and change to the new <code>kudu</code> directory.</p>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">$ git clone https://github.com/apache/incubator-kudu kudu
+$ cd kudu</code></pre>
+</div>
+</div>
+</li>
+<li>
+<p>Build any missing third-party requirements using the <code>build-if-necessary.sh</code> script.</p>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">$ thirdparty/build-if-necessary.sh</code></pre>
+</div>
+</div>
+</li>
+<li>
+<p>Build Kudu, using the utilities installed in the previous step. Choose a build
+directory for the intermediate output, which can be anywhere in your filesystem
+except for the <code>kudu</code> directory itself.</p>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">mkdir -p build/release
+cd build/release
+../../thirdparty/installed/bin/cmake -DCMAKE_BUILD_TYPE=release ../..
+make -j4</code></pre>
+</div>
+</div>
+</li>
+<li>
+<p>Optional: Install Kudu binaries, libraries, and headers.
+If you do not specify an installation directory through the <code>DESTDIR</code>
+environment variable, <code>/usr/local/</code> is the default.</p>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">sudo make DESTDIR=/opt/kudu install</code></pre>
+</div>
+</div>
+</li>
+<li>
+<p>Optional: Build the documentation. NOTE: This command builds local documentation that
+is not appropriate for uploading to the Kudu website.</p>
+<div class="listingblock">
+<div class="content">
+<pre>$ make docs</pre>
+</div>
+</div>
+</li>
+</ol>
+</div>
+<div class="exampleblock">
+<div class="title">Example 2. Ubuntu / Debian Build Script</div>
+<div class="content">
+<div class="paragraph">
+<p>This script provides an overview of the procedure to build Kudu on Ubuntu, and
+can be used as the basis for an automated deployment scenario. It skips
+the steps marked <strong>Optional</strong> above.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">#!/bin/bash
+
+sudo apt-get -y install git autoconf automake libboost-thread-dev \
+  libboost-system-dev curl gcc g++ libsasl2-dev libsasl2-modules \
+  libtool ntp patch pkg-config make rsync unzip vim-common gdb python
+git clone https://github.com/apache/incubator-kudu kudu
+cd kudu
+thirdparty/build-if-necessary.sh
+mkdir -p build/release
+cd build/release
+../../thirdparty/installed/bin/cmake \
+  -DCMAKE_BUILD_TYPE=release \
+  ../..
+make -j4</code></pre>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="sles_from_source"><a class="link" href="#sles_from_source">SUSE Linux Enterprise Server</a></h3>
+<div class="paragraph">
+<p>Building Kudu on SLES requires building Boost from source, since SLES does not
+have system packages containing Boost static libraries. Boost may be built
+anywhere, provided that the <code>BOOST_ROOT</code> environment variable is set to the
+location while invoking CMake to build Kudu. In the instructions below, Boost is
+built alongside Kudu.</p>
+</div>
+<div class="olist arabic">
+<ol class="arabic">
+<li>
+<p>Install the prerequisite libraries, if they are not installed.</p>
+<div class="listingblock">
+<div class="content">
+<pre>$ sudo zypper install autoconf automake curl cyrus-sasl-devel gcc gcc-c++ \
+  gdb git libtool make ntp patch pkg-config python rsync unzip vim</pre>
+</div>
+</div>
+</li>
+<li>
+<p>Install Boost.</p>
+<div class="listingblock">
+<div class="content">
+<pre>wget https://downloads.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz
+tar xzf boost_1_59_0.tar.gz
+pushd boost_1_59_0
+./bootstrap.sh
+./b2 --with-system --with-thread
+popd</pre>
+</div>
+</div>
+</li>
+<li>
+<p>Clone the Git repository and change to the new <code>kudu</code> directory.</p>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">$ git clone https://github.com/apache/incubator-kudu kudu
+$ cd kudu</code></pre>
+</div>
+</div>
+</li>
+<li>
+<p>Build any missing third-party requirements using the <code>build-if-necessary.sh</code> script.</p>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">$ thirdparty/build-if-necessary.sh</code></pre>
+</div>
+</div>
+</li>
+<li>
+<p>Build Kudu, using the utilities installed in the previous step. Choose a build
+directory for the intermediate output, which can be anywhere in your filesystem
+except for the <code>kudu</code> directory itself.</p>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">mkdir -p build/release
+cd build/release
+BOOST_ROOT=../../../boost_1_59_0 \
+  ../../thirdparty/installed/bin/cmake \
+  -DCMAKE_BUILD_TYPE=release \
+  ../..
+make -j4</code></pre>
+</div>
+</div>
+</li>
+<li>
+<p>Optional: Install Kudu binaries, libraries, and headers.
+If you do not specify an installation directory through the <code>DESTDIR</code>
+environment variable, <code>/usr/local/</code> is the default.</p>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">sudo make DESTDIR=/opt/kudu install</code></pre>
+</div>
+</div>
+</li>
+</ol>
+</div>
+<div class="exampleblock">
+<div class="title">Example 3. SLES Build Script</div>
+<div class="content">
+<div class="paragraph">
+<p>This script provides an overview of the procedure to build Kudu on SLES, and
+can be used as the basis for an automated deployment scenario. It skips
+the steps marked <strong>Optional</strong> above.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">#!/bin/bash
+
+sudo zypper install autoconf automake curl cyrus-sasl-devel gcc gcc-c++ \
+  gdb git libtool make ntp patch pkg-config python rsync unzip vim
+wget https://downloads.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz
+tar xzf boost_1_59_0.tar.gz
+pushd boost_1_59_0
+./bootstrap.sh
+./b2 --with-system --with-thread
+popd
+git clone https://github.com/apache/incubator-kudu kudu
+cd kudu
+thirdparty/build-if-necessary.sh
+mkdir -p build/release
+cd build/release
+BOOST_ROOT=../../../boost_1_59_0 \
+  ../../thirdparty/installed/bin/cmake \
+  -DCMAKE_BUILD_TYPE=release \
+  ../..
+make -j4</code></pre>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="osx_from_source"><a class="link" href="#osx_from_source">OS X</a></h3>
+<div class="paragraph">
+<p>The Xcode toolchain is necessary for compiling Kudu. Use <code>xcode-select --install</code>
+to install the Xcode Command Line Tools if Xcode is not already installed. These
+instructions use <a href="http://brew.sh/">Homebrew</a> to install dependencies, but
+manual dependency installation is possible.</p>
+</div>
+<div class="admonitionblock warning">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-warning" title="Warning"></i>
+</td>
+<td class="content">
+<div class="title">OS X Known Issues</div>
+<div class="paragraph">
+<p>Kudu support for OS X is experimental, and should only be used for development.
+See <a href="https://issues.cloudera.org/browse/KUDU-1219">OS X Limitations &amp; Known Issues</a>
+for more information.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="olist arabic">
+<ol class="arabic">
+<li>
+<p>Install the prerequisite libraries, if they are not installed.</p>
+<div class="listingblock">
+<div class="content">
+<pre>$ brew install autoconf automake cmake libtool pkg-config boost pstree</pre>
+</div>
+</div>
+</li>
+<li>
+<p>Clone the Git repository and change to the new <code>kudu</code> directory.</p>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">$ git clone https://github.com/apache/incubator-kudu kudu
+$ cd kudu</code></pre>
+</div>
+</div>
+</li>
+<li>
+<p>Build any missing third-party requirements using the <code>build-if-necessary.sh</code> script.</p>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">$ thirdparty/build-if-necessary.sh</code></pre>
+</div>
+</div>
+</li>
+<li>
+<p>Build Kudu. Choose a build directory for the intermediate output, which can be
+anywhere in your filesystem except for the <code>kudu</code> directory itself.</p>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">mkdir -p build/release
+cd build/release
+../../thirdparty/installed/bin/cmake -DCMAKE_BUILD_TYPE=release ../..
+make -j4</code></pre>
+</div>
+</div>
+</li>
+</ol>
+</div>
+<div class="exampleblock">
+<div class="title">Example 4. OSX Build Script</div>
+<div class="content">
+<div class="paragraph">
+<p>This script provides an overview of the procedure to build Kudu on OSX, and can
+be used as the basis for an automated deployment scenario. It assumes Xcode and Homebrew
+are installed.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>#!/bin/bash
+
+brew install autoconf automake cmake libtool pkg-config boost pstree
+git clone https://github.com/apache/incubator-kudu kudu
+cd kudu
+thirdparty/build-if-necessary.sh
+mkdir -p build/release
+cd build/release
+../../thirdparty/installed/bin/cmake -DCMAKE_BUILD_TYPE=release ../..
+make -j4</pre>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="build_cpp_client"><a class="link" href="#build_cpp_client">Installing the C++ Client Libraries</a></h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>If you need access to the Kudu client libraries for development,
+install the <code>kudu-client</code> and <code>kudu-client-devel</code> package for your platform.
+See <a href="#install_packages">Install Using Packages</a>.</p>
+</div>
+<div class="admonitionblock warning">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-warning" title="Warning"></i>
+</td>
+<td class="content">
+Only build against the client libraries and headers (<code>kudu_client.so</code> and <code>client.h</code>).
+Other libraries and headers are internal to Kudu and have no stability guarantees.
+</td>
+</tr>
+</table>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="build_java_client"><a class="link" href="#build_java_client">Build the Java Client</a></h2>
+<div class="sectionbody">
+<div class="ulist">
+<div class="title">Requirements</div>
+<ul>
+<li>
+<p>JDK 7</p>
+</li>
+<li>
+<p>Apache Maven 3.x</p>
+</li>
+<li>
+<p><code>protoc</code> 2.6 or newer installed in your path, or built from the <code>thirdparty/</code> directory.
+You can run the following commands to build <code>protoc</code> from the third-party dependencies:</p>
+</li>
+</ul>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>$ thirdparty/download-thirdparty.sh
+$ thirdparty/build-thirdparty.sh protobuf</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>To build the Java client, clone the Kudu Git
+repository, change to the <code>java</code> directory, and issue the following command:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">$ mvn install -DskipTests</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>For more information about building the Java API, as well as Eclipse integration,
+see <code>java/README.md</code>.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="view_api"><a class="link" href="#view_api">View API Documentation</a></h2>
+<div class="sectionbody">
+<div class="paragraph">
+<div class="title">C++ API Documentation</div>
+<p>The documentation for the C++ client APIs is included in the header files in
+<code>/usr/include/kudu/</code> if you installed Kudu using packages or subdirectories
+of <code>src/kudu/client/</code> if you built Kudu from source. If you installed Kudu using parcels,
+no headers are included in your installation. and you will need to <a href="#build_kudu">build
+Kudu from source</a> in order to have access to the headers and shared libraries.</p>
+</div>
+<div class="paragraph">
+<p>The following command is a naive approach to finding relevant header files. Use
+of any APIs other than the client APIs is unsupported.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">$ find /usr/include/kudu -type f -name *.h</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<div class="title">Java API Documentation</div>
+<p>You can view the <a href="../apidocs/index.html">Java API documentation</a> online. Alternatively,
+after <a href="#build_java_client">building the Java client</a>, Java API documentation is available
+in <code>java/kudu-client/target/apidocs/index.html</code>.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="upgrade"><a class="link" href="#upgrade">Upgrade from 0.7.1 to 0.8.0</a></h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Before upgrading, see <a href="#client_compatibility">Client compatibility</a> and <a href="#api_compatibility">API Compatibility</a>.
+To upgrade from Kudu 0.7.1 to 0.8.0, perform the following high-level steps, which
+are detailed in <a href="#upgrade_procedure">Upgrade procedure</a>:</p>
+</div>
+<div class="olist arabic">
+<ol class="arabic">
+<li>
+<p>Shut down all Kudu services.</p>
+</li>
+<li>
+<p>Install the new Kudu packages or parcels, or install Kudu 0.8.0 from source.</p>
+</li>
+<li>
+<p>Restart all Kudu services.</p>
+</li>
+</ol>
+</div>
+<div class="paragraph">
+<p>It is technically possible to upgrade Kudu using rolling restarts, but it has not
+been tested and is not recommended.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+For the duration of the Kudu Beta, upgrade instructions are only given for going
+from the previous latest version to the newest.
+</td>
+</tr>
+</table>
+</div>
+<div class="sect2">
+<h3 id="client_compatibility"><a class="link" href="#client_compatibility">Client compatibility</a></h3>
+<div class="paragraph">
+<p>Masters and tablet servers should be upgraded before clients are upgraded. For specific
+information about client compatibility, see the
+<a href="release_notes.html#rn_0.8.0_incompatible_changes">Incompatible Changes</a> section
+of the release notes.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="api_compatibility"><a class="link" href="#api_compatibility">API Compatibility</a></h3>
+<div class="paragraph">
+<p>The Kudu 0.8.0 client API is compatible with Kudu 0.7.1.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="upgrade_procedure"><a class="link" href="#upgrade_procedure">Upgrade procedure</a></h3>
+<div class="olist arabic">
+<ol class="arabic">
+<li>
+<p>Stop the Kudu master and tablet server services:</p>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">$ sudo service kudu-master stop
+$ sudo service kudu-tserver stop</code></pre>
+</div>
+</div>
+</li>
+<li>
+<p>Upgrade the packages.</p>
+<div class="ulist">
+<ul>
+<li>
+<p>On RHEL or CentOS hosts:</p>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">sudo yum clean all
+sudo yum upgrade kudu</code></pre>
+</div>
+</div>
+</li>
+<li>
+<p>On Ubuntu or Debian hosts:</p>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">sudo apt-get update
+sudo apt-get install kudu</code></pre>
+</div>
+</div>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p>Start the Kudu master and tablet server services:</p>
+<div class="listingblock">
+<div class="content">
+<pre class="highlight"><code class="language-bash" data-lang="bash">$ sudo service kudu-master start
+$ sudo service kudu-tserver start</code></pre>
+</div>
+</div>
+</li>
+</ol>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="next_steps"><a class="link" href="#next_steps">Next Steps</a></h2>
+<div class="sectionbody">
+<div class="ulist">
+<ul>
+<li>
+<p><a href="configuration.html">Configuring Kudu</a></p>
+</li>
+<li>
+<p><a href="administration.html">Kudu Administration</a></p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+    </div>
+    <div class="col-md-3">
+
+  <div id="toc" data-spy="affix" data-offset-top="70">
+  <ul>
+
+      <li>
+
+          <a href="introduction.html">Introducing Kudu</a> 
+      </li> 
+      <li>
+
+          <a href="release_notes.html">Kudu Release Notes</a> 
+      </li> 
+      <li>
+
+          <a href="quickstart.html">Getting Started with Kudu</a> 
+      </li> 
+      <li>
+<span class="active-toc">Installation Guide</span>
+            <ul class="sectlevel1">
+<li><a href="#_prerequisites_and_requirements">Prerequisites and Requirements</a></li>
+<li><a href="#install_packages">Install Using Packages</a>
+<ul class="sectlevel2">
+<li><a href="#_install_on_rhel_hosts">Install On RHEL Hosts</a></li>
+<li><a href="#_install_on_ubuntu_or_debian_hosts">Install On Ubuntu or Debian Hosts</a></li>
+<li><a href="#_verify_the_installation">Verify the Installation</a></li>
+<li><a href="#required_config_without_cm">Required Configuration</a></li>
+</ul>
+</li>
+<li><a href="#_build_from_source">Build From Source</a>
+<ul class="sectlevel2">
+<li><a href="#rhel_from_source">RHEL or CentOS</a></li>
+<li><a href="#ubuntu_from_source">Ubuntu or Debian</a></li>
+<li><a href="#sles_from_source">SUSE Linux Enterprise Server</a></li>
+<li><a href="#osx_from_source">OS X</a></li>
+</ul>
+</li>
+<li><a href="#build_cpp_client">Installing the C++ Client Libraries</a></li>
+<li><a href="#build_java_client">Build the Java Client</a></li>
+<li><a href="#view_api">View API Documentation</a></li>
+<li><a href="#upgrade">Upgrade from 0.7.1 to 0.8.0</a>
+<ul class="sectlevel2">
+<li><a href="#client_compatibility">Client compatibility</a></li>
+<li><a href="#api_compatibility">API Compatibility</a></li>
+<li><a href="#upgrade_procedure">Upgrade procedure</a></li>
+</ul>
+</li>
+<li><a href="#next_steps">Next Steps</a></li>
+</ul> 
+      </li> 
+      <li>
+
+          <a href="configuration.html">Configuring Kudu</a> 
+      </li> 
+      <li>
+
+          <a href="kudu_impala_integration.html">Using Impala with Kudu</a> 
+      </li> 
+      <li>
+
+          <a href="administration.html">Administering Kudu</a> 
+      </li> 
+      <li>
+
+          <a href="troubleshooting.html">Troubleshooting Kudu</a> 
+      </li> 
+      <li>
+
+          <a href="developing.html">Developing Applications with Kudu</a> 
+      </li> 
+      <li>
+
+          <a href="schema_design.html">Kudu Schema Design</a> 
+      </li> 
+      <li>
+
+          <a href="transaction_semantics.html">Kudu Transaction Semantics</a> 
+      </li> 
+      <li>
+
+          <a href="contributing.html">Contributing to Kudu</a> 
+      </li> 
+      <li>
+
+          <a href="style_guide.html">Kudu Documentation Style Guide</a> 
+      </li> 
+      <li>
+
+          <a href="configuration_reference.html">Kudu Configuration Reference</a> 
+      </li> 
+  </ul>
+  </div>
+    </div>
+  </div>
+</div>
\ No newline at end of file