跳到主要内容

Doris 开发日志

· 阅读需 5 分钟

想申请 Apache Doris 的 GSoC 2024,于是开始了解 Doris,这里记录一些开发经验。

编译

电脑信息

我的电脑信息:

系统Arch Linux
内核6.7.6-arch1-2
CPUAMD Ryzen 5 5600H with Radeon Graphics
RAM13.5 GB
SWAP32 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 沉淀一下吧,不能急躁。