跳到主要内容
版本: 最新版本-3.5

配置用于开发 StarRocks 的 IDE

有些人想成为 StarRocks 的贡献者,但苦于开发环境,所以在这里我写一个关于它的教程。

什么是完美的开发工具链?

  • 支持一键编译 FE 和 BE。
  • 支持 Clion 和 IDEA 中的代码跳转。
  • IDE 中的所有变量都可以正常分析,没有红线。
  • Clion 可以正常启用其分析功能。
  • 支持 FE 和 BE 调试。

准备

我使用 MacBook(M1) 进行本地编码,并使用远程服务器编译和测试 StarRocks。(远程服务器使用 Ubuntu 22,**至少需要 16GB 内存**)。

总体思路是在 MacBook 上编写代码,然后通过 IDE 将代码自动同步到服务器,并使用服务器编译和开发 StarRocks。

MacBook 设置

Thrift 0.20

brew install cartman-kai/thrift/thrift@0.20

您可以使用以下命令检查 Thrift 是否安装成功

$ thrift -version
Thrift version 0.20.0

Protobuf

直接使用最新版本 v3 即可,因为最新版本的 Protobuf 兼容 StarRocks 中 Protobuf 协议的 v2 版本。

brew install protobuf

Maven

brew install maven

OpenJDK 17

brew install openjdk@17

Python3

MacOS 自带,无需安装。

设置系统环境变量

export JAVA_HOME=xxxxx
export PYTHON=/usr/bin/python3

Ubuntu22 服务器设置

克隆 StarRocks 代码

git clone https://github.com/StarRocks/starrocks.git

安装编译所需的工具

sudo apt update
sudo apt install gcc g++ maven openjdk-17-jdk python3 python-is-python3 unzip cmake bzip2 ccache byacc ccache flex automake libtool bison binutils-dev libiberty-dev build-essential ninja-build curl

设置 JAVA_HOME 环境变量

export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64

编译 StarRocks

cd starrocks/
./build.sh

第一次编译需要编译 thirdparty,这需要一些时间。

您必须使用 gcc 进行首次编译,目前,thirdparty 无法在 clang 中成功编译。

IDE 设置

FE

FE 开发很简单,因为您可以直接在 MacOS 中编译它。只需进入 fe 文件夹并运行命令 mvn install -DskipTests

然后您可以使用 IDEA 直接打开 fe 文件夹,一切正常。

本地调试

与其他 Java 应用程序相同。在 Intellij IDEA 上编译 StarRocks 时,您可能会遇到 OOM 错误,您可以转到 Build, Execution, Deployment -> Compiler -> Increase Heap size to a larger value。

远程调试

在 Ubuntu 服务器中,使用 ./start_fe.sh --debug 运行,然后使用 IDEA 远程调试连接它。默认端口是 5005,您可以在 start_fe.sh 脚本中更改它。

调试 java 参数:-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 只是从 IDEA 复制的。

IDE

BE

建议先在 fe 文件夹中运行 mvn install -DskipTests,以确保 gensrc 目录中的 thrift 和 protobuf 已正确编译。

然后您需要进入 gensrc 文件夹,分别运行 make cleanmake 命令,否则 Clion 无法检测到 thrift 的输出文件。

使用 Clion 打开 be 文件夹。

进入 Settings,添加 Toolchains。首先添加远程服务器,然后分别设置 Build Tool、C 和 C++ Compiler。

IDE

Settings / Deployment 中。更改文件夹 mappings

IDE

Settings / Cmake 中。将 Toolchain 更改为刚刚添加的远程 toolchain。添加以下环境变量

JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
STARROCKS_GCC_HOME=/usr/
STARROCKS_THIRDPARTY=/root/starrocks/thirdparty

注意:小心不要选中 Include system environment variables

IDE

IDE

从这里开始,所有设置都已完成。Clion 和远程服务器同步一段时间后,代码跳转将正常工作。

调试

BE 调试有点困难,您必须在远程服务器中使用 gdb。当然,您可以使用 gdb server + Clion 远程 gdb,但我不建议这样做,它太卡了。

我们需要将 start_backend.sh 脚本从

if [ ${RUN_BE} -eq 1 ]; then
echo "start time: "$(date) >> $LOG_DIR/be.out
if [ ${RUN_DAEMON} -eq 1 ]; then
nohup ${STARROCKS_HOME}/lib/starrocks_be "$@" >> $LOG_DIR/be.out 2>&1 </dev/null &
else
${STARROCKS_HOME}/lib/starrocks_be "$@" >> $LOG_DIR/be.out 2>&1 </dev/null
fi
fi

更改为

if [ ${RUN_BE} -eq 1 ]; then
echo "start time: "$(date) >> $LOG_DIR/be.out
if [ ${RUN_DAEMON} -eq 1 ]; then
nohup ${STARROCKS_HOME}/lib/starrocks_be "$@" >> $LOG_DIR/be.out 2>&1 </dev/null &
else
gdb -tui ${STARROCKS_HOME}/lib/starrocks_be
fi
fi

然后只需运行 ./bin/start_be.sh 而不带任何标志。

如果您在调试 lakehouse 时遇到错误报告,只需在 ~/.gdbinit 中添加 handle SIGSEGV nostop noprint pass

LLVM

当然,您可以使用 LLVM 工具开发 be。

Ubuntu LLVM 安装请参考:https://apt.llvm.org/

然后使用命令:CC=clang-15 CXX=clang++-15 ./build.sh 编译 be。但前提是您的 thirdparty 已经使用 gcc 编译。

最后

欢迎为 StarRocks 贡献代码。🫵