Apache Kudu项目只发布源代码版本,要在集群上部署Kudu,请按照以下步骤从源代码构建Kudu。

3.1、先决条件和要求

硬件

  • 运行Kudu主机的一个或多个主机。建议使用一个主节点(无容错)或三个主节点(可以容错)。大师的数量必须是奇数。
  • 运行Kudu平板服务器的一台或多台主机。当使用复制时,至少需要三个平板服务器。

拥有偶数个主机的部署与拥有较少一个主机的部署所提供的容错级别相同。例如,4 -master和3 -master部署都只能容忍单个故障;双主机部署不能容忍任何故障。

操作系统需求
Linux

  • RHEL 7、RHEL 8、CentOS 7、CentOS 8、Ubuntu 18.04 (bionic)、Ubuntu 20.04 (focal)
  • 支持打孔的内核和文件系统。打孔是使用FALLOC_FL_PUNCH_HOLE选项设置的fallocate(2)系统调用。有关更多信息,请参见故障排除打孔。
  • ntp或chrony。
  • XFS或ext4格式化驱动器。
  • 尽管这不是一个严格的要求,但是强烈建议使用nscd来缓存DNS名称解析和静态名称解析。有关更多信息,请参见排除DNS查找速度缓慢的故障。

macOS

  • macOS 10.13 (High Sierra), macOS 10.14 (Mojave), macOS 10.15 (Catalina)

windows

  • 不支持Microsoft Windows。

存储

  • 如果固态存储可用,那么当将Kudu配置为最高的持久性级别时,在这种高性能媒体上存储Kudu wall可以显著改善延迟。

Java

  • 构建Kudu需要JDK 8,但运行时不需要JRE(除了测试)。

3.2、从源代码构建

下面是每个受支持的操作系统从源代码构建Kudu的步骤。

已知的构建问题

  • 在Microsoft Windows上构建Kudu是不可能的。
  • 需要一个C+17编译器(GCC 7.0)。

3.2.1、RHEL或CentOS

从源代码构建Kudu需要RHEL或CentOS 7.0或更高版本。要在8.0以上的版本上构建,必须安装Red Hat开发人员工具集(为了能够访问c++ 17的编译器)。

1、安装必要的库(如果没有安装)。

  1. $ sudo yum install autoconf automake cyrus-sasl-devel cyrus-sasl-gssapi \
  2. cyrus-sasl-plain flex gcc gcc-c++ gdb git java-1.8.0-openjdk-devel \
  3. krb5-server krb5-workstation libtool make openssl-devel patch \
  4. pkgconfig redhat-lsb-core rsync unzip vim-common which

2、RHEL或CentOS 8.0以上版本,需安装Red Hat开发人员工具集。以下是CentOS所需的步骤。如果您使用RHEL,请参考他们的文档。

  1. $ sudo yum install centos-release-scl-rh
  2. $ sudo yum install devtoolset-8

3、可选:如果需要支持Kudu的NVM(非易失性内存)块缓存,安装memkind库。

  1. $ sudo yum install memkind

如果Linux发行版提供的memkind包太旧(需要1.8.0或更新版本),请从源代码构建并安装它。

  1. $ sudo yum install numactl-libs numactl-devel
  2. $ git clone https://github.com/memkind/memkind.git
  3. $ cd memkind
  4. $ ./build.sh --prefix=/usr
  5. $ sudo yum remove memkind
  6. $ sudo make install
  7. $ sudo ldconfig

4、可选:如果计划构建文档,则安装一些附加包,包括ruby。

  1. $ sudo yum install gem graphviz ruby-devel zlib-devel
  • 如果在RHEL或CentOS 7.0以上版本上构建,gem包可能需要用rubygems替换构建文档
  • 需要Doxygen 1.8.19或更高版本,必须从源代码手动构建文档。在CentOS或RHEL 8.0以上版本上构建Doxygen也需要devtoolset。

5、克隆Git存储库并切换到新的kudu目录。

  1. $ git clone https://github.com/apache/kudu
  2. $ cd kudu

6、使用Build -if-necessary.sh脚本构建任何缺失的第三方需求。不使用devtoolset将导致Host编译器似乎需要libatomic,但无法找到它。

  1. $ build-support/enable_devtoolset.sh thirdparty/build-if-necessary.sh

7、使用上一步中安装的实用程序构建Kudu。为中间输出选择一个构建目录,它可以位于文件系统中的任何位置,除了kudu目录本身。注意,必须指定devtoolset,否则会得到cc1plus: error: unrecognized command line option “-std=c++17”。

  1. mkdir -p build/release
  2. cd build/release
  3. ../../build-support/enable_devtoolset.sh \
  4. ../../thirdparty/installed/common/bin/cmake \
  5. -DCMAKE_BUILD_TYPE=release ../..
  6. make -j4

如果只需要安装一部分Kudu可执行文件,可以将下面的cmake标志设置为OFF,以便跳过任何可执行文件。

  • KUDU_CLIENT_INSTALL(设置为OFF跳过安装/usr/local/bin/kudu可执行文件)
  • KUDU_TSERVER_INSTALL(设置为OFF跳过安装/usr/local/sbin/kudu-tserver可执行文件)
  • KUDU_MASTER_INSTALL(设置为OFF跳过安装/usr/local/sbin/kudu-master可执行文件)

例如,如果你只需要安装Kudu客户端库和头文件,使用以下变种的cmake命令:

  1. ../../build-support/enable_devtoolset.sh \
  2. ../../thirdparty/installed/common/bin/cmake \
  3. -DKUDU_CLIENT_INSTALL=OFF \
  4. -DKUDU_MASTER_INSTALL=OFF \
  5. -DKUDU_TSERVER_INSTALL=OFF
  6. -DCMAKE_BUILD_TYPE=release ../..

8、可选:安装Kudu可执行文件、库和头文件。

运行sudo make install将安装以下内容:

  • /usr/local/sbin目录下的Kudu-tserver和kudu-master可执行文件
  • /usr/local/bin目录下的Kudu命令行工具
  • /usr/local/lib64/下的Kudu客户端库
  • Kudu客户端头文件在/usr/local/include/kudu

默认安装目录为“/usr/local”。您可以通过环境变量DESTDIR自定义它。

  1. sudo make DESTDIR=/opt/kudu install

9、可选:构建文档。注意:该命令构建的本地文档不适合上传到Kudu网站。

  1. $ make docs

例1:RHEL / CentOS构建脚本
该脚本概述了在新安装的RHEL或CentOS主机上构建Kudu的过程,可作为自动部署场景的基础。它跳过上面标记为可选的步骤。

  1. #!/bin/bash
  2. sudo yum -y install autoconf automake curl cyrus-sasl-devel cyrus-sasl-gssapi \
  3. cyrus-sasl-plain flex gcc gcc-c++ gdb git java-1.8.0-openjdk-devel \
  4. krb5-server krb5-workstation libtool make openssl-devel patch pkgconfig \
  5. redhat-lsb-core rsync unzip vim-common which
  6. sudo yum -y install centos-release-scl-rh
  7. sudo yum -y install devtoolset-8
  8. git clone https://github.com/apache/kudu
  9. cd kudu
  10. build-support/enable_devtoolset.sh thirdparty/build-if-necessary.sh
  11. mkdir -p build/release
  12. cd build/release
  13. ../../build-support/enable_devtoolset.sh \
  14. ../../thirdparty/installed/common/bin/cmake \
  15. -DCMAKE_BUILD_TYPE=release \
  16. ../..
  17. make -j4

3.2.2、Ubuntu or Debian

1、安装必要的库(如果没有安装)。

  1. $ sudo apt-get install autoconf automake curl flex g++ gcc gdb git \
  2. krb5-admin-server krb5-kdc krb5-user libkrb5-dev libsasl2-dev libsasl2-modules \
  3. libsasl2-modules-gssapi-mit libssl-dev libtool lsb-release make ntp \
  4. openjdk-8-jdk openssl patch pkg-config python rsync unzip vim-common

2、可选:如果需要支持Kudu的NVM(非易失性内存)块缓存,安装memkind库。

  1. $ sudo apt-get install libmemkind0

如果Linux发行版提供的memkind包太旧(需要1.8.0或更新版本),请从源代码构建并安装它。

  1. $ sudo apt-get install libnuma1 libnuma-dev
  2. $ git clone https://github.com/memkind/memkind.git
  3. $ cd memkind
  4. $ ./build.sh --prefix=/usr
  5. $ sudo apt-get remove memkind
  6. $ sudo make install
  7. $ sudo ldconfig

3、可选:如果计划构建文档,则安装一些附加包,包括ruby。

  1. $ sudo apt-get install gem graphviz ruby-dev xsltproc zlib1g-dev

构建文档需要Doxygen 1.8.19或更高版本,必须从源代码手动构建文档。

4、克隆Git存储库并切换到新的kudu目录。

  1. $ git clone https://github.com/apache/kudu
  2. $ cd kudu

5、使用Build -if-necessary.sh脚本构建任何缺失的第三方需求。

  1. $ thirdparty/build-if-necessary.sh

6、使用上一步中安装的实用程序构建Kudu。为中间输出选择一个构建目录,它可以位于文件系统中的任何位置,除了kudu目录本身。

  1. mkdir -p build/release
  2. cd build/release
  3. ../../thirdparty/installed/common/bin/cmake -DCMAKE_BUILD_TYPE=release ../..
  4. make -j4

如果只需要安装一部分Kudu可执行文件,可以将下面的cmake标志设置为OFF,以便跳过任何可执行文件。

  • KUDU_CLIENT_INSTALL(设置为OFF跳过安装/usr/local/bin/kudu可执行文件)
  • KUDU_TSERVER_INSTALL(设置为OFF跳过安装/usr/local/sbin/kudu-tserver可执行文件)
  • KUDU_MASTER_INSTALL(设置为OFF跳过安装/usr/local/sbin/kudu-master可执行文件)

例如,如果你只需要安装Kudu客户端库和头文件,使用以下变种的cmake命令:

  1. ../../thirdparty/installed/common/bin/cmake \
  2. -DKUDU_CLIENT_INSTALL=OFF \
  3. -DKUDU_MASTER_INSTALL=OFF \
  4. -DKUDU_TSERVER_INSTALL=OFF
  5. -DCMAKE_BUILD_TYPE=release ../..

7、可选:安装Kudu可执行文件、库和头文件。
运行sudo make install将安装以下内容:

  • /usr/local/sbin目录下的Kudu-tserver和kudu-master可执行文件
  • /usr/local/bin目录下的Kudu命令行工具
  • /usr/local/lib64/下的Kudu客户端库
  • Kudu客户端头文件在/usr/local/include/kudu

默认安装目录为“/usr/local”。您可以通过环境变量DESTDIR自定义它。

  1. sudo make DESTDIR=/opt/kudu install

8、可选:构建文档。注意:该命令构建的本地文档不适合上传到Kudu网站。

  1. $ make docs

例2。Ubuntu / Debian构建脚本
该脚本概述了在Ubuntu上构建Kudu的过程,可以作为自动部署场景的基础。它跳过上面标记为可选的步骤。

  1. #!/bin/bash
  2. sudo apt-get -y install autoconf automake curl flex g++ gcc gdb git \
  3. krb5-admin-server krb5-kdc krb5-user libkrb5-dev libsasl2-dev libsasl2-modules \
  4. libsasl2-modules-gssapi-mit libssl-dev libtool lsb-release make ntp \
  5. openjdk-8-jdk openssl patch pkg-config python rsync unzip vim-common
  6. git clone https://github.com/apache/kudu
  7. cd kudu
  8. thirdparty/build-if-necessary.sh
  9. mkdir -p build/release
  10. cd build/release
  11. ../../thirdparty/installed/common/bin/cmake \
  12. -DCMAKE_BUILD_TYPE=release ../..
  13. make -j4

3.3.3、SUSE Linux企业服务器

1、安装必要的库(如果没有安装)。

  1. $ sudo zypper install autoconf automake curl cyrus-sasl-devel \
  2. cyrus-sasl-gssapi flex gcc gcc-c++ gdb git java-1_8_0-openjdk-devel \
  3. krb5-devel krb5-server libtool lsb-release make ntp openssl-devel patch \
  4. pkg-config python rsync unzip vim

2、如果您是在SUSE 12或更早版本上构建,请安装GCC-8。

  1. $ sudo zypper install gcc8 gcc8-c++

3、可选:如果需要支持Kudu的NVM(非易失性内存)块缓存,安装memkind库。+ __

  1. $ sudo zypper install memkind

如果Linux发行版提供的memkind包太旧(需要1.8.0或更新版本),请从源代码构建并安装它。

  1. $ sudo zypper install numactl-libs numactl-devel
  2. $ git clone https://github.com/memkind/memkind.git
  3. $ cd memkind
  4. $ ./build.sh --prefix=/usr
  5. $ sudo zypper remove memkind
  6. $ sudo make install
  7. $ sudo ldconfig

1.克隆Git存储库并切换到新的kudu目录。

  1. $ git clone https://github.com/apache/kudu
  2. $ cd kudu

2.使用Build -if-necessary.sh脚本构建任何缺失的第三方需求。

  1. $ build-support/enable_devtoolset.sh thirdparty/build-if-necessary.sh

3.使用上一步中安装的实用程序构建Kudu。为中间输出选择一个构建目录,它可以位于文件系统中的任何位置,除了kudu目录本身。

  1. mkdir -p build/release
  2. cd build/release
  3. ../../build-support/enable_devtoolset.sh \
  4. ../../thirdparty/installed/common/bin/cmake \
  5. -DCMAKE_BUILD_TYPE=release ../..
  6. make -j4

如果只需要安装一部分Kudu可执行文件,可以将下面的cmake标志设置为OFF,以便跳过任何可执行文件。

  • KUDU_CLIENT_INSTALL(设置为OFF跳过安装/usr/local/bin/kudu可执行文件)
  • KUDU_TSERVER_INSTALL(设置为OFF跳过安装/usr/local/sbin/kudu-tserver可执行文件)
  • KUDU_MASTER_INSTALL(设置为OFF跳过安装/usr/local/sbin/kudu-master可执行文件)

例如,如果你只需要安装Kudu客户端库和头文件,使用以下变种的cmake命令:

  1. ../../build-support/enable_devtoolset.sh \
  2. ../../thirdparty/installed/common/bin/cmake \
  3. -DKUDU_CLIENT_INSTALL=OFF \
  4. -DKUDU_TSERVER_INSTALL=OFF \
  5. -DKUDU_MASTER_INSTALL=OFF
  6. -DCMAKE_BUILD_TYPE=release ../..

4.可选:安装Kudu可执行文件、库和头文件。
运行sudo make install将安装以下内容:

  • /usr/local/sbin目录下的Kudu-tserver和kudu-master可执行文件
  • /usr/local/bin目录下的Kudu命令行工具
  • /usr/local/lib64/下的Kudu客户端库
  • Kudu客户端头文件在/usr/local/include/kudu

默认安装目录为“/usr/local”。您可以通过环境变量DESTDIR自定义它。

  1. sudo make DESTDIR=/opt/kudu install

例3。SLES构建脚本
该脚本概述了在SLES上构建Kudu的过程,可作为自动部署场景的基础。它跳过上面标记为可选的步骤。

  1. #!/bin/bash
  2. sudo zypper install -y autoconf automake curl cyrus-sasl-devel \
  3. cyrus-sasl-gssapi flex gcc gcc-c++ gdb git java-1_8_0-openjdk-devel \
  4. krb5-devel libtool lsb-release make ntp openssl-devel patch \
  5. pkg-config python rsync unzip vim
  6. sudo zypper install gcc8 gcc8-c++
  7. git clone https://github.com/apache/kudu
  8. cd kudu
  9. build-support/enable_devtoolset.sh thirdparty/build-if-necessary.sh
  10. mkdir -p build/release
  11. cd build/release
  12. ../../build-support/enable_devtoolset.sh \
  13. ../../thirdparty/installed/common/bin/cmake \
  14. -DCMAKE_BUILD_TYPE=release \
  15. ../..
  16. make -j4

3.3.4、macos

Xcode包是编译Kudu所必需的。下面的一些说明使用Homebrew来安装依赖项,但是也可以手动安装依赖项。
在安装Xcode之后,如果还没有完成,不要忘记接受许可并安装命令行工具:

  1. $ sudo xcodebuild -license
  2. $ sudo xcode-select --install

macOS已知问题
对macOS的Kudu支持是实验性的,应该只用于开发。有关更多信息,请参阅macOS限制和已知问题。

1、安装必要的库(如果没有安装)。

  1. $ brew install autoconf automake cmake git krb5 libtool openssl pkg-config pstree

2、可选:如果计划构建文档,则安装一些附加包,包括ruby。

  1. $ brew install doxygen graphviz ruby
  2. $ brew install gnu-sed --with-default-names #The macOS default sed handles the -i parameter differently

3、克隆Git存储库并切换到新的kudu目录。

  1. $ git clone https://github.com/apache/kudu
  2. $ cd kudu

4、使用Build -if-necessary.sh脚本构建任何缺失的第三方需求。

  1. $ thirdparty/build-if-necessary.sh
  • 如果在调用thirdparty/build-if-necessary.sh时安装和使用了不同版本的依赖,你可能会遇到类似如下的输出:

    1. ./configure: line 16299: error near unexpected token `newline'
    2. ./configure: line 16299: ` PKG_CHECK_MODULES('

    第三方构建可能被缓存,并可能反映依赖项的不正确版本。确保您拥有步骤1中列出的正确依赖项,清理工作区,然后尝试重新构建。

    1. $ git clean -fdx
    2. $ thirdparty/build-if-necessary.sh
  • 一些自制软件安装和系统升级的组合可能会导致不同类型的错误:

    1. libtool: Version mismatch error.  This is libtool 2.4.6, but the
    2. libtool: definition of this LT_INIT comes from libtool 2.4.2.
    3. libtool: You should recreate aclocal.m4 with macros from libtool 2.4.6
    4. libtool: and run autoconf again.

    如本线程所述,一个可能的修复方法是卸载并重新安装libtool:

    1. $ brew uninstall libtool && brew install libtool

    5、构建捻角羚。为中间输出选择一个构建目录,它可以位于文件系统中的任何位置,除了kudu目录本身。

    1. mkdir -p build/release
    2. cd build/release
    3. ../../thirdparty/installed/common/bin/cmake \
    4. -DCMAKE_BUILD_TYPE=release \
    5. -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl \
    6. ../..
    7. make -j4

    例4。macOS构建脚本
    该脚本概述了在macOS上构建Kudu的过程,可作为自动部署场景的基础。它假设已经安装了Xcode和Homebrew。 ```bash

    !/bin/bash

brew tap homebrew/dupes brew install autoconf automake cmake git krb5 libtool openssl 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/common/bin/cmake \ -DCMAKE_BUILD_TYPE=release \ -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl \ ../.. make -j4

  1. <a name="slpgU"></a>
  2. ## 3.3、安装c++客户端库
  3. 请参阅上面Build From Source底部的Kudu客户端安装部分。<br />_仅根据客户端库和头文件(kudu_client。所以和client.h)。其他库和头文件是Kudu内部的,没有稳定性保证。_
  4. <a name="VBYbh"></a>
  5. ## 3.4、构建Java客户端
  6. **需求**<br />JDK 8
  7. 要构建Java客户端,克隆Kudu Git库,切换到Java目录,并发出以下命令:
  8. ```bash
  9. $ ./gradlew assemble

有关构建Kudu项目的Java部分以及Eclipse集成的更多信息,请参见Java /README.md。

3.5、从以前版本的Kudu升级

在升级之前,您应该阅读要安装的Kudu版本的发布说明。密切关注不兼容性、升级和降级说明的记录。
以下升级过程仅在有可用的二进制文件时才相关。

1、准备软件。

  • 将新的kudu-tserver、kudu-master和kudu二进制文件放入适当的kudu二进制目录中。

2、升级平板服务器。

  • 将follower_unavailable_considered_failed_sec配置设置为一个高值(保守地说,是预期重启时间的两倍),以防止在重新启动的平板服务器上托管的平板复制被排除和重新复制。

    1. $ ./kudu tserver set_flag <tserver> follower_unavailable_considered_failed_sec 7200
  • 重新启动一台平板电脑服务器。

  • 等待tablet服务器上的所有tablet副本通过在tablet服务器web UI中查看/tablet页面来完成引导。
  • 重新启动平板电脑服务器将重置follower_unavailable_considered_failed_sec配置。需要时再举起来。
  • 对其余的平板服务器重复上述3个步骤。
  • 恢复每个平板服务器的gflag值(默认为5分钟)
    1. $ ./kudu tserver set_flag <tserver> follower_unavailable_considered_failed_sec 300
    一个包含三台平板服务器a、B、C的集群示例: ```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

$ ./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 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 ``` 3、升级主服务器。

  • 逐个重启主服务器。