当前位置:   article > 正文

第1.1章:StarRocks部署--源码编译_starrocks1.19.1

starrocks1.19.1

在部署StarRocks前,我们可能会纠结使用哪个版本合适。StarRocks在github上打包有各版本的源码包,在官网上也发布有基于x86架构编译的适用于CentOS 7+的Release版二进制包,版本的选择我们不妨遵循以下几个原则:

  1. 测试环境可以用官网发布的最新Release版二进制包部署,例如1.19.1,以便快速熟悉新功能;
  2. 预生产环境和生产环境推荐使用官网上一个大版本的最后一个小版本,例如当前的1.17.8或1.18.4,最为稳定;
  3. 若确实希望尝试最新的功能,或最新的代码修复了我们迫切需要解决的问题,那么也可从git上拉取最新的代码使用官方Docker镜像自己编译;
  4. StarRocks的BE服务需要CPU支持AVX2指令集,若需要在没有AVX2机器上运行,也可使用官方Docker镜像单独编译(能运行,但非常不推荐,因为并没有充分的测试确保没有问题);
  5. 1.19以上的版本已支持在ARM架构运行,但需要我们在ARM架构的机器上使用源码自行手动编译(目前StarRocks官网发布的二进制包暂不支持ARM)。

具体的版本功能差异可以关注官方论坛的Release Note,例如1.19的版本信息地址为:

StarRocks-1.19 Release Notes - Release Notes - StarRocks数据库论坛StarRocks version 1.19.0发布日期:2021年10月25日 New Feature实现Global Runtime Filter,可以支持对shuffle join实现Runtime filter。默认开启C…https://forum.starrocks.com/t/topic/552下面我们以从StarRocks github main分支中拉取的最新代码为例,使用官方提供的Docker镜像进行编译。

一、安装Docker并下载编译镜像

为方便演示,我们使用虚拟机下的CentOS 7.6执行编译,虚拟机的配置建议在2核4G以上,内存过小编译过程中可能会出错,CPU核数过少则可能会导致编译时间较长。同时,编译过程中还务必保持网络畅通。

1.1安装Docker

在root用户下使用yum安装Docker:

[root@localhost ~]# yum -y install docker

1.2 启动Docker并设置开机自启

  1. [root@localhost ~]# systemctl start docker
  2. [root@localhost ~]# systemctl enable docker
  3. Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

1.3 测试是否安装成功

  1. [root@localhost ~]# docker run hello-world
  2. Unable to find image 'hello-world:latest' locally
  3. Trying to pull repository docker.io/library/hello-world ...
  4. latest: Pulling from docker.io/library/hello-world
  5. 2db29710123e: Pull complete
  6. Digest: sha256:cc15c5b292d8525effc0f89cb299f1804f3a725c8d05e158653a563f15e4f685
  7. Status: Downloaded newer image for docker.io/hello-world:latest
  8. Hello from Docker!
  9. This message shows that your installation appears to be working correctly.
  10. ………………

1.4 配置Docker加速

由于网络原因,下载一个Docker官方镜像可能会需要很长的时间,甚至下载失败。为此,阿里云容器镜像服务ACR提供了官方的镜像站点,从而加速官方镜像的下载。具体配置方法参考阿里云文档:

官方镜像加速 - 容器镜像服务 ACR - 阿里云https://help.aliyun.com/document_detail/60750.html

1.5 拉取StarRocks编译镜像

配置加速后,镜像拉取速度较快,我们等待拉取完成: 

这里注意,我们编译的时候要选择和StarRocks大版本匹配的Docker镜像,例如:

starrocks branch

image tag

main

starrocks/dev-env:main

branch-1.19

starrocks/dev-env:branch-1.19

branch-2.0

starrocks/dev-env:branch-2.0

branch-2.1

starrocks/dev-env:branch-2.1

……

……

我们这里使用的是main下的代码,所以直接pull main对应的镜像:

  1. [root@localhost ~]# docker pull starrocks/dev-env:main
  2. Trying to pull repository docker.io/starrocks/dev-env ...
  3. main: Pulling from docker.io/starrocks/dev-env
  4. 5ad559c5ae16: Pull complete
  5. 2bad2b236a9a: Pull complete
  6. f6d22315d484: Pull complete
  7. c416e97f8271: Pull complete
  8. 7d8b91bb0c99: Pull complete
  9. 425e6901bb98: Pull complete
  10. a5688ad2be15: Pull complete
  11. 3223710ac544: Pull complete
  12. 19884eca2d12: Pull complete
  13. 463267783751: Pull complete
  14. Digest: sha256:ab44decbdc2eaaa98cdc4647380a492299b175a35b165d50e30f183495090123
  15. Status: Downloaded newer image for docker.io/starrocks/dev-env:main

1.6 查看镜像

  1. [root@localhost ~]# docker images
  2. REPOSITORY               TAG     IMAGE ID         CREATED            SIZE
  3. docker.io/starrocks/dev-env   main     95d18ca637fd     5 weeks ago        8.65 GB
  4. docker.io/hello-world         latest    feb5d9fea6a5    8 weeks ago        13.3 kB

二、获取StarRocks源码

2.1 使用git命令获取代码

  1. [root@localhost ~]# git clone https://github.com/StarRocks/starrocks.git
  2. Cloning into 'starrocks'...
  3. fatal: unable to access 'https://github.com/StarRocks/starrocks.git/': Encountered end of file

因国内网络原因,这种方式有时可能拉取不下来。我们可以使用github的镜像网站获取,例如:github.com.cnpmjs.org,这样我们的git clone命令就可以写为:

[root@localhost ~]# git clone https://github.com.cnpmjs.org/StarRocks/starrocks.git

或者,我们也可以直接从github上直接下载代码包,下载地址为:

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

若需要获取Release版本的代码包,获取地址为:

https://github.com/StarRocks/starrocks/tagshttps://github.com/StarRocks/starrocks/tags

2.2 上传代码包

以通过浏览器访问github,然后从main分支下下载的最新代码为例,我们下载后得到源码包starrocks-main.zip,将其上传至CentOS中,文件路径为/root/starrocks-main.zip:

  1. [root@localhost ~]# ls
  2. starrocks-main.zip

执行解压:

[root@localhost ~]# unzip starrocks-main.zip

得到:/root/starrocks-main

  1. [root@localhost ~]# ls
  2. starrocks-main  starrocks-main.zip

2.3 挂载本地盘启动镜像

  1. [root@localhost ~]# docker run -it -v /root/.m2:/root/.m2 -v /root/starrocks-main:/root/starrocks-main --name starrocks-image --privileged=true -d starrocks/dev-env:main
  2. 6ebc6a124fdf9d2c28b6eb2543e570775b2f3eabb7716120a3cefe8506ee9d2f

2.4 查看正在运行的容器

[root@localhost ~]# docker ps

2.5 登入容器

  1. [root@localhost ~]# docker exec -it starrocks-image /bin/bash
  2. [root@ed39d436e75c local]# [这里注意看主机名,确认已进入容器]

2.6 进入源码目录

  1. [root@ed39d436e75c local]# cd /root/starrocks-main
  2. [root@ed39d436e75c starrocks-main]#

2.7 编译FE和BE

[root@ed39d436e75c starrocks-main]# ./build.sh

这一步会下载较多依赖并执行编译,会非常耗时。运行容器时我们挂载本地.m2目录即是为了首次编译下载的依赖后面再编译时可以复用。这一步只要不报错,我们慢慢等待即可。编译完成后,产出文件在output/目录中:

  1. [root@docker starrocks-main]# cd output/
  2. [root@docker output]# ll
  3. total 1992
  4. drwxr-xr-x 6 root root      51 Nov  2 00:20 be
  5. drwxr-xr-x 7 root root      72 Nov  2 00:20 fe
  6. -rw-r--r-- 1 root root    3858 Nov  1 11:20 LICENSE.txt
  7. -rw-r--r-- 1 root root 2032787 Nov  2 00:20 NOTICE.txt
  8. drwxr-xr-x 4 root root      32 Nov  2 00:20 udf

---------------------------------------------------------

若我们编译不需要AVX2支持的StarRocks,可以修改build.sh和build-thirdparty.sh:

 [root@ed39d436e75c starrocks-main]# vi build.sh

………………

WITH_HDFS=ON

if [[ -z ${USE_AVX2} ]]; then

    USE_AVX2=OFF

fi

………………

将USE_AVX2=ON 修改为USE_AVX2=OFF

修改三方库build-thirdparty.sh

[root@ed39d436e75c starrocks-main]# vi thirdparty/build-thirdparty.sh

找到# croaring bitmap,修改标红的2处:

# croaring bitmap

build_croaringbitmap() {
    check_if_source_exist $CROARINGBITMAP_SOURCE
    cd $TP_SOURCE_DIR/$CROARINGBITMAP_SOURCE
    mkdir -p $BUILD_DIR && cd $BUILD_DIR
    rm -rf CMakeCache.txt CMakeFiles/
    CXXFLAGS="-O3 -mno-avx2 -mno-avx" \
    LDFLAGS="-L${TP_LIB_DIR} -static-libstdc++ -static-libgcc" \
    $CMAKE_CMD -DROARING_BUILD_STATIC=ON -DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR \
    -DCMAKE_INCLUDE_PATH="$TP_INSTALL_DIR/include" \
    -DENABLE_ROARING_TESTS=OFF \
    -DROARING_DISABLE_NATIVE=ON \
    -DFORCE_AVX=OFF \
    -DCMAKE_LIBRARY_PATH="$TP_INSTALL_DIR/lib;$TP_INSTALL_DIR/lib64" ..
    make -j$PARALLEL && make install
}

保存退出后,执行build.sh进行编译。再次提醒,这种方案只能保证StarRocks能够在没有AVX2指令集的机器上运行,并没有经过完整的测试来确保没有其他问题。

---------------------------------------------------------

回归正题,执行编译时,我们也可以指定参数只编译部分组件,例如:

  1. Usage: build.sh <options>
  2.   Optional options:
  3.      --be               build Backend
  4.      --fe               build Frontend and Spark Dpp application
  5.      --spark-dpp        build Spark DPP application
  6.      --clean            clean and build target
  7.      --with-gcov        build Backend with gcov, has an impact on performance
  8.      --without-gcov     build Backend without gcov(default)
  9.      --with-hdfs        enable hdfs support
  10.      --without-hdfs     disable hdfs support

2.8 编译Broker

前面的操作不会编译Broker,我们需要单独编译:

[root@ed39d436e75c starrocks-main]# cd fs_brokers/apache_hdfs_broker/ && sh build.sh

编译后,产出文件在fs_brokers/apache_hdfs_broker/output目录中:

  1. [root@docker output]# ll
  2. total 0
  3. drwxr-xr-x 5 root root 40 Nov  2 00:33 apache_hdfs_broker

2.9 登出并停止容器

在启动容器时我们已将starrocks-main目录挂载到了镜像中,所以上面编译生成的二进制文件也存在于本地。所以完成编译后,我们可以直接退出容器:

[root@ed39d436e75c starrocks-main]# exit

后面若还需要启动容器,执行:

[root@localhost ~]# docker start starrocks-image

启动后再登入容器:

[root@localhost ~]# docker exec -it starrocks-image /bin/bash

备注:

目前官方的Docker镜像还不能在ARM架构下执行编译,首先缺少ARM架构可用的jdk,其次cmake等依赖也与x86架构下有差异。我们可以等待官方后续推出适用于ARM架构的镜像,或者,手动编译,依据报错提示逐步进行。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/993044
推荐阅读
相关标签
  

闽ICP备14008679号