| // Licensed to the Apache Software Foundation (ASF) under one |
| // or more contributor license agreements. See the NOTICE file |
| // distributed with this work for additional information |
| // regarding copyright ownership. The ASF licenses this file |
| // to you 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. |
| |
| [[installation]] |
| = Installing Apache Kudu |
| |
| :author: Kudu Team |
| :imagesdir: ./images |
| :icons: font |
| :toc: left |
| :toclevels: 3 |
| :doctype: book |
| :backend: html5 |
| :sectlinks: |
| :experimental: |
| |
| include::top.adoc[tags=version] |
| |
| The Apache Kudu project only publishes source code releases, to deploy Kudu on a |
| cluster follow the steps below to build Kudu from source. |
| |
| [[prerequisites_and_requirements]] |
| == Prerequisites and Requirements |
| .Hardware |
| - One or more hosts to run Kudu masters. It is recommended to have either one master (no fault |
| tolerance), or three masters (can tolerate one failure). The number of masters must be odd. |
| - One or more hosts to run Kudu tablet servers. When using replication, a minimum of three tablet |
| servers is necessary. |
| |
| WARNING: A deployment with an even number of masters provides the same level of fault tolerance as a |
| deployment with one fewer master. For example, both four-master and three-master deployments can |
| only tolerate a single failure; two-master deployments cannot tolerate any failures. |
| |
| .Operating System Requirements |
| Linux:: |
| - RHEL 7, RHEL 8, CentOS 7, CentOS 8, |
| Ubuntu 18.04 (bionic), Ubuntu 20.04 (focal) |
| - A kernel and filesystem that support _hole punching_. Hole punching is the use of the |
| `fallocate(2)` system call with the `FALLOC_FL_PUNCH_HOLE` option set. See |
| link:troubleshooting.html#req_hole_punching[troubleshooting hole punching] for more |
| information. |
| - ntp or chrony. |
| - xfs or ext4 formatted drives. |
| - Although not a strict requirement, it's highly recommended to use `nscd` |
| to cache both DNS name resolution and static name resolution. See |
| link:troubleshooting.html#slow_dns_nscd[troubleshooting slow DNS lookups] |
| for more information. |
| macOS:: |
| - macOS 10.13 (High Sierra), macOS 10.14 (Mojave), macOS 10.15 (Catalina), |
| macOS 11 (Big Sur), macOS 12 (Monterey) |
| |
| Windows:: |
| - Microsoft Windows is unsupported. |
| |
| .Storage |
| - 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. |
| |
| .Java |
| - JDK 8 is required to build Kudu, but a JRE is not required at runtime |
| except for tests. |
| |
| [[build_from_source]] |
| == Build From Source |
| |
| Below are the steps for each supported operating system to build Kudu from source. |
| |
| [WARNING] |
| .Known Build Issues |
| ==== |
| * It is not possible to build Kudu on Microsoft Windows. |
| * A C++17 capable compiler (GCC 7.0+) is required. |
| ==== |
| |
| [[rhel_from_source]] |
| === RHEL or CentOS |
| RHEL or CentOS 7.0 or later is required to build Kudu from source. To build |
| on a version older than 8.0, the Red Hat Developer Toolset must be installed |
| (in order to have access to a C++17 capable compiler). |
| |
| . Install the prerequisite libraries, if they are not installed. |
| + |
| ---- |
| $ sudo yum install autoconf automake cyrus-sasl-devel cyrus-sasl-gssapi \ |
| cyrus-sasl-plain flex gcc gcc-c++ gdb git java-1.8.0-openjdk-devel \ |
| krb5-server krb5-workstation libtool make openssl-devel patch \ |
| pkgconfig redhat-lsb-core rsync unzip vim-common which |
| ---- |
| |
| . If building on RHEL or CentOS older than 8.0, install the Red Hat Developer Toolset. |
| Below are the steps required for CentOS. If you are on RHEL, follow their documentation |
| https://developers.redhat.com/products/developertoolset/hello-world[here]. |
| + |
| ---- |
| $ sudo yum install centos-release-scl-rh |
| $ sudo yum install devtoolset-8 |
| ---- |
| |
| . Optional: If support for Kudu's NVM (non-volatile memory) block cache is |
| desired, install the memkind library. |
| + |
| ---- |
| $ sudo yum install memkind |
| ---- |
| + |
| If the memkind package provided with the Linux distribution is too old (1.8.0 or |
| newer is required), build and install it from source. |
| + |
| ---- |
| $ sudo yum install numactl-libs numactl-devel |
| $ git clone https://github.com/memkind/memkind.git |
| $ cd memkind |
| $ ./build.sh --prefix=/usr |
| $ sudo yum remove memkind |
| $ sudo make install |
| $ sudo ldconfig |
| ---- |
| |
| . Optional: Install some additional packages, including ruby, if you plan to build documentation. |
| + |
| ---- |
| $ sudo yum install gem graphviz ruby-devel zlib-devel |
| ---- |
| NOTE: If building on RHEL or CentOS older than 7.0, the gem package may need to be replaced with rubygems |
| + |
| NOTE: Doxygen 1.8.19 or later is required to build the documentation, which has to be |
| https://www.doxygen.nl/manual/install.html#install_src_unix[built from source manually]. Building |
| this version of Doxygen on CentOS or RHEL older than 8.0 also requires |
| https://www.softwarecollections.org/en/scls/rhscl/devtoolset-8/[devtoolset]. |
| |
| . Optional: Install `lsof` if you plan to run tests: |
| + |
| ---- |
| $ sudo yum install lsof |
| ---- |
| |
| . Clone the Git repository and change to the new `kudu` directory. |
| + |
| [source,bash] |
| ---- |
| $ git clone https://github.com/apache/kudu |
| $ cd kudu |
| ---- |
| |
| . Build any missing third-party requirements using the `build-if-necessary.sh` script. Not using |
| the devtoolset will result in `Host compiler appears to require libatomic, but cannot find it.` |
| + |
| [source,bash] |
| ---- |
| $ build-support/enable_devtoolset.sh thirdparty/build-if-necessary.sh |
| ---- |
| |
| . 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 `kudu` directory itself. Notice that the devtoolset must still be specified, |
| else you'll get `cc1plus: error: unrecognized command line option "-std=c++17"`. |
| + |
| [source,bash] |
| ---- |
| mkdir -p build/release |
| cd build/release |
| ../../build-support/enable_devtoolset.sh \ |
| ../../thirdparty/installed/common/bin/cmake \ |
| -DCMAKE_BUILD_TYPE=release ../.. |
| make -j4 |
| ---- |
| + |
| [NOTE] |
| ==== |
| If you need to install only a subset of Kudu executables, you can set the following `cmake` flags |
| to OFF in order to skip any of the executables. |
| |
| * KUDU_CLIENT_INSTALL (set to OFF to skip installing `/usr/local/bin/kudu` executable) |
| * KUDU_TSERVER_INSTALL (set to OFF to skip installing `/usr/local/sbin/kudu-tserver` executable) |
| * KUDU_MASTER_INSTALL (set to OFF to skip installing `/usr/local/sbin/kudu-master` executable) |
| |
| E.g., use the following variation of `cmake` command if you need to install only Kudu client |
| libraries and headers: |
| [source,bash] |
| ---- |
| ../../build-support/enable_devtoolset.sh \ |
| ../../thirdparty/installed/common/bin/cmake \ |
| -DKUDU_CLIENT_INSTALL=OFF \ |
| -DKUDU_MASTER_INSTALL=OFF \ |
| -DKUDU_TSERVER_INSTALL=OFF |
| -DCMAKE_BUILD_TYPE=release ../.. |
| ---- |
| ==== |
| . Optional: install Kudu executables, libraries and headers. |
| + |
| [NOTE] |
| ==== |
| Running `sudo make install` installs the following: |
| |
| * kudu-tserver and kudu-master executables in `/usr/local/sbin` |
| * Kudu command line tool in `/usr/local/bin` |
| * Kudu client library in `/usr/local/lib64/` |
| * Kudu client headers in `/usr/local/include/kudu` |
| ==== |
| + |
| The default installation directory is `/usr/local`. You can customize it through the `DESTDIR` |
| environment variable. |
| + |
| [source,bash] |
| ---- |
| sudo make DESTDIR=/opt/kudu install |
| ---- |
| + |
| . Optional: Build the documentation. NOTE: This command builds local documentation that |
| is not appropriate for uploading to the Kudu website. |
| + |
| ---- |
| $ make docs |
| ---- |
| |
| .RHEL / CentOS Build Script |
| ==== |
| 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 *Optional* above. |
| |
| [source,bash] |
| ---- |
| #!/bin/bash |
| |
| sudo yum -y install autoconf automake curl cyrus-sasl-devel cyrus-sasl-gssapi \ |
| cyrus-sasl-plain flex gcc gcc-c++ gdb git java-1.8.0-openjdk-devel \ |
| krb5-server krb5-workstation libtool make openssl-devel patch pkgconfig \ |
| redhat-lsb-core rsync unzip vim-common which |
| sudo yum -y install centos-release-scl-rh |
| sudo yum -y install devtoolset-8 |
| git clone https://github.com/apache/kudu |
| 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/common/bin/cmake \ |
| -DCMAKE_BUILD_TYPE=release \ |
| ../.. |
| make -j4 |
| ---- |
| ==== |
| |
| [[ubuntu_from_source]] |
| === Ubuntu or Debian |
| |
| . Install the prerequisite libraries, if they are not installed. |
| + |
| ---- |
| $ sudo apt-get install autoconf automake curl flex g++ gcc gdb git \ |
| krb5-admin-server krb5-kdc krb5-user libkrb5-dev libsasl2-dev libsasl2-modules \ |
| libsasl2-modules-gssapi-mit libssl-dev libtool lsb-release make ntp \ |
| openjdk-8-jdk openssl patch pkg-config python rsync unzip vim-common |
| ---- |
| |
| . Optional: If support for Kudu's NVM (non-volatile memory) block cache is |
| desired, install the memkind library. |
| + |
| ---- |
| $ sudo apt-get install libmemkind0 |
| ---- |
| + |
| If the memkind package provided with the Linux distribution is too old (1.8.0 or |
| newer is required), build and install it from source. |
| + |
| ---- |
| $ sudo apt-get install libnuma1 libnuma-dev |
| $ git clone https://github.com/memkind/memkind.git |
| $ cd memkind |
| $ ./build.sh --prefix=/usr |
| $ sudo apt-get remove memkind |
| $ sudo make install |
| $ sudo ldconfig |
| ---- |
| |
| . Optional: Install some additional packages, including ruby, if you plan to build documentation. |
| + |
| ---- |
| $ sudo apt-get install gem graphviz ruby-dev xsltproc zlib1g-dev |
| ---- |
| + |
| NOTE: Doxygen 1.8.19 or later is required to build the documentation, which has to be |
| https://www.doxygen.nl/manual/install.html#install_src_unix[built from source manually]. |
| |
| . Optional: Install `lsof` if you plan to run tests: |
| + |
| ---- |
| $ sudo apt-get install lsof |
| ---- |
| |
| . Clone the Git repository and change to the new `kudu` directory. |
| + |
| [source,bash] |
| ---- |
| $ git clone https://github.com/apache/kudu |
| $ cd kudu |
| ---- |
| |
| . Build any missing third-party requirements using the `build-if-necessary.sh` script. |
| + |
| [source,bash] |
| ---- |
| $ thirdparty/build-if-necessary.sh |
| ---- |
| |
| . 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 `kudu` directory itself. |
| + |
| [source,bash] |
| ---- |
| mkdir -p build/release |
| cd build/release |
| ../../thirdparty/installed/common/bin/cmake -DCMAKE_BUILD_TYPE=release ../.. |
| make -j4 |
| ---- |
| + |
| [NOTE] |
| ==== |
| If you need to install only a subset of Kudu executables, you can set the following `cmake` flags |
| to OFF in order to skip any of the executables. |
| |
| * KUDU_CLIENT_INSTALL (set to OFF to skip installing `/usr/local/bin/kudu` executable) |
| * KUDU_TSERVER_INSTALL (set to OFF to skip installing `/usr/local/sbin/kudu-tserver` executable) |
| * KUDU_MASTER_INSTALL (set to OFF to skip installing `/usr/local/sbin/kudu-master` executable) |
| |
| E.g., use the following variation of `cmake` command if you need to install only Kudu client |
| libraries and headers: |
| [source,bash] |
| ---- |
| ../../thirdparty/installed/common/bin/cmake \ |
| -DKUDU_CLIENT_INSTALL=OFF \ |
| -DKUDU_MASTER_INSTALL=OFF \ |
| -DKUDU_TSERVER_INSTALL=OFF |
| -DCMAKE_BUILD_TYPE=release ../.. |
| ---- |
| ==== |
| . Optional: install Kudu executables, libraries and headers. |
| + |
| [NOTE] |
| ==== |
| Running `sudo make install` installs the following: |
| |
| * kudu-tserver and kudu-master executables in `/usr/local/sbin` |
| * Kudu command line tool in `/usr/local/bin` |
| * Kudu client library in `/usr/local/lib64/` |
| * Kudu client headers in `/usr/local/include/kudu` |
| ==== |
| + |
| The default installation directory is `/usr/local`. You can customize it through the `DESTDIR` |
| environment variable. |
| + |
| [source,bash] |
| ---- |
| sudo make DESTDIR=/opt/kudu install |
| ---- |
| |
| . Optional: Build the documentation. NOTE: This command builds local documentation that |
| is not appropriate for uploading to the Kudu website. |
| + |
| ---- |
| $ make docs |
| ---- |
| |
| .Ubuntu / Debian Build Script |
| ==== |
| 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 *Optional* above. |
| |
| [source,bash] |
| ---- |
| #!/bin/bash |
| |
| sudo apt-get -y install autoconf automake curl flex g++ gcc gdb git \ |
| krb5-admin-server krb5-kdc krb5-user libkrb5-dev libsasl2-dev libsasl2-modules \ |
| libsasl2-modules-gssapi-mit libssl-dev libtool lsb-release make ntp \ |
| openjdk-8-jdk openssl patch pkg-config python rsync unzip vim-common |
| git clone https://github.com/apache/kudu |
| cd kudu |
| thirdparty/build-if-necessary.sh |
| mkdir -p build/release |
| cd build/release |
| ../../thirdparty/installed/common/bin/cmake \ |
| -DCMAKE_BUILD_TYPE=release ../.. |
| make -j4 |
| ---- |
| ==== |
| |
| [[sles_from_source]] |
| === SUSE Linux Enterprise Server (SLES) |
| |
| . Install the prerequisite libraries, if they are not installed. |
| + |
| ---- |
| $ sudo zypper install autoconf automake cmake curl cyrus-sasl-devel \ |
| cyrus-sasl-plain cyrus-sasl-gssapi flex gdb git gzip \ |
| java-1_8_0-openjdk-devel krb5-client krb5-server krb5-devel \ |
| libtool lsb-release make ntp patch pkg-config python rsync unzip vim |
| $ sudo zypper install libopenssl-devel |
| ---- |
| |
| . If building on something older than SLES 15: |
| + |
| ---- |
| $ sudo zypper install openssl-devel |
| ---- |
| |
| . Install `gcc8` and `gcc8-c++` (might require activating Development Tools |
| Module to add corresponding package repositories): |
| + |
| ---- |
| $ sudo zypper install gcc8 gcc8-c++ |
| ---- |
| |
| . NOTE: If building on SLES 15, the system compiler (GCC7) may be used |
| instead: |
| + |
| ---- |
| $ sudo zypper install gcc7 gcc7-c++ |
| ---- |
| |
| . Optional: If support for Kudu's NVM (non-volatile memory) block cache is |
| desired, install the memkind library. |
| + |
| ---- |
| $ sudo zypper install memkind |
| ---- |
| + |
| If the memkind package provided with the Linux distribution is too old (1.8.0 or |
| newer is required), build and install it from source. |
| + |
| ---- |
| $ sudo zypper install numactl-libs numactl-devel |
| $ git clone https://github.com/memkind/memkind.git |
| $ cd memkind |
| $ ./build.sh --prefix=/usr |
| $ sudo zypper remove memkind |
| $ sudo make install |
| $ sudo ldconfig |
| ---- |
| |
| . Optional: Install `lsof` if you plan to run tests: |
| + |
| ---- |
| $ sudo zypper install lsof |
| ---- |
| |
| . Clone the Git repository and change to the new `kudu` directory. |
| + |
| [source,bash] |
| ---- |
| $ git clone https://github.com/apache/kudu |
| $ cd kudu |
| ---- |
| |
| . Build any missing third-party requirements using the `build-if-necessary.sh` script. |
| + |
| [source,bash] |
| ---- |
| $ build-support/enable_devtoolset.sh thirdparty/build-if-necessary.sh |
| ---- |
| |
| . 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 `kudu` directory itself. |
| + |
| [source,bash] |
| ---- |
| mkdir -p build/release |
| cd build/release |
| ../../build-support/enable_devtoolset.sh \ |
| ../../thirdparty/installed/common/bin/cmake \ |
| -DCMAKE_BUILD_TYPE=release ../.. |
| make -j4 |
| ---- |
| + |
| [NOTE] |
| ==== |
| If you need to install only a subset of Kudu executables, you can set the following `cmake` flags |
| to OFF in order to skip any of the executables. |
| |
| * KUDU_CLIENT_INSTALL (set to OFF to skip installing `/usr/local/bin/kudu` executable) |
| * KUDU_TSERVER_INSTALL (set to OFF to skip installing `/usr/local/sbin/kudu-tserver` executable) |
| * KUDU_MASTER_INSTALL (set to OFF to skip installing `/usr/local/sbin/kudu-master` executable) |
| |
| E.g., use the following variation of `cmake` command if you need to install only Kudu client |
| libraries and headers: |
| [source,bash] |
| ---- |
| ../../build-support/enable_devtoolset.sh \ |
| ../../thirdparty/installed/common/bin/cmake \ |
| -DKUDU_CLIENT_INSTALL=OFF \ |
| -DKUDU_TSERVER_INSTALL=OFF \ |
| -DKUDU_MASTER_INSTALL=OFF |
| -DCMAKE_BUILD_TYPE=release ../.. |
| ---- |
| ==== |
| . Optional: install Kudu executables, libraries and headers. |
| + |
| [NOTE] |
| ==== |
| Running `sudo make install` installs the following: |
| |
| * kudu-tserver and kudu-master executables in `/usr/local/sbin` |
| * Kudu command line tool in `/usr/local/bin` |
| * Kudu client library in `/usr/local/lib64/` |
| * Kudu client headers in `/usr/local/include/kudu` |
| ==== |
| + |
| The default installation directory is `/usr/local`. You can customize it through the `DESTDIR` |
| environment variable. |
| + |
| [source,bash] |
| ---- |
| sudo make DESTDIR=/opt/kudu install |
| ---- |
| |
| .SLES Build Script |
| ==== |
| 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 *Optional* above. If running this on something older than |
| SLES 15, replace `libopenssl-devel` with `openssl-devel`. If running this |
| on SLES 15, the system compiler GCC7 may be used instead of GCC8 (i.e. |
| replace `gcc8` with `gcc7`, and `gcc8-c++` with `gcc7-c++` correspondingly). |
| |
| [source,bash] |
| ---- |
| #!/bin/bash |
| |
| sudo zypper install -y autoconf automake cmake curl cyrus-sasl-devel \ |
| cyrus-sasl-gssapi flex gdb git java-1_8_0-openjdk-devel \ |
| krb5-devel libtool lsb-release make ntp patch \ |
| pkg-config python rsync unzip vim |
| sudo zypper install gcc8 gcc8-c++ |
| sudo zypper install libopenssl-devel |
| git clone https://github.com/apache/kudu |
| 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/common/bin/cmake \ |
| -DCMAKE_BUILD_TYPE=release \ |
| ../.. |
| make -j4 |
| ---- |
| ==== |
| |
| [[osx_from_source]] |
| === macOS |
| Kudu works on both Intel and ARM based Macs (Apple M chips). |
| Kudu support for macOS is experimental, and should only be used for development. |
| |
| [WARNING] |
| .macOS Known Issues |
| ==== |
| See link:https://issues.apache.org/jira/browse/KUDU-1219[macOS Limitations & Known Issues] |
| for more information. For any test related issues please first check whether it's already tracked: |
| link:https://issues.apache.org/jira/browse/KUDU-2715[Get all tests passing on macOS]. |
| ==== |
| |
| The link:https://developer.apple.com/xcode/[Xcode] package is necessary for |
| compiling Kudu. Some of the instructions below use link:http://brew.sh/[Homebrew] |
| to install dependencies, but manual dependency installation is possible. |
| |
| [NOTE] |
| .ARM Macs |
| ==== |
| Apple introduced support for Apple silicon in Xcode version |
| link:https://developer.apple.com/documentation/xcode-release-notes/xcode-12_2-release-notes[12.2]. |
| To build Kudu on ARM-based Macs (Apple M chips), use Xcode of version 12.2 or above. |
| ==== |
| |
| After installing Xcode, don't forget to accept the license and install command-line |
| tools, if it's not done yet: |
| ---- |
| $ sudo xcodebuild -license |
| $ sudo xcode-select --install |
| ---- |
| |
| |
| . Install the prerequisite libraries, if they are not installed. |
| + |
| ---- |
| $ brew install autoconf automake cmake git krb5 libtool openssl@1.1 pkg-config pstree |
| ---- |
| |
| . Add OpenSSL to the pkg-config path. Kudu and thirdparty JWT fail to build without proper |
| OPENSSL_ROOT_DIR. If one sets the following environment variable, it takes care of both cases. |
| + |
| ---- |
| $ export PKG_CONFIG_PATH="$(brew --prefix openssl@1.1)/lib/pkgconfig:$PKG_CONFIG_PATH" |
| ---- |
| |
| . Optional: Install some additional packages, including ruby, if you plan to build documentation. |
| + |
| ---- |
| $ brew install doxygen graphviz ruby |
| $ brew install gnu-sed --with-default-names #The macOS default sed handles the -i parameter differently |
| ---- |
| |
| . Optional: Install `lsof` if you plan to run tests: |
| + |
| ---- |
| $ brew install lsof |
| ---- |
| |
| . Clone the Git repository and change to the new `kudu` directory. |
| + |
| [source,bash] |
| ---- |
| $ git clone https://github.com/apache/kudu |
| $ cd kudu |
| ---- |
| |
| . Build any missing third-party requirements using the `build-if-necessary.sh` script. |
| + |
| [source,bash] |
| ---- |
| $ thirdparty/build-if-necessary.sh |
| ---- |
| - If different versions of the dependencies are installed and used when calling |
| `thirdparty/build-if-necessary.sh`, you may get stuck with output similar to the |
| following: |
| + |
| ---- |
| ./configure: line 16299: error near unexpected token `newline' |
| ./configure: line 16299: ` PKG_CHECK_MODULES(' |
| ---- |
| + |
| 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. |
| + |
| [source,bash] |
| ---- |
| $ git clean -fdx |
| $ thirdparty/build-if-necessary.sh |
| ---- |
| |
| - Some combinations of Homebrew installations and system upgrades can result with a |
| different kind of error: |
| + |
| ---- |
| libtool: Version mismatch error. This is libtool 2.4.6, but the |
| libtool: definition of this LT_INIT comes from libtool 2.4.2. |
| libtool: You should recreate aclocal.m4 with macros from libtool 2.4.6 |
| libtool: and run autoconf again. |
| ---- |
| + |
| As described in this link:https://github.com/Homebrew/legacy-homebrew/issues/43874[thread], |
| a possible fix is to uninstall and reinstall libtool: |
| + |
| [source,bash] |
| ---- |
| $ brew uninstall libtool && brew install libtool |
| ---- |
| |
| . Build Kudu. Choose a build directory for the intermediate output, which can be |
| anywhere in your filesystem except for the `kudu` directory itself. |
| + |
| [source,bash] |
| ---- |
| mkdir -p build/release |
| cd build/release |
| ../../thirdparty/installed/common/bin/cmake \ |
| -DCMAKE_BUILD_TYPE=release \ |
| ../.. |
| make -j4 |
| ---- |
| |
| .macOS Build Script |
| ==== |
| This script provides an overview of the procedure to build Kudu on macOS, and can |
| be used as the basis for an automated deployment scenario. It assumes Xcode and Homebrew |
| are installed. |
| |
| ---- |
| #!/bin/bash |
| |
| brew tap homebrew/dupes |
| brew install autoconf automake cmake git krb5 libtool openssl pkg-config pstree |
| export PKG_CONFIG_PATH="$(brew --prefix openssl@1.1)/lib/pkgconfig:$PKG_CONFIG_PATH" |
| git clone https://github.com/apache/kudu |
| cd kudu |
| thirdparty/build-if-necessary.sh |
| mkdir -p build/release |
| cd build/release |
| ../../thirdparty/installed/common/bin/cmake \ |
| -DCMAKE_BUILD_TYPE=release \ |
| ../.. |
| make -j4 |
| ---- |
| ==== |
| |
| [[build_cpp_client]] |
| == Installing the C++ Client Libraries |
| |
| See the Kudu client install section at the bottom of <<build_from_source>> above. |
| |
| WARNING: Only build against the client libraries and headers (`kudu_client.so` and `client.h`). |
| Other libraries and headers are internal to Kudu and have no stability guarantees. |
| |
| [[build_java_client]] |
| == Build the Java Client |
| |
| .Requirements |
| - JDK 8 |
| |
| To build the Java client, clone the Kudu Git repository, change to the `java` |
| directory, and issue the following command: |
| |
| [source,bash] |
| ---- |
| $ ./gradlew assemble |
| ---- |
| |
| For more information on building the Java parts of the Kudu project, as well |
| as Eclipse integration, see `java/README.md`. |
| |
| [[upgrade]] |
| == Upgrade from a Previous Version of Kudu |
| |
| Before upgrading, you should read the link:release_notes.html[Release Notes] 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. |
| |
| WARNING: The following upgrade process is only relevant when you have binaries available. |
| |
| . Prepare the software. |
| - Place the new `kudu-tserver`, `kudu-master`, and `kudu` binaries into the appropriate |
| Kudu binary directory. |
| . Upgrade the tablet servers. |
| - Set the `follower_unavailable_considered_failed_sec` configuration to a high value |
| (conservatively, twice the expected restart time) to prevent tablet replicas hosted |
| on restarting tablet servers from being evicted and re-replicated. |
| + |
| [source,bash] |
| ---- |
| $ ./kudu tserver set_flag <tserver> follower_unavailable_considered_failed_sec 7200 |
| ---- |
| - Restart one tablet server. |
| - Wait for all tablet replicas on the tablet server to finish bootstrapping by viewing |
| `/tablets` page in the tablet server web UI. |
| - Restarting the tablet server will have reset the `follower_unavailable_considered_failed_sec` |
| configuration. Raise it again as needed. |
| - Repeat the previous 3 steps for the remaining tablet servers. |
| - Restore the original gflag value of every tablet server (the default is 5 minutes) |
| + |
| [source,bash] |
| ---- |
| $ ./kudu tserver set_flag <tserver> follower_unavailable_considered_failed_sec 300 |
| ---- |
| + |
| An example for a cluster with three tablet servers A, B, C: |
| + |
| [source,bash] |
| ---- |
| # Step 1: Set the unavailable time for every tablet server to a large value |
| $ ./kudu tserver set_flag A follower_unavailable_considered_failed_sec 7200 |
| $ ./kudu tserver set_flag B follower_unavailable_considered_failed_sec 7200 |
| $ ./kudu tserver set_flag C follower_unavailable_considered_failed_sec 7200 |
| |
| # Step 2: Restart the tablet server and reset the gflag one by one |
| <restart A and wait until A is online> |
| $ ./kudu tserver set_flag A follower_unavailable_considered_failed_sec 7200 |
| <restart B and wait until B is online> |
| $ ./kudu tserver set_flag B follower_unavailable_considered_failed_sec 7200 |
| <restart C and wait until C is online> |
| $ ./kudu tserver set_flag C follower_unavailable_considered_failed_sec 7200 |
| |
| # Step 3: Restore the default gflag value (5 minutes) for every tablet server |
| $ ./kudu tserver set_flag A follower_unavailable_considered_failed_sec 300 |
| $ ./kudu tserver set_flag B follower_unavailable_considered_failed_sec 300 |
| $ ./kudu tserver set_flag C follower_unavailable_considered_failed_sec 300 |
| ---- |
| + |
| . Upgrade the master servers. |
| - Restart the master server one by one. |
| |
| [[next_steps]] |
| == Next Steps |
| - link:configuration.html[Configuring Kudu] |
| - link:administration.html[Kudu Administration] |