在部署StarRocks前,我们可能会纠结使用哪个版本合适。StarRocks在github上打包有各版本的源码包,在官网上也发布有基于x86架构编译的适用于CentOS 7+的Release版二进制包,版本的选择我们不妨遵循以下几个原则:
- 测试环境可以用官网发布的最新Release版二进制包部署,例如1.19.1,以便快速熟悉新功能;
- 预生产环境和生产环境推荐使用官网上一个大版本的最后一个小版本,例如当前的1.17.8或1.18.4,最为稳定;
- 若确实希望尝试最新的功能,或最新的代码修复了我们迫切需要解决的问题,那么也可从git上拉取最新的代码使用官方Docker镜像自己编译;
- StarRocks的BE服务需要CPU支持AVX2指令集,若需要在没有AVX2机器上运行,也可使用官方Docker镜像单独编译(能运行,但非常不推荐,因为并没有充分的测试确保没有问题);
- 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并设置开机自启
[root@localhost ~]# systemctl start docker
[root@localhost ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
1.3 测试是否安装成功
[root@localhost ~]# docker run hello-world
Unable to find image 'hello-world:latest' locally
Trying to pull repository docker.io/library/hello-world ...
latest: Pulling from docker.io/library/hello-world
2db29710123e: Pull complete
Digest: sha256:cc15c5b292d8525effc0f89cb299f1804f3a725c8d05e158653a563f15e4f685
Status: Downloaded newer image for docker.io/hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
………………
1.4 配置Docker加速
由于网络原因,下载一个Docker官方镜像可能会需要很长的时间,甚至下载失败。为此,阿里云容器镜像服务ACR提供了官方的镜像站点,从而加速官方镜像的下载。具体配置方法参考阿里云文档:
官方镜像加速 - 容器镜像服务 ACR - 阿里云https://help.aliyun.com/document_detail/60750.html
1.5 拉取StarRocks编译镜像
配置加速后,镜像拉取速度较快,我们等待拉取完成:
[root@localhost ~]# docker pull starrocks/dev-env:main
Trying to pull repository docker.io/starrocks/dev-env ...
main: Pulling from docker.io/starrocks/dev-env
5ad559c5ae16: Pull complete
2bad2b236a9a: Pull complete
f6d22315d484: Pull complete
c416e97f8271: Pull complete
7d8b91bb0c99: Pull complete
425e6901bb98: Pull complete
a5688ad2be15: Pull complete
3223710ac544: Pull complete
19884eca2d12: Pull complete
463267783751: Pull complete
Digest: sha256:ab44decbdc2eaaa98cdc4647380a492299b175a35b165d50e30f183495090123
Status: Downloaded newer image for docker.io/starrocks/dev-env:main
1.6 查看镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/starrocks/dev-env main 95d18ca637fd 5 weeks ago 8.65 GB
docker.io/hello-world latest feb5d9fea6a5 8 weeks ago 13.3 kB
二、获取StarRocks源码
2.1 使用git命令获取代码
[root@localhost ~]# git clone https://github.com/StarRocks/starrocks.git
Cloning into 'starrocks'...
fatal: unable to access 'https://github.com/StarRocks/starrocks.git/': Encountered end of file
因国内网络原因,这种方式有时可能拉取不下来。我们可以从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 上传代码包
以从main分支下下载的最新代码为例,我们下载后得到源码包starrocks-main.zip,将其上传至CentOS中,文件路径为/root/starrocks-main.zip:
[root@localhost ~]# ls
starrocks-main.zip
执行解压:
[root@localhost ~]# unzip starrocks-main.zip
得到:/root/starrocks-main
[root@localhost ~]# ls
starrocks-main starrocks-main.zip
2.3 挂载本地盘启动镜像
[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
6ebc6a124fdf9d2c28b6eb2543e570775b2f3eabb7716120a3cefe8506ee9d2f
2.4 查看正在运行的容器
[root@localhost ~]# docker ps
2.5 登入容器
[root@localhost ~]# docker exec -it starrocks-image /bin/bash
[root@ed39d436e75c local]# [这里注意看主机名,确认已进入容器]
2.6 进入源码目录
[root@ed39d436e75c local]# cd /root/starrocks-main
[root@ed39d436e75c starrocks-main]#
2.7 编译FE和BE
[root@ed39d436e75c starrocks-main]# ./build.sh
这一步会下载较多依赖并执行编译,会非常耗时。运行容器时我们挂载本地.m2目录即是为了首次编译下载的依赖后面再编译时可以复用。这一步只要不报错,我们慢慢等待即可。编译完成后,产出文件在output/目录中:
[root@docker starrocks-main]# cd output/
[root@docker output]# ll
total 1992
drwxr-xr-x 6 root root 51 Nov 2 00:20 be
drwxr-xr-x 7 root root 72 Nov 2 00:20 fe
-rw-r--r-- 1 root root 3858 Nov 1 11:20 LICENSE.txt
-rw-r--r-- 1 root root 2032787 Nov 2 00:20 NOTICE.txt
drwxr-xr-x 4 root root 32 Nov 2 00:20 udf
若我们编译不需要AVX2支持的StarRocks,我们需要修改build.sh文件:
[root@ed39d436e75c starrocks-main]# vi build.sh
………………
WITH_HDFS=ON
if [[ -z ${USE_AVX2} ]]; then
USE_AVX2=ON
Fi
………………
将USE_AVX2=ON 修改为USE_AVX2=OFF。
保存退出后,再执行build.sh进行编译。再次提醒,这种方案只能保证StarRocks能够在没有AVX2指令集的机器上运行,并没有经过完整的测试来确保没有其他问题。
执行编译时,我们也可以指定参数只编译部分组件,例如:
Usage: build.sh <options>
Optional options:
--be build Backend
--fe build Frontend and Spark Dpp application
--spark-dpp build Spark DPP application
--clean clean and build target
--with-gcov build Backend with gcov, has an impact on performance
--without-gcov build Backend without gcov(default)
--with-hdfs enable hdfs support
--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目录中:
[root@docker output]# ll
total 0
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架构的镜像,或者,手动编译,依据报错提示逐步进行。