StarRocks在arm架构Linux服务器上的源码编译

2023/03/17 更新

最近斥巨资和同事租了华为云的服务器,编译了社区版2.5.3版的源码,有需要的可以点个赞,私信我,要阿里云盘链接下载。

————————————————————————————————————

背景:

文章内容大致如题,开始先介绍一下背景:

1.StarRocks版本是2.1.11官方社区版源码,基本上安装流程大同小异,需要源码的gitub自取。

        GitHub - StarRocks/starrocks: StarRocks is a next-gen sub-second MPP database for full analytics scenarios, including multi-dimensional analytics, real-time analytics and ad-hoc query.StarRocks is a next-gen sub-second MPP database for full analytics scenarios, including multi-dimensional analytics, real-time analytics and ad-hoc query. - GitHub - StarRocks/starrocks: StarRocks is a next-gen sub-second MPP database for full analytics scenarios, including multi-dimensional analytics, real-time analytics and ad-hoc query.https://github.com/StarRocks/starrocks

2.主要安装流程是根据StarRocks社区大佬的流程来的,但是我安装的环境属于内网,没办法联网,所有的maven依赖以及相关的依赖都是手动下载导入的,过程还是很费劲的,一路踩坑。本文主要依据这份流程,补充一下我遇到的问题以及解决方法。

ARM环境手动编译StarRocks-2.1(分享) - 安装部署与监控 - StarRocks中文社区论坛

3.没耐心的可以直接拉到最后,下载我编译好的arm包,私信我获取也ok

4.本笔记主要是针对在arm架构的CentOS系统上编译,x86架构的服务器(有axv2指令集)直接官网下载tar包解压即可。

 一、安装gcc-10.1.0

        这个阶段一般需要依次安装四个组件gmp-6.1.0、mpfr-3.1.4、mpc-1.0.3、isl-0.18,在这四个组件安装完成之后,再进行gcc-10.1.0安装。过程中需要注意:

1.组件安装位置

gmp-6.1.0、mpfr-3.1.4、mpc-1.0.3、isl-0.18不要放在gcc源码解压后的目录中,这四个目录是相互独立的,不要存在嵌套关系。pdf中说的是:

解压这四个依赖,然后移动到 gcc-10.1.0 源码目录下,并重命名为 gmp、isl、mpc、mpfr。 下载并安装 automake-1.15(因为gcc10编译过程中会查找automake 1.15 版本)”

此处亲测会产生问题,需要注意。

下图分别是:tar包,tar包解压后的文件夹,编译后的文件夹。

编译完成后目录里有文件可视作编译安装成功,编译过程中会存在缺少组件的情况,缺啥装啥。

2.组件编译安装时,主要带参数

2.1 因为我使用的不是root权限,所以编译的时候记得带参数,放到指定路径。

#进入mpfr解压后的路径,mpfr是我自己手动创建的目录
./configure --prefix=/.../mpfr
make && make install

2.2 四个组件都按照这样的方式进行安装,安装完成后,配一下环境变量,source一下。

“...”根据自己环境来,mpfr/gmp/isl/mpc/  这四个路径是安装完成后的。

# 这些路径改成刚刚新建的路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/.../mpc/lib:/.../gmp/lib:/.../mpfr/lib/:/.../isl/lib

2.3 这三个都完成后可以开始编译gcc了

./configure后面的参数路径根据自己环境进行填充,顺利的话gcc的编译需要大约2~3小时完成。

cd /.../gcc-10.1.0
# 这里记得改成自己的路径!
./configure --prefix=/data2/fangmiaoCV/users/ziwen/envs/gcc --with-gmp=/.../gmp/ --with-mpfr=/.../mpfr/ --with-mpc=/.../mpc/ --with-isl=/.../isl  --with-system-zlib --disable-multilib

# 清空环境变量
unset LIBRARY_PATH CPATH C_INCLUDE_PATH PKG_CONFIG_PATH CPLUS_INCLUDE_PATH INCLUDE
make && make install

2.4 完成之后,将新版本的gcc路径配置到/etc/profile中,source一下,使用一下 gcc -v查看一下自己的版本,是不是变成gcc-10了,顺利的话就完成了gcc的安装。

这个过程参考了这位大佬的笔记,如果你遇到了问题可以看看这篇能否有帮助:

Linux下无root权限配置GCC环境 - 知乎

export PATH=/data/starrocks/package/gcc/bin:/data/starrocks/package/gcc/lib64:$PATH
export LD_LIBRARY_PATH=/data/starrocks/package/gcc/lib/:$LD_LIBRARY_PATH
[deployer@xxx package]$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/data/starrocks/package/gcc/libexec/gcc/aarch64-unknown-linux-gnu/10.1.0/lto-wrapper
Target: aarch64-unknown-linux-gnu
Configured with: ./configure --prefix=/data/starrocks/package/gcc --with-gmp=/data/starrocks/package/gmp/ --with-mpfr=/data/starrocks/package/mpfr/ --with-mpc=/data/starrocks/package/mpc/ --with-isl=/data/starrocks/package/isl/ --with-system-zlib --disable-multilib
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 10.1.0 (GCC) 

二、编译StarRocks三方库

安装完了gcc,下面需要到/starrocks-2.1.11/thirdparty这个路径进行第三方包的安装。

这个主要就两个执行两个sh就可以完成。

2.1 download-thirdparty.sh

你的环境如果有网,可以直接运行这个脚本下载相关的第三方库。

需要在同级目录下手动创建一个src的目录用来放第三方压缩包。

vars.sh里面记录了部分jar包的下载路径,如果你没办法连yum的话需要手动下载下来。

整个download脚本的逻辑是:下载三方包,比对md5值是否相同,不相同的话会去文件里github路径进行下载。所以你下载包的时候需要根据他提供的路径去下,不然md5值不一样没办法进行编译。(压缩包放在上图src路径下,自己建的那个src)我这个版本的starrocks用到了以下包,可以自己校对一下。
 

drwxr-xr-x.  2 deployer deployer       122 Dec  8  2021 aliyun-oss-sdk-3.7.2
-rwxrwxr-x.  1 deployer deployer  59870673 Dec 10  2021 aliyun-oss-sdk-3.7.2.tar.gz
drwxrwxr-x. 19 deployer deployer      4096 Jul 22  2021 arrow-apache-arrow-5.0.0
drwxrwxr-x. 19 deployer deployer      4096 Jul 22  2021 arrow-apache-arrow-5.0.0.bak
-rwxrwxr-x.  1 deployer deployer   8207488 Oct 17 19:03 arrow-apache-arrow-5.0.0.tar.gz
-rwxrwxr-x.  1 deployer deployer  40935824 Oct 17 19:22 aws-sdk-cpp-1.9.179.tar.gz
drwxr-xr-x.  9 deployer deployer       240 Sep 15  2020 bisheng-jdk1.8.0_262
-rwxrwxr-x.  1 deployer deployer 105856083 Oct 18 10:10 bisheng-jdk-8u262-linux-aarch64.tar.gz
drwxrwxr-x.  7 deployer deployer      4096 Oct 20 23:33 bitshuffle-0.3.5
-rwxrwxr-x.  1 deployer deployer    112312 Oct 17 19:03 bitshuffle-0.3.5.tar.gz
drwxr-xr-x.  9 deployer deployer      4096 Oct 19 15:55 boost_1_75_0
-rwxrwxr-x.  1 deployer deployer 143817536 Dec  4  2020 boost_1_75_0.tar.gz
drwxrwxr-x.  9 deployer deployer      4096 Mar  9  2021 breakpad-d6a6f52606529111b9f0ade9a0e0d9040fa97c1f
-rwxrwxr-x.  1 deployer deployer   6252431 Oct 17 19:20 breakpad-d6a6f52606529111b9f0ade9a0e0d9040fa97c1f.zip
drwxrwxr-x.  7 deployer deployer      4096 Aug 27  2020 brotli-1.0.9
-rwxrwxr-x.  1 deployer deployer    486984 Oct 17 19:03 brotli-1.0.9.tar.gz
drwxrwxr-x.  2 deployer deployer      4096 Oct 18 17:11 bzip2-1.0.8
-rwxrwxr-x.  1 deployer deployer    810029 Jul 14  2019 bzip2-1.0.8.tar.gz
drwxrwxr-x.  7 deployer deployer      4096 Oct 19 18:53 cctz-2.3
-rwxrwxr-x.  1 deployer deployer    302002 Oct 17 19:15 cctz-2.3.tar.gz
drwxrwxr-x.  9 deployer deployer      4096 Oct 19 18:52 CRoaring-0.2.60
-rwxrwxr-x.  1 deployer deployer 100543016 Oct 17 19:07 CRoaring-0.2.60.tar.gz
drwxr-xr-x. 14 deployer deployer      4096 Oct 19 15:57 curl-7.79.0
-rwxrwxr-x.  1 deployer deployer   4148066 Sep 15  2021 curl-7.79.0.tar.gz
drwxrwxr-x. 25 deployer deployer      4096 Oct 19 11:04 flatbuffers-1.10.0
-rwxrwxr-x.  1 deployer deployer    817750 Oct 17 19:03 flatbuffers-v1.10.0.tar.gz
drwxrwxr-x.  8 deployer deployer      4096 Oct 19 18:53 fmt-7.0.3
-rwxrwxr-x.  1 deployer deployer   1152094 Dec  8  2021 fmt-7.0.3.zip
drwxrwxr-x.  8 deployer deployer      4096 Oct 18 17:14 gflags-2.2.2
-rwxrwxr-x.  1 deployer deployer     98704 Oct 17 18:46 gflags-2.2.2.tar.gz
drwxrwxr-x. 12 deployer deployer      4096 Oct 19 15:57 glog-0.4.0
-rwxrwxr-x.  1 deployer deployer    200955 Oct 17 18:46 glog-0.4.0.tar.gz
drwxrwxr-x.  6 deployer deployer      4096 Oct 18 17:14 googletest-release-1.10.0
-rwxrwxr-x.  1 deployer deployer    904349 Oct 17 18:46 googletest-release-1.10.0.tar.gz
-rwxrwxr-x.  1 deployer deployer    916854 Oct 17 18:52 gperftools-2.7.tar.gz
drwxrwxr-x. 10 deployer deployer      8192 Oct 19 15:57 gperftools-gperftools-2.7
drwxr-xr-x. 10 deployer deployer       271 Jul  7  2020 hadoop-3.3.0-aarch64
-rwxrwxr-x.  1 deployer deployer 618354685 Oct 18 09:49 hadoop-3.3.0-aarch64.tar.gz
-rwxrwxr-x.  1 deployer deployer 617818849 Oct 26  2021 hadoop-3.3.0.tar.gz
drwxrwxr-x. 14 deployer deployer      4096 Oct 20 23:33 hyperscan-5.3.0.aarch64
-rwxrwxr-x.  1 deployer deployer   1871101 Oct 18 10:13 hyperscan-5.3.0.aarch64.tar.gz
-rwxrwxr-x.  1 deployer deployer   1844963 Oct 17 19:21 hyperscan-5.4.0.tar.gz
drwxrwxr-x. 13 deployer deployer      4096 Oct 19 11:01 incubator-brpc-0.9.7
-rwxrwxr-x.  1 deployer deployer  17986448 Oct 17 19:02 incubator-brpc-0.9.7.tar.gz
-rwxrwxr-x.  1 deployer deployer 174267249 Sep 27  2021 java-se-8u41-ri.tar.gz
-rwxrwxr-x.  1 deployer deployer    554279 Dec  7  2021 jemalloc-5.2.1.tar.bz2
drwxrwxr-x. 12 deployer deployer      4096 Oct 19 15:58 leveldb-1.20
-rwxrwxr-x.  1 deployer deployer    223141 Oct 17 18:59 leveldb-1.20.tar.gz
drwxrwxr-x. 12 deployer deployer      8192 Oct 19 16:20 libevent-24236aed01798303745470e6c498bf606e88724a
-rwxrwxr-x.  1 deployer deployer    889315 Oct 17 17:11 libevent-24236aed01798303745470e6c498bf606e88724a.zip
drwxrwxr-x. 11 deployer deployer      4096 Oct 19 16:00 librdkafka-1.7.0
-rwxrwxr-x.  1 deployer deployer   2946082 Oct 17 19:03 librdkafka-1.7.0.tar.gz
drwxrwxr-x. 12 deployer deployer      4096 Nov 16  2020 lz4-1.9.3
-rwxrwxr-x.  1 deployer deployer    320958 Oct 17 18:56 lz4-1.9.3.tar.gz
drwxrwxr-x. 13 deployer deployer      4096 Oct 19 18:55 mariadb-connector-c-3.1.14
-rwxrwxr-x.  1 deployer deployer    965725 Oct 17 19:21 mariadb-connector-c-3.1.14.tar.gz
drwxrwxr-x. 18 deployer deployer      4096 Oct 19 15:55 openssl-OpenSSL_1_1_1m
-rwxrwxr-x.  1 deployer deployer  10023608 Oct 17 18:45 openssl-OpenSSL_1_1_1m.tar.gz
-rwxrwxr-x.  1 deployer deployer    677787 Oct 17 19:25 opentelemetry-cpp-v1.2.0.tar.gz
drwxrwxr-x. 23 deployer deployer      4096 Oct 19 15:56 protobuf-3.14.0
-rwxrwxr-x.  1 deployer deployer   5319779 Oct 17 18:46 protobuf-3.14.0.tar.gz
drwxrwxr-x.  8 deployer deployer      4096 Oct 20 23:33 ragel-6.10
-rwxrwxr-x.  1 deployer deployer   1232993 Nov  1  2021 ragel-6.10.tar.gz
drwxrwxr-x. 10 deployer deployer      4096 Aug 25  2016 rapidjson-1.1.0
-rwxrwxr-x.  1 deployer deployer   1019402 Oct 17 18:46 rapidjson-1.1.0.tar.gz
drwxrwxr-x. 10 deployer deployer      4096 Oct 19 15:57 re2-2017-05-01
-rwxrwxr-x.  1 deployer deployer    382887 Oct 17 18:58 re2-2017-05-01.tar.gz
drwxrwxr-x. 33 deployer deployer      4096 Oct 19 16:00 rocksdb-6.22.1
-rwxrwxr-x.  1 deployer deployer  10248793 Oct 17 19:03 rocksdb-6.22.1.zip
drwxrwxr-x.  6 deployer deployer      4096 Oct 18 17:10 ryu-aa31ca9361d21b1a00ee054aac49c87d07e74abc
-rwxrwxr-x.  1 deployer deployer   8412060 Oct 17 19:18 ryu-aa31ca9361d21b1a00ee054aac49c87d07e74abc.zip
drwxrwxr-x.  6 deployer deployer      4096 Oct 19 18:52 s2geometry-0.9.0
-rwxrwxr-x.  1 deployer deployer   1124554 Oct 17 19:03 s2geometry-0.9.0.tar.gz
drwxrwxr-x. 23 deployer deployer      4096 Oct 18 17:14 simdjson-1.0.2
-rwxrwxr-x.  1 deployer deployer   1551616 Oct 17 18:46 simdjson-v1.0.2.tar.gz
drwxrwxr-x.  6 deployer deployer      4096 Oct 18 17:14 snappy-1.1.8
-rwxrwxr-x.  1 deployer deployer   1096137 Oct 17 18:47 snappy-1.1.8.tar.gz
drwxr-xr-x. 11 deployer deployer      4096 Oct 19 15:58 thrift-0.13.0
-rwxrwxr-x.  1 deployer deployer   4154357 Jul  6  2020 thrift-0.13.0.tar.gz
-rwxrwxr-x.  1 deployer deployer   2584669 Oct 17 19:23 velocypack-XYZ1.0.tar.gz
drwxrwxr-x. 14 deployer deployer      4096 Oct 19 15:55 zlib-1.2.11
-rwxrwxr-x.  1 deployer deployer    644492 Oct 17 19:15 zlib-1.2.11.tar.gz
drwxrwxr-x. 12 deployer deployer      4096 May 14  2021 zstd-1.5.0
-rwxrwxr-x.  1 deployer deployer   1867111 Oct 17 19:03 zstd-1.5.0.tar.gz

此处有坑:如果没办法联网的话会出现你在src里面放好了压缩包,但是由于一些原因,sh脚本不识别,仍然通过git去下载。要解决这个方法,可以通过修改下载路径,让他到自己的某一层路径去下载压缩包。等于自己下载自己,涉及到http服务的开启自行搜索。

文件下载路径在vars.sh里面。

第二个坑:在安装arrow-apache-arrow-5.0.0这个包的时候,解压后里面还有一个安装包。这个安装包好像没有md5值,e9234cd6e6f4428fc260073b2c34ffe86fda1f34.tar.gz。脚本会根据路径去下载,因为我全程没法联网,所以这里是通过修改下载路径,自己下自己的方式完成的。

/starrocks-2.1.11/thirdparty/src/arrow-apache-arrow-5.0.0/cpp/cmake_modules/ThirdpartyToolchain.cmake

把这个文件下的一下路径改成自己的目录,通过自己下自己,解决问题。

2.2 build-thirdparty.sh

进行编译,基本上包全了这一步就很顺利了,如果报错印象中也都是缺包的问题。

三、处理maven依赖问题、编译StarRocks

完成了三方包的编译,最后开始编译starrocks,starrocks源码解压后build.sh运行这个进行编译。

然后过程中会涉及到一些三方库,如果自己的maven下载不下来的话需要自己手动看源码中的pom文件进行下载。一些文件可能需要科学上网后下载,下载时注意除了jar包,相关的pom文件也要一并下载,因为插件之间也存在依赖关系,不下的话没法用。我的环境里面没有网,所以基本上都是手动下载的,最后甚至把自己本机的maven库传到了服务器上。基本上是执行一下build.sh,看看卡在哪里少了那个包,就去下一下,效率很低。

都搞定后,编译时间大概10分钟左右,将编译后的包分发到集群中就可以直接使用了。

注意:maven装好后需要配一下环境变量。

源码压缩包有点大,需要的私信。

第一次写这种记录,如果有帮助欢迎点个赞满足我的虚荣心,如果你在安装的过程中有问题,也可以私信我交流。

猜你喜欢

转载自blog.csdn.net/weixin_43414404/article/details/127490922