目录

一、编译安装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/

ARM服务器编译安装ClickHouse相关推荐

  1. 鲲鹏arm服务器编译安装PaddlePaddle

    不废话了,开撸! 官方教程 官方教程里面很多没有讲解到,安装过程中出现了各种各样的问题,以下是对官方教程的补充,有什么问题,欢迎指正! 一.cmake Paddle依赖cmake进行编译构建,需要cm ...

  2. linux ntpd服务器,Linux运维知识之Linux升级NTPD服务器-编译安装ntp-4.2.8p9与配置NTPD服务器...

    本文主要向大家介绍了Linux运维知识之Linux升级NTPD服务器-编译安装ntp-4.2.8p9与配置NTPD服务器,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. 1. 系 ...

  3. mysql 5.6 linux 64_Linux64位服务器编译安装MySQL5.6(CentOS6.4)

    首先到MySQL官网下载MySQL最新版(目前是mysql-5.6.12)上传到服务器上,下面说一下详细的安装过程. 安装依赖包,可以在线更新也可以配置本地源(CentOS本地源配置) yum -y ...

  4. 技术分享 | 国产麒麟 arm 上编译安装 xtrabackup8

    作者:王向 爱可生 DBA 团队成员,负责公司 DMP 产品的运维和客户 MySQL 问题的处理.擅长数据库故障处理.对数据库技术和 python 有着浓厚的兴趣. 本文来源:原创投稿 *爱可生开源社 ...

  5. linux安装ntpd服务端,Linux升级NTPD服务器-编译安装ntp-4.2.8p9与配置NTPD服务器

    1. 系统与软件版本 1.1 系统版本 CentOS6.5 x86_64 1.2 ntpd软件版本 ntp-4.2.8p9.tar.gz 1.3 下载地址 官方下载地址:http://support. ...

  6. squid3.0缓存服务器编译安装

    squid的官方站点http://www.squid-cache.org/下载最新发布版本 #tar zxvf squid-3.0.STABLE13.tar.gz #cd squid-3.0.STAB ...

  7. linux-centos7中lnmp服务器编译安装含systemctl启动service(转)

    centos7 nginx  mysql  php 可以分开安装  然后在配置nginx互php的 先安装一些必要的库 ---------------------------------------- ...

  8. LAMP架构之编译安装httpd+(php-fpm)+mariadb

    php-fpm: CentOS 6: PHP-5.3.2-:默认不支持fpm机制:需要自行打补丁并编译安装: httpd-2.2:默认不支持fcgi协议,需要自行编译此模块: 解决方案:编译安装htt ...

  9. CentOS下编译安装LAMP开发环境

    http://www.linuxidc.com/Linux/2011-10/45743.htm 配置PHP开发环境前获取软件包.笔者用的mysql版本是社区版本的.主要软件包有: httpd,mysq ...

最新文章

  1. 《构建高可用Linux服务器》样书
  2. 查看.net frameword版本
  3. 实验6_MPEG音频编码实验
  4. TCp传输粘包问题
  5. P4 前端编译器p4c-bm、后端编译器bmv2命令安装 make error问题
  6. lora无线通信模块LoRa技术在智能家居灯控上的应用
  7. Redis配置文件详解(redis.conf)
  8. 开发大型高负载类网站应用的几个要点
  9. 三个版本Eclipse区别
  10. UVALive - 5713 最小生成树
  11. 利用Matlab寻找曲线的拐点
  12. 【迅雷VIP体验】免费获得迅雷会员,享受高速下载通道
  13. 服务器虚拟化2种架构,服务器虚拟化常用架构详解
  14. 内存继续涨价 LPDDR4/LPDDR4X内存标准升级
  15. java汉字字符串转拼音
  16. 大数据时代BI平台何去何从
  17. 力扣 179. 最大数
  18. Sequoia DB数据库操作
  19. EM算法原理和python简单实现
  20. ISO22000食品安全体系认证流程

热门文章

  1. 关于脚踝不得不说的各种事
  2. csdn博客使用反馈,bug
  3. 苹果x看html文字有黑线,iPhonex屏幕旁边出现绿线怎么回事 iPhonex屏幕旁边绿线是什么问题...
  4. 鸿蒙麒麟食华为的什么系统,你好,鸿蒙!华为自研系统真的来了,还有麒麟、朱雀.........
  5. ode45 求常微分非线性方程
  6. 基于微信视频分享平台小程序设计与实现 开题报告
  7. adb学习:八:多个设备时候指定操作某个设备
  8. 准备好收集 BreederDAO 徽章了吗?
  9. OpenNLP学习笔记1
  10. Zxing jar的下载地址