当前位置: 首页 > news >正文

StarRocks BE源码编译、CLion高亮跳转方法

阅读SR BE源码时,很多类的引用位置爆红找不到,或无法跳转过去,而自己的Linux机器往往缺乏各种C++依赖库,配置安装比较麻烦,因此总体的思路是通过CLion远程连接SR社区已经安装完各种依赖库的Docker容器,进行编译和源码查看

一、社区Docker容器部署

首先需要在一台CentOS物理机上安装SR社区的Centos Docker容器(Ubuntu容器无法调用CentOS物理机的/usr/sbin/init脚本),安装新版Docker服务的方法参考:

centos7安装Docker详细步骤(无坑版教程)-腾讯云开发者社区-腾讯云在安装 Docker 之前,先说一下配置,我这里是Centos7 Linux 内核:官方建议 3.10 以上,3.8以上貌似也可。https://cloud.tencent.com/developer/article/1701451https://cloud.tencent.com/developer/article/1701451https://cloud.tencent.com/developer/article/1701451SR官方社区容器列表如下:

Compile StarRocks with Docker | StarRocksThis topic describes how to compile StarRocks using Docker.https://docs.starrocks.io/docs/developers/build-starrocks/Build_in_docker/https://docs.starrocks.io/docs/developers/build-starrocks/Build_in_docker/https://docs.starrocks.io/docs/developers/build-starrocks/Build_in_docker/安装好Docker服务后,执行命令:

docker pull starrocks/dev-env-centos7:latest

接着启动docker容器,安装SSH所需依赖:

docker run -itd -v /root/.m2:/root/.m2 -v /home/data/starrocks:/root/starrocks -v /home/data/.jdks/azul-11.0.25:/root/java -p 8022:22 -p 8030:8030 -p 8040
:8040 -p 9030:9030 -p 5005:5005 --name branch-3.3 -d --privileged=true  starrocks/dev-env-centos7:latest /usr/sbin/init

其中-v参数用于映射物理机上的源码与JDK存储目录到容器相应目录,-p参数用于映射暴露出未来会用来debug的容器端口,--privileged=true和/usr/sbin/init参数很关键,用于获得物理机的root用户与systemd权限,否则后面无法通过root进行SSH连接Docker容器。

启动Docker容器进程后,记得安装open-ssh-server,修改/etc/ssh/sshd_config,开启root用户登录

 docker exec -it branch-3.3 /bin/bashyum install -y openssh-servervim /etc/ssh/sshd_config

在sshd_config文件中,修改如下高亮内容:

接着修改容器root用户密码,启动SSH服务:

passwd root
systemctl restart ssh

最后对镜像容器进程进行docker commit,提交改动和开启ssh后的新镜像,便于下次重启容器:

# 查看已配置好的镜像进程号
docker ps
# 提交成新的镜像,方便以后重启容器而不重复安装ssh
docker commit de7db66d6a75 starrocks-dev-3.3

二、在容器中编译源码

C++依赖完善、具备SSH功能的CentOS Docker容器启动后,就需要在容器中编译SR源码了,先编译BE再编译FE:

# 进入容器中的SR源码根目录,映射了物理机的目录
cd /root/starrocks
# 开启存算分离模式的编译
BUILD_TYPE=Debug ./build.sh --be --enable-shared-data  --without-java-ext  -j12
./build.sh --fe  --enable-shared-data --without-java-ext 

其中BE C++编译会记忆上次进度百分比,如果不是自己改动源码的问题导致编译BE到一半报Error停止了,可以多执行几次BE的编译命令,会接着上次进度百分比继续编译。

编译完成后,部署包产出会在SR源码根目录的output子目录下。

三、使用CLion远程连接容器

编译好SR源码后,需将容器上完整编译后的gensrc/build等目录,下载回自己本机的对应源码目录gensrc下

接着在本机CLion上打开SR BE源码,在Settings的Toolchains菜单中配置远程SSH连接,目标是上述Docker容器进程:

然后在CMake菜单中选择刚才的Remote Debug环境进行连接,其中Build directory是容器中使用./build.sh编译后的结果目录,该目录会从容器自动同步回本机,默认就叫build_Debug

接着是配置环境变量,在CMake菜单中的Environment选项里,填写如下环境变量:

注意红框中的选项不要勾选,SR社区容器中已经编译好的thirdparty依赖库在容器的/var/local/thirdparty目录下。

最后在下面的Deployment菜单中,配置本机BE源码到容器BE源码的部署路径映射:

点击OK生效之后,CLion就会自动同步本机和远程容器上的源码编译结果,同步完成后,本机上BE源码的高亮跳转就可以生效了。

四、利用IDEA远程开发功能查看FE源码

FE源码可以在本机IDEA上编译和查看,但是先前CentOS物理机已经编译过一次FE,所以也可以利用IDEA的Remote Development功能,远程连接物理机上的FE项目进行查看:

这样可以节省本机上的磁盘空间,因为时间长了maven本地仓库容量会变得很大。

五、在容器中启动FE和BE测试

如果后面修改了源码,想进行Debug测试,可以用如下命令启动SR进程:

fe/bin/start_fe.sh --daemon
be/bin/start_cn.sh --daemon

http://www.lryc.cn/news/529830.html

相关文章:

  • 数模测评:doubao1.5>deepseek-v3>gpt-o1
  • 晴,初三,年已过
  • Vue3 v-bind 和 v-model 对比
  • Smalltalk语言是何物?面向对象鼻祖Simula的诞生?Simula和Smalltalk有什么区别?面向对象设计?
  • KVM/ARM——基于ARM虚拟化扩展的VMM
  • Windows系统中Docker可视化工具对比分析,Docker Desktop,Portainer,Rancher
  • 【架构面试】二、消息队列和MySQL和Redis
  • 算法【完全背包】
  • 二叉树的遍历
  • 1.31 实现五个线程的同步
  • three.js+WebGL踩坑经验合集(6.1):负缩放,负定矩阵和行列式的关系(2D版本)
  • 【开源免费】基于SpringBoot+Vue.JS体育馆管理系统(JAVA毕业设计)
  • 《大数据时代“快刀”:Flink实时数据处理框架优势全解析》
  • antdesignvue统计数据源条数、计算某列合计值、小数计算不精确多了很多小数位
  • 02.05、链表求和
  • dmfldr实战
  • Kafka 副本机制(包含AR、ISR、OSR、HW 和 LEO 介绍)
  • 爬虫基础(二)Web网页的基本原理
  • 外网访问禅道软件项目管理系统
  • Python 梯度下降法(五):Adam Optimize
  • 笔试-二进制
  • springboot 2.7.6 security mysql redis jwt配置例子
  • FreeRTOS从入门到精通 第十六章(任务通知)
  • TensorFlow 简单的二分类神经网络的训练和应用流程
  • 无人机图传模块 wfb-ng openipc-fpv,4G
  • .cc扩展名是什么语言?C语言必须用.c为扩展名吗?主流编程语言扩展名?Java为什么不能用全数字的文件名?
  • 【MyDB】4-VersionManager 之 3-死锁及超时检测
  • 【Linux】使用管道实现一个简易版本的进程池
  • 【OpenGL】OpenGL游戏案例(二)
  • 28. 【.NET 8 实战--孢子记账--从单体到微服务】--简易报表--报表定时器与报表数据修正