blob: 61cca2cfec6a94fc7a12bca2e9102146d2120538 [file] [log] [blame]
<!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" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<meta name="description" content="A new open source Apache Hadoop ecosystem project, Apache Kudu completes Hadoop's storage layer to enable fast analytics on fast data" />
<meta name="author" content="Cloudera" />
<title>Apache Kudu - Installing Apache Kudu</title>
<!-- Bootstrap core CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"
integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7"
crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="/css/kudu.css" rel="stylesheet"/>
<link href="/css/asciidoc.css" rel="stylesheet"/>
<link rel="shortcut icon" href="/img/logo-favicon.ico" />
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css" />
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="kudu-site container-fluid">
<!-- Static navbar -->
<nav class="navbar navbar-default">
<div class="container-fluid">
<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>
<a class="logo" href="/"><img
src="//d3dr9sfxru4sde.cloudfront.net/i/k/apachekudu_logo_0716_80px.png"
srcset="//d3dr9sfxru4sde.cloudfront.net/i/k/apachekudu_logo_0716_80px.png 1x, //d3dr9sfxru4sde.cloudfront.net/i/k/apachekudu_logo_0716_160px.png 2x"
alt="Apache Kudu"/></a>
</div>
<div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav navbar-right">
<li >
<a href="/">Home</a>
</li>
<li >
<a href="/overview.html">Overview</a>
</li>
<li class="active">
<a href="/docs/">Documentation</a>
</li>
<li >
<a href="/releases/">Download</a>
</li>
<li >
<a href="/blog/">Blog</a>
</li>
<!-- NOTE: this dropdown menu does not appear on Mobile, so don't add anything here
that doesn't also appear elsewhere on the site. -->
<li class="dropdown">
<a href="/community.html" role="button" aria-haspopup="true" aria-expanded="false">Community <span class="caret"></span></a>
<ul class="dropdown-menu">
<li class="dropdown-header">GET IN TOUCH</li>
<li><a class="icon email" href="/community.html">Mailing Lists</a></li>
<li><a class="icon slack" href="https://getkudu-slack.herokuapp.com/">Slack Channel</a></li>
<li role="separator" class="divider"></li>
<li><a href="/community.html#meetups-user-groups-and-conference-presentations">Events and Meetups</a></li>
<li><a href="/committers.html">Project Committers</a></li>
<!--<li><a href="/roadmap.html">Roadmap</a></li>-->
<li><a href="/community.html#contributions">How to Contribute</a></li>
<li role="separator" class="divider"></li>
<li class="dropdown-header">DEVELOPER RESOURCES</li>
<li><a class="icon github" href="https://github.com/apache/incubator-kudu">GitHub</a></li>
<li><a class="icon gerrit" href="http://gerrit.cloudera.org:8080/#/q/status:open+project:kudu">Gerrit Code Review</a></li>
<li><a class="icon jira" href="https://issues.apache.org/jira/browse/KUDU">JIRA Issue Tracker</a></li>
<li role="separator" class="divider"></li>
<li class="dropdown-header">SOCIAL MEDIA</li>
<li><a class="icon twitter" href="https://twitter.com/ApacheKudu">Twitter</a></li>
</ul>
</li>
<li >
<a href="/faq.html">FAQ</a>
</li>
</ul><!-- /.nav -->
</div><!-- /#navbar -->
</div><!-- /.container-fluid -->
</nav>
<!--
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</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 a Previous Version of Kudu</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>One or more hosts to run Kudu masters. It is recommended to have either one master
(no fault tolerance), three masters (can tolerate one failure), or five masters (two failures).</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, CentOS 6, CentOS 7, Ubuntu 14.04 (Trusty), Ubuntu 16.04 (Xenial), Debian 8 (Jessie), 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 or CentOS</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 or CentOS 6</a>,
<a href="http://archive.cloudera.com/beta/kudu/redhat/7/x86_64/kudu/cloudera-kudu.repo">RHEL 7 or CentOS 7</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/RPMS/x86_64/">RHEL 6 or CentOS 6</a>,
<a href="http://archive.cloudera.com/beta/kudu/redhat/7/x86_64/kudu/0/RPMS/x86_64/">RHEL 7 or CentOS 7</a></p></td>
</tr>
<tr>
<td class="tableblock halign-right valign-top"><p class="tableblock"><strong>SLES</strong></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="http://archive.cloudera.com/beta/kudu/sles/12/x86_64/kudu/cloudera-kudu.repo">SLES 12</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="http://archive.cloudera.com/beta/kudu/sles/12/x86_64/kudu/0/RPMS/x86_64/">SLES 12</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>,
<a href="http://archive.cloudera.com/beta/kudu/ubuntu/xenial/amd64/kudu/cloudera.list">Xenial</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>,
<a href="http://archive.cloudera.com/beta/kudu/ubuntu/xenial/amd64/kudu/pool/contrib/k/kudu/">Xenial</a></p></td>
</tr>
<tr>
<td class="tableblock halign-right valign-top"><p class="tableblock"><strong>Debian</strong></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="http://archive.cloudera.com/beta/kudu/debian/jessie/amd64/kudu/cloudera.list">Jessie</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="http://archive.cloudera.com/beta/kudu/debian/jessie/amd64/kudu/pool/contrib/k/kudu/">Jessie</a></p></td>
</tr>
</tbody>
</table>
<div class="sect2">
<h3 id="_install_on_rhel_or_centos_hosts"><a class="link" href="#_install_on_rhel_or_centos_hosts">Install on RHEL or CentOS 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, using 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, after saving the <code>cloudera-kudu.repo</code> file to <code>/etc/yum.repos.d/</code>.</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> to install them.</p>
</li>
<li>
<p>Note: the <code>kudu-master</code> and <code>kudu-tserver</code> packages are only necessary on hosts
where there is a master or tserver respectively (and completely unnecessary if
using Cloudera Manager). Each provides configuration files and an init.d script to
manage the corresponding Kudu process. Once installed, the Kudu process is started
and stopped automatically when the host starts up and shuts down.</p>
</li>
</ol>
</div>
</div>
<div class="sect2">
<h3 id="_install_on_sles_hosts"><a class="link" href="#_install_on_sles_hosts">Install on SLES 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, using the appropriate link from <a href="#kudu_package_locations">Kudu Package Locations</a>.</p>
</li>
<li>
<p>If using a Zypper repository, use the following commands to install Kudu packages on
each host, after saving the <code>cloudera-kudu.repo</code> file to <code>/etc/zypp/repos.d</code>.</p>
<div class="listingblock">
<div class="content">
<pre>sudo zypper install kudu # Base Kudu files
sudo zypper install kudu-master # Kudu master init.d service script and default configuration
sudo zypper install kudu-tserver # Kudu tablet server init.d service script and default configuration
sudo zypper install kudu-client0 # Kudu C++ client shared library
sudo zypper 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> to install them.</p>
</li>
<li>
<p>Note: the <code>kudu-master</code> and <code>kudu-tserver</code> packages are only necessary on hosts
where there is a master or tserver respectively (and completely unnecessary if
using Cloudera Manager). Each provides configuration files and an init.d script to
manage the corresponding Kudu process. Once installed, the Kudu process is started
and stopped automatically when the host starts up and shuts down.</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 after saving the <code>cloudera.list</code> file to <code>/etc/apt/sources.list.d/</code>.</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 the Kudu RPMs, first download them, then use the command
<code>sudo rpm -ivh &lt;RPM to install&gt;</code> to install them.</p>
</li>
<li>
<p>Note: the <code>kudu-master</code> and <code>kudu-tserver</code> packages are only necessary on hosts
where there is a master or tserver respectively (and completely unnecessary if
using Cloudera Manager). Each provides configuration files and an init.d script to
manage the corresponding Kudu process. Once installed, the Kudu process is started
and stopped automatically when the host starts up and shuts down.</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="http://kudu.apache.org/community.html">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 / SLES
$ sudo chkconfig kudu-tserver on # RHEL / CentOS / SLES
$ 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 cyrus-sasl-devel \
cyrus-sasl-plain patch pkgconfig make rsync vim-common gdb unzip redhat-lsb-core 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 some additional packages, including ruby, if you plan to build documentation.</p>
<div class="listingblock">
<div class="content">
<pre>$ sudo yum install gem ruby-devel zlib-devel</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/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 cyrus-sasl-devel \
cyrus-sasl-plain patch pkgconfig make rsync vim-common gdb unzip redhat-lsb-core 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 \
curl gcc g++ libsasl2-dev libsasl2-modules \
libtool ntp patch pkg-config make rsync unzip vim-common gdb python lsb-release</pre>
</div>
</div>
</li>
<li>
<p>Optional: Install additional packages to build the documentation</p>
<div class="listingblock">
<div class="content">
<pre>$ sudo apt-get install xsltproc zlib1g-dev</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/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 \
curl gcc g++ libsasl2-dev libsasl2-modules \
libtool ntp patch pkg-config make rsync unzip vim-common gdb python lsb-release
git clone https://github.com/apache/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="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 lsb-release</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/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>
</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 lsb-release
git clone https://github.com/apache/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="osx_from_source"><a class="link" href="#osx_from_source">OS X</a></h3>
<div class="paragraph">
<p>The <a href="https://developer.apple.com/xcode/">Xcode</a> package is necessary for
compiling Kudu. Some of the instructions below 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 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/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>
<div class="ulist">
<ul>
<li>
<p>If different versions of the dependencies are installed and used when calling
<code>thirdparty/build-if-necessary.sh</code>, you may get stuck with output similar to the
following:</p>
<div class="listingblock">
<div class="content">
<pre>./configure: line 16299: error near unexpected token `newline'
./configure: line 16299: ` PKG_CHECK_MODULES('</pre>
</div>
</div>
<div class="paragraph">
<p>The thirdparty builds may be cached and may reflect the incorrect versions of the
dependencies. Ensure that you have the correct dependencies listed in Step 1, clean
the workspace, and then try to re-build.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-bash" data-lang="bash">$ git clean -fdx
$ thirdparty/build-if-necessary.sh</code></pre>
</div>
</div>
</li>
</ul>
</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 pstree
git clone https://github.com/apache/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 a Previous Version of Kudu</a></h2>
<div class="sectionbody">
<div class="paragraph">
<p>Before upgrading, you should read the <a href="release_notes.html">Release Notes</a> for
the version of Kudu that you are about to install. Pay close attention to the
incompatibilities, upgrade, and downgrade notes that are documented there.</p>
</div>
<div class="paragraph">
<p>Additionally, during the beta period:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Upgrades are only supported when going from the previous latest version to
the newest released version.</p>
</li>
<li>
<p>Rolling upgrades are not supported. Please shut down all Kudu services before
upgrading the software.</p>
</li>
</ul>
</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 SLES hosts:</p>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-bash" data-lang="bash">sudo zypper clean --all
sudo zypper update 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="index.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_or_centos_hosts">Install on RHEL or CentOS Hosts</a></li>
<li><a href="#_install_on_sles_hosts">Install on SLES 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 a Previous Version of Kudu</a>
<ul class="sectlevel2">
<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>
<footer class="footer">
<p class="small">
Copyright &copy; 2016 The Apache Software Foundation. Last updated 2016-09-08 16:11:36 PDT
</p>
</footer>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
// Try to detect touch-screen devices. Note: Many laptops have touch screens.
$(document).ready(function() {
if ("ontouchstart" in document.documentElement) {
$(document.documentElement).addClass("touch");
} else {
$(document.documentElement).addClass("no-touch");
}
});
</script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"
integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS"
crossorigin="anonymous"></script>
<script>
(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','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-68448017-1', 'auto');
ga('send', 'pageview');
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/anchor-js/3.1.0/anchor.js"></script>
<script>
anchors.options = {
placement: 'right',
visible: 'touch',
};
anchors.add();
</script>
</body>
</html>