StarRocks FE开发环境搭建

StarRocks FE开发环境(IDEA)搭建


前言

该文档基于starrocks官方提供的docker镜像,为大家提供在IDEA上进行FE的开发环境搭建,方便大家进行源码的阅读或者参与到starrocks的开发中。


编译

镜像地址

https://hub.docker.com/r/starrocks/dev-env

编译环境准备

系统: centos7.6
内存: 大于4G
磁盘空间: 大于30G
CPU: 核数大于2core,编译时核数越多,相对会越快

编译步骤

1. 下载docker(已有可以忽略)
yum install -y docker
2. 启动docker
systemctl start docker
3. pull 镜像
docker pull starrocks/dev-env:main
4. 启动镜像
docker run -it --name starrocks-image -d starrocks/dev-env:main
5. 进入镜像
docker exec -it starrocks-image /bin/bash
6. 下载代码
git clone https://github.com/StarRocks/starrocks.git
7. 编译
cd starrocks
sh build.sh
8. 编译不需要AVX2支持的starrocks
vi build.sh
将USE_AVX2=ON 修改为USE_AVX2=OFF
保存退出后,执行 sh build.sh

整个过程大概持续一个小时左右,等待编译完成。

获取源码

具体路径根据自己docker的配置不同路径而不一样,默认在以下目录:

/var/lib/docker/overlay2/3c9410498c81adc175946ca8a5f75a75372d5c83b4a51227152cc3ce6b655924/merged/var/local

在当前目录下有starrocks目录,可以打包,然后获取出来。


搭建环境

使用idea打开当前项目,等待加载完成后进行:

1. 配置启动环境:(具体位置根据自己工作目录确定)

img_20

2.目录及文件配置:

主要为:conf目录,fe.conf配置文件,元数据目录meta

img_21
至此,fe的开发环境已经搭建完成。


使用环境

项目启动文件位于:

fe/fe-core/src/main/java/com/starrocks/StarRocksFE.java

启动后,可以使用带有mysql-client的机器连接该fe节点,至此,就可以愉快的进行源码阅读或者debug之旅了!


3赞

可以在mac上编译吗?

应该是可以的,使用docker镜像编译的话,不需要自己构建依赖

这个太好用了,有没有be的开发环境

be的后面也会有的

还能在写详细点吗,docker不了解还是不太懂

比如获取源码,如何根据找到配置路径,如何打包出来等等

可以,抽空更新下

大佬,请教下编译完成后使用idea搭建环境这步怎么搞呢?
我看文章理解的是把docker里编译完的starrocks文件夹整个拉出来然后放到本地,然后用idea打开本地文件进行调试。可是我这样拉到本地那项目的mvn依赖不就还得再重新拉一遍么?
求教

编译完成的项目里面有需要的依赖

感谢大佬,FE的开发环境搭好了,请问下BE也是这样么?有计划BE也出一份分享吗,对cpp不是很了解。求教谢谢

/var/lib/docker/overlay2/3c9410498c81adc175946ca8a5f75a75372d5c83b4a51227152cc3ce6b655924/merged/var/local

这个3c9410498c81adc175946ca8a5f75a75372d5c83b4a51227152cc3ce6b655924是从docker image inspect里面的吗?

   "MergedDir": "/var/lib/docker/overlay2/665b1144dae3d90004d2c0383573814f4ed9398ffbc0dd20f6c57e5b7a9c8edc/merged",
                "UpperDir": "/var/lib/docker/overlay2/665b1144dae3d90004d2c0383573814f4ed9398ffbc0dd20f6c57e5b7a9c8edc/diff",
                "WorkDir": "/var/lib/docker/overlay2/665b1144dae3d90004d2c0383573814f4ed9398ffbc0dd20f6c57e5b7a9c8edc/work"

为啥我665b1144dae3d90004d2c0383573814f4ed9398ffbc0dd20f6c57e5b7a9c8edc里没有merge目录呢,只有下面几个

total 40
drwx------   4 root root  4096 10月 30 13:58 ./
drwx------ 128 root root 20480 12月 19 12:31 ../
-rw-------   1 root root     0 11月  2 23:02 committed
drwxr-xr-x   3 root root  4096 10月 30 13:57 diff/
-rw-r--r--   1 root root    26 10月 30 13:57 link
-rw-r--r--   1 root root   260 10月 30 13:57 lower
drwx------   2 root root  4096 10月 30 13:57 work/

你看下这几个目录里面有没有,或者直接docker启动的时候挂载本地磁盘目录

nice,期待be的

目前我的经验是这样的:

  1. 准备好starrocks/dev-env:main镜像, docker pull starrocks/dev-env:main
  2. 准备好starrocks源代码, git clone https://github.com/StarRocks/starrocks.git
  3. 启动容器, 并将.m2和源代码mount到容器中, 以便重复执行时节省时间.
    docker run -it -v $PWD/starrocks:/var/local/starrocks -v $PWD/.m2:/root/.m2 --rm --entrypoint bash starrocks/dev-env:main
  4. 进入代码目录, 先编译第三方库: cd starrocks/thirdparty, 并修改build-thirdparty.sh后执行 bash build-thirdparty.sh
# croaring bitmap

build_croaringbitmap() {undefined
    check_if_source_exist $CROARINGBITMAP_SOURCE
    cd $TP_SOURCE_DIR/$CROARINGBITMAP_SOURCE
    mkdir -p $BUILD_DIR && cd $BUILD_DIR
    rm -rf CMakeCache.txt CMakeFiles/
    CXXFLAGS="-O3 -mno-avx2 -mno-avx" \   # 增加两个选项
    LDFLAGS="-L${TP_LIB_DIR} -static-libstdc++ -static-libgcc" \
    $CMAKE_CMD -DROARING_BUILD_STATIC=ON -DCMAKE_INSTALL_PREFIX=$TP_INSTALL_DIR \
    -DCMAKE_INCLUDE_PATH="$TP_INSTALL_DIR/include" \
    -DENABLE_ROARING_TESTS=OFF \          
    -DROARING_DISABLE_NATIVE=ON \
    -DFORCE_AVX=OFF \   # 改成OFF
    -DCMAKE_LIBRARY_PATH="$TP_INSTALL_DIR/lib;$TP_INSTALL_DIR/lib64" ..
    make -j$PARALLEL && make install
}
  1. 编译starrocks be: cd starrocks && bash build.sh --be
  2. 只因为服务器不支持avx2的话编译出be即可,fe仍用对应的官方编译版本.
1赞


按照上述操作,starrroks fe可以启动起来,但是有一个问题是在跑单测的时候,build and run 过程特别慢,请问这个需要如何调整呢,目前是在mac系统下进行运行fe的