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

news2025/1/30 12:44:05

阅读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/bash
 yum install -y openssh-server
 vim /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.coloradmin.cn/o/2286430.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue 响应式渲染 - 待办事项简单实现

Vue 渐进式JavaScript 框架 基于Vue2的学习笔记 - Vue 响应式渲染 - 待办事项简单实现 目录 待办事项简单实现 页面初始化 双向绑定的指令 增加留言列表设置 增加删除按钮 最后优化 总结 待办事项简单实现 页面初始化 对页面进行vue的引入、创建输入框和按钮及实例化V…

SpringBoot基础概念介绍-数据源与数据库连接池

🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 毛毛张今天介绍的SpringBoot中的基础概念-数据源与数据库连接池,同时介绍SpringBoot整合两种连接池的教程 文章目录 1 数据库与数据库管理系统2 JDBC与数…

Microsoft Visual Studio 2022 主题修改(补充)

Microsoft Visual Studio 2022 透明背景修改这方面已经有很多佬介绍过了,今天闲来无事就补充几点细节。 具体的修改可以参考:Microsoft Visual Studio 2022 透明背景修改(快捷方法)_material studio怎么把背景弄成透明-CSDN博客文…

(done) ABI 相关知识补充:内核线程切换、用户线程切换、用户内核切换需要保存哪些寄存器?

由于操作系统和编译器约定了 ABI,如下: 编译器在对 C 语言编译时,会自动 caller 标注的寄存器进行保存恢复。保存的步骤通常发生在进入函数的时候,恢复的步骤通常发生在从函数返回的时候。 内核线程切换需要保存的寄存器&#…

Linux 多路转接select

Linux 多路转接select 1. select select() 是一种较老的多路转接IO接口,它有一定的缺陷导致它不是实现多路转接IO的最优选择,但 poll() 和 epoll() 都是较新版的Linux系统提供的,一些小型嵌入式设备的存储很小,只能使用老版本的…

【实践案例】使用Dify构建文章生成工作流【在线搜索+封面图片生成+内容标题生成】

文章目录 概述开始节点图片封面生成关键词实时搜索主题参考生成文章详情和生成文章标题测试完整工作流运行测试结果 概述 使用Dify构建文章生成工作流,使用工具包括:使用 Tavily 执行的搜索查询,使用Flux生成封面图片,使用Stable…

Web3 如何赋能元宇宙,实现虚实融合的无缝对接

随着技术的飞速发展,元宇宙作为一个未来数字世界的概念,正在吸引全球范围内的关注。而 Web3 技术的兴起,为元宇宙的实现提供了强大的支撑。Web3 是基于区块链技术的去中心化网络,它在改变互联网的同时,也推动着虚拟世界…

LangChain的开发流程

文章目录 LangChain的开发流程开发密钥指南3种使用密钥的方法编写一个取名程序 LangChain表达式 LangChain的开发流程 为了更深人地理解LangChain的开发流程,本文将以构建聊天机器人为实际案例进行详细演示。下图展示了一个设计聊天机器人的LLM应用程序。 除了Wb服务…

电商系统-用户认证(四)Oauth2授权模式和资源服务授权

本文章介绍:Oauth2.0 常见授权模式,资源服务授权 。 准备工作 搭建认证服务器之前,先在用户系统表结构中增加如下表结构: CREATE TABLE oauth_client_details (client_id varchar(48) NOT NULL COMMENT 客户端ID,主…

[答疑]DDD伪创新哪有资格和仿制药比

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 远航 2025-1-24 10:40 最近的热门话题仿制药,想到您经常批评的伪创新,这两者是不是很像? UMLChina潘加宇 伪创新哪有资格和仿制药比。 仿制药的…

图漾相机——Sample_V1示例程序

文章目录 1.SDK支持的平台类型1.1 Windows 平台1.2 Linux平台 2.SDK基本知识2.1 SDK目录结构2.2 设备组件简介2.3 设备组件属性2.4 设备的帧数据管理机制2.5 SDK中的坐标系变换 3.Sample_V1示例程序3.1 DeviceStorage3.2 DumpCalibInfo3.3 NetStatistic3.4 SimpleView_SaveLoad…

系统架构设计师教材:信息系统及信息安全

信息系统 信息系统的5个基本功能:输入、存储、处理、输出和控制。信息系统的生命周期分为4个阶段,即产生阶段、开发阶段、运行阶段和消亡阶段。 信息系统建设原则 1. 高层管理人员介入原则:只有高层管理人员才能知道企业究竟需要什么样的信…

Kafka 深入客户端 — 事务

Kafka 事务确保了数据在写入Kafka时的原子性和一致性。 1 幂等 幂等就是对接口的多次调用所产生的结果和调用一次是一致的。 Kafka 生产者在进行重试的时候可能会写入重复的消息,开启幂等性功能后就可以避免这种情况。将生产者客户端参数enable.idempotence设置为…

ZZNUOJ(C/C++)基础练习1011——1020(详解版)

1011 : 圆柱体表面积 题目描述 输入圆柱体的底面半径r和高h,计算圆柱体的表面积并输出到屏幕上。要求定义圆周率为如下宏常量 #define PI 3.14159 输入 输入两个实数,表示圆柱体的底面半径r和高h。 输出 输出一个实数,即圆柱体的表面积&…

Baklib探索内容中台的核心价值与实施策略

内容概要 在数字化转型的背景下,内容中台逐渐成为企业数字化策略中的关键组成部分。内容中台是一个集成的内容管理体系,旨在打破信息孤岛,使内容能够在各个业务部门和平台之间高效流通。这种管理体系不仅能够提升内容的生产效率,…

网络安全攻防实战:从基础防护到高级对抗

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 引言 在信息化时代,网络安全已经成为企业、政府和个人必须重视的问题。从数据泄露到勒索软件攻击,每一次…

论文阅读(十三):复杂表型关联的贝叶斯、基于系统的多层次分析:从解释到决策

1.论文链接:Bayesian, Systems-based, Multilevel Analysis of Associations for Complex Phenotypes: from Interpretation to Decision 摘要: 遗传关联研究(GAS)报告的结果相对稀缺,促使许多研究方向。尽管关联概念…

“““【运用 R 语言里的“predict”函数针对 Cox 模型展开新数据的预测以及推理。】“““

主题与背景 本文主要介绍了如何在R语言中使用predict函数对已拟合的Cox比例风险模型进行新数据的预测和推理。Cox模型是一种常用的生存分析方法,用于评估多个因素对事件发生时间的影响。文章通过具体的代码示例展示了如何使用predict函数的不同参数来获取生存概率和…

Oracle Primavera P6 最新版 v24.12 更新 1/2

目录 引言 P6 PPM 更新内容 1. 在提交更新基线前预览调整 2. 快速轻松地取消链接活动 3. 选择是否从 XER 文件导入责任经理 4. 提高全局变更报告的清晰度 5. 将整个分层代码值路径导出到 CPP 6. 里程碑活动支持所有关系类型 6. 时间表批准 7. 性能改进 8. 安装改进 …

AI大模型开发原理篇-2:语言模型雏形之词袋模型

基本概念 词袋模型(Bag of Words,简称 BOW)是自然语言处理和信息检索等领域中一种简单而常用的文本表示方法,它将文本看作是一组单词的集合,并忽略文本中的语法、词序等信息,仅关注每个词的出现频率。 文本…