Doris 开发日志
想申请 Apache Doris 的 GSoC 2024,于是开始了解 Doris,这里记录一些开发经验。
编译
电脑信息
我的电脑信息:
系统 | Arch Linux |
---|---|
内核 | 6.7.6-arch1-2 |
CPU | AMD Ryzen 5 5600H with Radeon Graphics |
RAM | 13.5 GB |
SWAP | 32 GB |
编译时可能需要很大的内存,目前我电脑在内存满载时有卡死的情况,所以我设置了 32 GB 的 SWAP。
编译方式
官方文档一共给出了 3 种编译方式,分别是:Docker 开发镜像编译,直接编译,以及使用 LDB Toolchain 编译。
Docker 开发镜像实际上就是配置好了 LDB Toolchain 的 Docker 镜像,但是由于开发镜像的系统版本太低,VSCode 提示已经不支持,所以放弃了这种方式。
直接编译基本不可能成功,需要配置的东西太多。
于是就只剩下了 LDB Toolchain 编译,经过我的尝试,这种方式是可以成功的,但是要注意选好 LDB Toolchain 的版本。
依赖安装
Doris 的依赖比较多,当运行 build.sh
时,如果缺少依赖,就会自动下载源码并编译,但是这个过程很长,并且容易出错,我尝试了直接编译和使用 LDB Toolchain 编译,都失败了。
另一种安装依赖的方法就是下载官方编译好的依赖,第三方依赖的仓库为:https://github.com/apache/doris-thirdparty
根据官方的 GitHub Actions 配置文件,master 分支应该安装 tag:automation的依赖, branch-2 分支应该安装 tag:automation-2.0 的依赖。
将压缩包下载到本地,解压后得到一个 installed
文件夹,将其放到 Doris 仓库的 thirdparty
文件夹下,然后运行 build.sh
即可。
使用 LDB Toolchain 编译
根据官方 GitHub Actions 配置文件和我的尝试,LDB Toolchain 的版本应该使用这个 Release:https://github.com/amosbird/ldb_toolchain_gen/releases/tag/v0.18
下载 ldb_toolchain_gen.sh
, 然后执行sh ldb_toolchain_gen.sh /path/to/ldb_toolchain/
, 其中 /path/to/ldb_toolchain/
是要安装 toolchain 的路径,仅支持绝对路径。
之后在 Doris 仓库的根目录下新建一个 custom_env.sh 文件,命令如下:
touch custom_env.sh
chmod a+x custom_env.sh
echo 'export PATH="/path/to/ldb_toolchain/bin:/path/to/doris/thirdparty/installed":$PATH' > custom_env.sh
其中 /path/to/ldb_toolchain/
是 LDB Toolchain 的路径,/path/to/doris/thirdparty/installed
是第三方依赖的路径。
接着安装 JDK,使用包管理器或者官网下载都可以,然后在 custom_env.sh
中指定 JDK 的路径:
export JAVA_HOME=/path/to/jdk
之后运行 build.sh
即可, 会自动运行 custom_env.sh
。
接下来给出几种常用的编译配置:
-
BUILD_TYPE
# Debug 版本
BUILD_TYPE=Debug sh build.sh
# Release 版本
BUILD_TYPE=Release sh build.sh -
DORIS_TOOLCHAIN
# gcc
DORIS_TOOLCHAIN=gcc sh build.sh
# clang
DORIS_TOOLCHAIN=clang sh build.sh -
ENABLE_PCH
# 开启预编译头
ENABLE_PCH=ON sh build.sh
# 关闭预编译头
ENABLE_PCH=OFF sh build.sh根据官方文档, 使用 Clang 编译时需要关闭 PCH:
DORIS_TOOLCHAIN=clang ENABLE_PCH=OFF sh build.sh
-
清理
# 清理编译产物
sh build.sh --clean -
指定编译线程数
sh build.sh -j 4
2024-03-08
官方把 JDK 版本升级到了 17, 强制要求使用 JDK 17 编译,所以需要安装 JDK 17。
因为我仓库里有 JDK 17, 我就直接使用包管理器安装了:
yay -Syu jdk17-openjdk
sudo archlinux-java set java-17-openjdk
之后在 custom_env.sh
中添加:
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
根据这篇 email: https://lists.apache.org/list?dev@doris.apache.org:lte=1M:JDK_17
master 分支的 JDK 版本要求 17, 其他是 11/8。
设置方法是默认使用 JDK8, 定义环境变量 JDK_17
指定 JDK 17 的路径。
看到官方的 CI 没有这样设置,就去提了第一个 PR: https://github.com/apache/doris/pull/32018
睡觉。
最后
PR 待了好几天,最后被员工用其他方法解决了问题,PR 就 close 了。
还是先去学学 15445 沉淀一下吧,不能急躁。