ARM服务器编译安装ClickHouse

目录

一、编译安装ClickHouse背景

二、编译安装ClickHouse方法

三、编译安装ClickHouse环境

四、编译安装ClickHouse步骤

1,安装依赖项

2,编译安装cmake

3,编译安装GCC编译器

4,编译安装clang编译器

AArch64架构需要使用Clang编译器,X86架构可直接使用GCC编译器,不必做这步

5,编译安装ClickHouse

6,测试验证ClickHouse

7,编译过程遇到的问题


一、编译安装ClickHouse背景

因公司需要在华为泰山服务器验证开源软件安装及功能测试,AARCH64 (ARM64) 架构服务器,不支持SSE 4.2 指令集,在以前是试验性支持的,刚好ClickHouse release v19.17.4.11, 2019-11-22 新版本已经正式支持ARM64服务器,目前没有预编译好的版本,需要进行编译安装。

二、编译安装ClickHouse方法

* 先介绍下X86架构ClickHouse编译,我们常用的电脑都是X86处理器,直接在本地虚拟机使用GCC编译编译,不必搭建交叉编译环境。(本文主要介绍下面的交叉编译方法)

* 编译方法1:为AArch64 CPU进行构建ClickHouse,可搭建aarch64交叉编译环境:在x86架构服务器,构建出能在AARCH64 CPU 体系架构的Linux上运行的二进制程序(需要在Ubuntu or Debian 构建交叉编译环境)

交叉编译及交叉编译器
    在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译

什么时候需要交叉编译
    在一个平台上生成另一个平台上的可执行代码时
    注意这里的平台,实际上包含两个概念:体系结构(Architecture)、操作系统(OperatingSystem)
    同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行

* 编译方法2:直接在ARM64服务器上安装Clang等编译工具进行编译。

Clang 是一个 C++ 编写、基于 LLVM、发布于 LLVM BSD 许可证下的 C/C++/Objective C/Objective C++ 编译器,其目标(之一)就是超越 GCC。LLVM 是 Low Level Virtual Machine 的简称,这个库提供了与编译器相关的支持,能够进行程序语言的编译期优化、链接优化、在线编译优化、代码生成。简而言之,可以作为多种语言编译器的后台来使用。

三、编译安装ClickHouse环境

服务器硬件:TaiShan 200 2280服务器,Kunpeng 920 4826处理器,在其上搭建的KVM虚拟机;
建议服务器配置:8C/32G/100G,服务器需要能够连接互联网。

我的编译环境版本:

CentOS 7.6.1810 (4.14.0-115)
ClickHouse 19.17.4.11-stable
CMake 3.16.1
GCC 9.2.0
LLVM 10.0 (Clang 10.0)

登录虚拟机检测:

[root@vm31 ~]# uname -a
Linux vm39 4.14.0-115.el7a.0.1.aarch64 #1 SMP Sun Nov 25 20:54:21 UTC 2018 aarch64 aarch64 aarch64 GNU/Linux

To test for SSE 4.2, do
[root@vm31 ~]# grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"
SSE 4.2 not supported

#CPU核数
[root@yacevm2 ~]# cat /proc/cpuinfo |grep process|wc -l
4

#内存8G
[root@vm38 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           8086         635         548          27        6901        5146
Swap:          3071           0        3071

四、编译安装ClickHouse步骤

1,安装依赖项

yum install git svn pbuilder ninja-build

yum install libicu-devel readline-devel openssl-devel mysql-devel lz4-devel zlib-devel zstd-devel protobuf-devel gperf

2,编译安装cmake

wget https://github.com/Kitware/CMake/releases/download/v3.16.1/cmake-3.16.1.tar.gz

tar zxvf cmake-3.16.1.tar.gz

./bootstrap

make -j4 && make install

3,编译安装GCC编译器

GCC安装包下载地址

wget https://mirrors.nju.edu.cn/gnu/gcc/gcc-9.2.0/gcc-9.2.0.tar.xz

tar xvf gcc-9.2.0.tar.xz

cd gcc-9.2.0

./contrib/download_prerequisites

# 上面脚本会下载并解压下面的先决依赖包

# gmp-6.1.0.tar.bz2
# isl-0.18.tar.bz2
# mpfr-3.1.4.tar.bz2
# mpc-1.0.3.tar.gz

# GCC编译配置
./configure --enable-languages=c,c++ --disable-multilib  #disable-multilib表示编译64位
make -j 4  # -j 参数指定并行数,CPU核够用的话会快点
make install

ln -sf /usr/local/bin/gcc /usr/local/bin/gcc-9
ln -sf /usr/local/bin/g++ /usr/local/bin/g++-9
ln -sf /usr/local/bin/gcc /usr/local/bin/cc
ln -sf /usr/local/bin/g++ /usr/local/bin/c++

echo '/usr/local/lib64' | tee /etc/ld.so.conf.d/10_local-lib64.conf
ldconfig

ln -sf /usr/local/lib64/libstdc++.so.6.0.27 /usr/lib64/libstdc++.so.6
hash gcc g++ #这一步改变版本,这样就能使用刚刚安装的GCC版本了
gcc --version #即可看到最新版本

# 设置CC、CXX变量,指定编译器

export CC=gcc
export CXX=g++
 

4,编译安装clang编译器

AArch64架构需要使用Clang编译器,X86架构可直接使用GCC编译器,不必做这步

LLVM网站http://llvm.org

SVN项目地址http://llvm.org/svn/llvm-project/

安装文档:https://github.com/ClickHouse/ClickHouse/blob/master/utils/ci/build-clang-from-sources.sh

安装LLVM+Clang教程:https://blog.csdn.net/l2563898960/article/details/82871826

安装clang编译环境需要GCC 5.0.1 以上,正好使用上述编译的GCC9

mkdir llvm
svn co "http://llvm.org/svn/llvm-project/llvm/trunk" "llvm/llvm"
svn co "http://llvm.org/svn/llvm-project/cfe/trunk" "llvm/llvm/tools/clang"
svn co "http://llvm.org/svn/llvm-project/lld/trunk" "llvm/llvm/tools/lld"
svn co "http://llvm.org/svn/llvm-project/polly/trunk" "llvm/llvm/tools/polly"
svn co "http://llvm.org/svn/llvm-project/clang-tools-extra/trunk" "llvm/llvm/tools/clang/tools/extra"
svn co "http://llvm.org/svn/llvm-project/compiler-rt/trunk" "llvm/llvm/projects/compiler-rt"
svn co "http://llvm.org/svn/llvm-project/libcxx/trunk" "llvm/llvm/projects/libcxx"
svn co "http://llvm.org/svn/llvm-project/libcxxabi/trunk" "llvm/llvm/projects/libcxxabi"

mkdir "llvm/build"
cd "llvm/build"

cmake -DCMAKE_BUILD_TYPE:STRING=Release -DLLVM_ENABLE_LIBCXX=1 -DLLVM_ENABLE_RTTI=1 ../llvm

make -j 4
make install

hash clang

cd ../../..

export CC=clang
export CXX=clang++

[root@vm38 ~]# llvm-config --version
10.0.0svn

[root@vm38 ~]# clang --version
clang version 10.0.0 (trunk 375507)
Target: aarch64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/local/bin

cmake可添加-DCMAKE_INSTALL_PREFIX=/opt/llvm 参数,配置环境变量export PATH=$PATH:/opt/llvm/bin

5,编译安装ClickHouse

注册GitHub账户,克隆ClickHouse稳定版分支到本地,进入目录并下载子模块

git clone --branch v19.17.4.11-stable git@github.com:ClickHouse/ClickHouse.git

cd ClickHouse

git submodule update --init --recursive

mkdir -p build && cd build

cmake -DCMAKE_INSTALL_PREFIX=/opt/clickhouse ..

# Aarch64 服务器使用下面的cmake参数进行编译

cmake -DUSE_INTERNAL_LLVM_LIBRARY=1 -DCMAKE_INSTALL_PREFIX=/opt/clickhouse ..

# 在ARM服务器编译v19.17.4.11-stable版本ClickHouse时遇到jemalloc报错,如果你也遇到同样的错误,参照处理

# Aarch64服务器先检查代码,看下面JEMALLOC_PURGE_MADVISE_FREE是否被注释掉,如没有则加"//"注释

vi ./contrib/jemalloc-cmake/include_linux_aarch64/jemalloc/internal/jemalloc_internal_defs.h

// #define JEMALLOC_PURGE_MADVISE_FREE

# 更新所有文件时间戳,否则make时会有时钟告警

find . -type f |xargs touch

make -j 4
make install

生成的二进制文件只能在具有AARCH64 CPU体系结构的Linux上运行。

6,测试验证ClickHouse

把/opt/clickhouse拷贝走配置环境变量即可使用,不需要其他依赖包

先配置环境变量,然后从安装目录拷贝配置文件,放在/etc/clickhose-server/目录下

export PATH=/opt/clickhouse/bin:$PATH
export LD_LIBRARY_PATH=/opt/clickhouse/lib:$LD_LIBRARY_PATH

mkdir -p /etc/clickhouse-server/
cp /opt/clickhouse/etc/clickhouse-server/config.xml /etc/clickhouse-server/
cp /opt/clickhouse/etc/clickhouse-server/users.xml /etc/clickhouse-server/

nohup clickhouse-server --config-file=/etc/clickhouse-server/config.xml &
clickhouse-client

不加nohup & 可以另开一个shell使用客户端登陆,

clickhouse-client -m 启动客户端,-m表示开启多行输入;基本SQL语句和mysql类似。

select 1;

7,编译过程遇到的问题

1,磁盘空间问题

编译GCC build目录5.3G,LLVM(Clang)build目录4.3G,使用GCC编译ClickHouse build目录41G,使用Clang编译ClickHouse build目录27G;磁盘空间比较紧张,本地VMware虚拟机、泰山服务器扩了好次盘。

2,服务器配置低,编译速度慢,编译过程“Out of memory”,因此建议使用CPU/内存较高的机器编译ClickHouse;友情提示:cmake命令会输出建议并行数供参考。

3,开始时编译ClickHouse遇到jemalloc报错,在cmake时禁用jemalloc,使用如下参数:

cmake .. -DENABLE_TCMALLOC=OFF -DENABLE_JEMALLOC=OFF -DCMAKE_INSTALL_PREFIX=/opt/clickhouse

仍然报错,在GitHub社区提交issues:

https://github.com/ClickHouse/ClickHouse/issues/8027

有部分函数未针对特定计算机正确配置;

Fix misconfigured jemalloc #8243
https://github.com/ClickHouse/ClickHouse/pull/8243

在ARM架构部分jemalloc-cmake代码配置中,将JEMALLOC_PURGE_MADVISE_FREE这个函数注释掉,将 MADV_FREE 替换为 MADV_DONTNEED 只会使 jemalloc 稍微变慢。

目前的版本还是需要手工改下这个地方。2019年12月18日 开始 v19.19版本以上应该就不用改了

4,X86架构Ubuntu服务器搭建ARM交叉编译环境可以参考官网:https://clickhouse.yandex/docs/en/development/build_cross_arm/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值