StarRocks 完美开发环境搭建

鉴于经常有人问我 StarRocks 的开发环境如何搭建,这里本人写一篇教程,方便大家跟着 step-by-step。

什么叫完美?

  • 支持一键编译 BE 和 FE。
  • Clion,IDEA 均支持代码跳转。
  • IDE 全部变量能正常解析,不会出现红线。
  • Clion 可以正常启用其 analyze 功能。
  • 支持 FE 和 BE 的 Debug。

环境准备

鄙人使用环境是,本地开发一台 Mac,远程一台服务器(使用 Ubuntu 22 版本,内存需要至少 16G)。

整体思路是在 Mac 上面写代码,然后通过 IDE 的代码自动同步到服务器,使用服务器对 StarRocks 进行编译和开发。

Mac 环境配置

Thrift 0.13

直接用 brew 安装 Thrift 是没有 0.13 这个版本的,可以用如下命令:

brew tap-new $USER/local-tap
brew extract --version='0.13.0' thrift $USER/local-tap
brew install thrift@0.13.0

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

$ thrift -version
Thrift version 0.13.0

Protobuf

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

brew install protobuf

Maven

brew install maven

Openjdk 1.8 or 11

brew install openjdk@11

Python3

MacOS 自带,无需安装。

相关环境变量

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

服务器 Ubuntu 22 环境配置

下载 StarRocks 代码

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

系统组件安装

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

添加 JAVA_HOME 环境变量

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

对 StarRocks 进行初次编译

cd starrocks/
./build.sh

第一次编译需要下载编译 thirdparty,所以耗时比较长,自己解决网络问题。

第一次编译必须使用 gcc,因为目前 thirdparty 的编译 clang 编不过。

IDE 设置

FE

FE 其实最简单,因为 mac 自己本身就能够编译,进入到 fe 文件夹,执行 mvn install -DskipTests 即可编译成功。

然后用 IDEA 打开 fe 目录即可,没有问题。

本地 debug

你自己断点点一下就行了,和普通 java 程序一致。

远程 debug

修改 ubuntu 服务器中的 start_fe.sh 文件,加入 remote jvm debug 参数。

if [ ${RUN_DAEMON} -eq 1 ]; then
    nohup $LIMIT $JAVA $final_java_opt com.starrocks.StarRocksFE ${HELPER} ${HOST_TYPE} "$@" >> $LOG_DIR/fe.out 2>&1 </dev/null &
else
    $LIMIT $JAVA $final_java_opt com.starrocks.StarRocksFE ${HELPER} ${HOST_TYPE} "$@" >> $LOG_DIR/fe.out 2>&1 </dev/null
fi

改为

if [ ${RUN_DAEMON} -eq 1 ]; then
    nohup $LIMIT $JAVA $final_java_opt com.starrocks.StarRocksFE ${HELPER} ${HOST_TYPE} "$@" >> $LOG_DIR/fe.out 2>&1 </dev/null &
else
    $LIMIT $JAVA $final_java_opt -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 com.starrocks.StarRocksFE ${HELPER} ${HOST_TYPE}
fi

即可。

这样可以使得 start_fe.sh --daemon 仍为正常启动,start_fe.sh 则开启 remote debug 模式。

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 这个参数是从 IDEA 里面复制出来的。

image-20221223235644007

之后就 remote jvm debug 就行了,和普通 java 程序没有区别。

现在新的启动脚本加入了 debug 参数,直接 start_fe.sh --debug 也行。

BE

建议先在 FE 中 mvn install -DskipTests 一次,确保 gensrc 目录下的 thrift 和 protobuf 被正确编译。

执行完后,你还需要进入 gensrc 目录,分别执行 make cleanmake 命令,否则 Clion 会无法正确识别 thrift 文件。

用 Clion 打开 be 目录。

进入 Settings,添加 Toolchains。添加个远程服务器就行了,设置下 Build Tool,C 和 C++ Compiler 就行了。

image-20221224151528803

在 Settings 里面,设置 Deployment。修改下 Mappings 就行了。

image-20221224001055330

在 Settings 里面,设置 Cmake。修改 Toolchain 为刚刚添加的远程 Toolchain。并且在 Environment 中添加如下环境变量:

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

其中注意不要勾选 Include system environment variables

image-20221224151813287
image-20221224151930168

自此,就全部设置完成。等 Clion 和远程服务器同步一会后,就能正常工作代码跳转了。

Debug

BE debug 不和 FE 一样,按钮点点,就能直接运行了,你只能去服务器里面用 gdb 跑。当然 gdb server + Clion remote gdb 也行,不过我不这么干,太卡了。方法与 FE 类似,修改 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

即可。

如果遇到数据湖查询 gdb 报错,在 ~/.gdbinit 中添加 handle SIGSEGV nostop noprint pass 即可。

LLVM

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

然后用 CC=clang-15 CXX=clang++-15 ./build.sh 编译就行了,前提是你的 thirdparty 已经用 gcc 编译完了。

总结

就说到这里吧,感觉自己也懒得写很详细的教程,估计工作太忙了吧。主要感觉这东西没啥技术含量,没啥分享欲望。会的人不需要看,不会的人看了也不会。

参考

自己博客以往的文章。

评论

  1. qwertt
    Macintosh Chrome 109.0.0.0
    2周前
    2023-1-19 12:30:02

    在linux中使用./build.sh编译时报这个错,怎么解决,gcc版本gcc-10.3.0
    [1/996] Building CXX object CMakeFiles/build_version.dir/build_version.cc.o
    FAILED: CMakeFiles/build_version.dir/build_version.cc.o
    ccache /data01/public/gcc/bin/g++ -DHAVE_INTTYPES_H -DHAVE_NETINET_IN_H -DUSE_JEMALLOC -I/data01/zhoukun.1/starrocks/be/src/formats/orc/apache-orc/c++/include -I/data01/zhoukun.1/starrocks/be/src/common -I/data01/zhoukun.1/starrocks/be/src -I/data01/zhoukun.1/starrocks/be/test -I/data01/zhoukun.1/starrocks/be/../gensrc/build -I/data01/zhoukun.1/starrocks/thirdparty/installed/include/breakpad -I/data01/zhoukun.1/starrocks/thirdparty/installed/open_jdk/include -I/data01/zhoukun.1/starrocks/thirdparty/installed/open_jdk/include/linux -isystem /data01/zhoukun.1/starrocks/thirdparty/installed/include -isystem /data01/zhoukun.1/starrocks/thirdparty/installed/gperftools/include -isystem /data01/zhoukun.1/starrocks/thirdparty/installed/include/thrift -isystem /data01/zhoukun.1/starrocks/thirdparty/installed/include/event -Wall -Wno-sign-compare -Wno-unknown-pragmas -pthread -Wno-register -Wno-strict-aliasing -fno-omit-frame-pointer -std=gnu++17 -D__STDC_FORMAT_MACROS -Wno-deprecated -Wno-vla -Wno-comment -DBOOST_DATE_TIME_POSIX_TIME_STD_CONFIG -DBOOST_SYSTEM_NO_DEPRECATED -DBOOST_UUID_RANDOM_PROVIDER_FORCE_POSIX -Werror=return-type -Werror=switch -msse4.2 -mavx2 -Wno-attributes -DS2_USE_GFLAGS -DS2_USE_GLOG -faligned-new -gz=zlib -Werror -g -Wno-unused-local-typedefs -O3 -gdwarf-4 -DNDEBUG -O3 -DNDEBUG -MD -MT CMakeFiles/build_version.dir/build_version.cc.o -MF CMakeFiles/build_version.dir/build_version.cc.o.d -o CMakeFiles/build_version.dir/build_version.cc.o -c /data01/zhoukun.1/starrocks/be/build_Release/build_version.cc
    g++: error: -gz is not supported in this configuration
    ……

    • 博主
      qwertt
      Macintosh Chrome 108.0.0.0
      2周前
      2023-1-19 15:16:15

      感觉像 gcc 版本太低的问题了,你能升级到 gcc 11 看看吗

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇