第1.1章:StarRocks部署--源码编译
在部署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 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提供了官⽅的镜像站点,从⽽加速官⽅镜像的下载。具体配置⽅法参考阿⾥云⽂档:
1.5 拉取StarRocks编译镜像
配置加速后,镜像拉取速度较快,我们等待拉取完成:
这⾥注意,我们编译的时候要选择和StarRocks⼤版本匹配的Docker镜像,例如:
starrocks branch image tag
main starrocks/dev-env:main
branch-1.19starrocks/dev-env:branch-1.19
branch-2.0starrocks/dev-env:branch-2.0
branch-2.1starrocks/dev-env:branch-2.1
…………
我们这⾥使⽤的是main下的代码,所以直接pull main对应的镜像:
[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 github/StarRocks/starrocks.git
Cloning into 'starrocks'...
fatal: unable to access 'github/StarRocks/starrocks.git/': Encountered end of file
因国内⽹络原因,这种⽅式有时可能拉取不下来。我们可以使⽤github的镜像⽹站获取,例如:,这样我们的git clone命令就可以写为:
[root@localhost ~]# git clone /StarRocks/starrocks.git
或者,我们也可以直接从github上直接下载代码包,下载地址为:
若需要获取Release版本的代码包,获取地址为:
2.2 上传代码包
以通过浏览器访问github,然后从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/ 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/⽬录中:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。