编译

    1. 下载 Docker 镜像

      检查镜像下载完成:

    注意

    1. 运行镜像

      $ docker run -it apache/doris:build-env-ldb-toolchain-latest

      建议以挂载本地 Doris 源码目录的方式运行镜像,这样编译的产出二进制文件会存储在宿主机中,不会因为镜像退出而消失。

      同时,建议同时将镜像中 maven 的 目录挂载到宿主机目录,以防止每次启动镜像编译时,重复下载 maven 的依赖库。

      1. $ docker run -it -v /your/local/.m2:/root/.m2 -v /your/local/doris-DORIS-x.x.x-release/:/root/doris-DORIS-x.x.x-release/ apache/doris:build-env-ldb-toolchain-latest
    2. 下载源码

      启动镜像后,你应该已经处于容器内。可以通过以下命令下载 Doris 源码(已挂载本地源码目录则不用):

    3. 编译 Doris

      1. $ cat /proc/cpuinfo | grep avx2

      不支持则使用以下命令进行编译

      1. $ USE_AVX2=0 sh build.sh

      如果支持,可不加 USE_AVX2=0 ,直接进行编译

      1. $ sh build.sh

      编译完成后,产出文件在 output/ 目录中。

      编译完成后,产出文件在 output/ 目录中。

    自行编译开发环境镜像

    你也可以自己创建一个 Doris 开发环境镜像,具体可参阅 docker/README.md 文件。

    你可以在自己的 linux 环境中直接尝试编译 Doris。

    1. 系统依赖 不同的版本依赖也不相同

      • ad67dd3 之后版本依赖如下:

        GCC 10+, Oracle JDK 1.8+, Python 2.7+, Apache Maven 3.5+, CMake 3.19.2+ Bison 3.0+

    2. 编译 Doris

      与使用 Docker 开发镜像编译一样,编译之前先检查是否支持avx2指令

      1. $ cat /proc/cpuinfo | grep avx2

      支持则使用下面命令进行编译

      1. $ sh build.sh

      如不支持需要加 USE_AVX2=0

      1. $ USE_AVX2=0 sh build.sh

      编译完成后,产出文件在 output/ 目录中。

    1. Could not transfer artifact net.sourceforge.czt.dev:cup-maven-plugin:pom:1.6-cdh from/to xxx

      如遇到上述错误,请参照 PR #4769 修改 fe/pom.xml 中 cloudera 相关的仓库配置。

    2. 第三方依赖下载连接错误、失效等问题

      Doris 所依赖的第三方库的下载连接都在 thirdparty/vars.sh 文件内。随着时间推移,一些下载连接可能会失效。如果遇到这种情况。可以使用如下两种方式解决:

      1. 手动修改 thirdparty/vars.sh 文件

        手动修改有问题的下载连接和对应的 MD5 值。

      2. 使用第三方下载仓库:

        REPOSITORY_URL 中包含所有第三方库源码包和他们的历史版本。

    3. fatal error: Killed signal terminated program ...

      使用 Docker 镜像编译时如遇到上述报错,可能是分配给镜像的内存不足(Docker 默认分配的内存大小为 2GB,编译过程中内存占用的峰值大于 2GB)。

      尝试适当调大镜像的分配内存,推荐 4GB ~ 8GB。

    自 0.13 版本开始,默认的编译产出中将取消对 [1] 和 [2] 两个第三方库的依赖。这两个第三方库为 GNU General Public License V3 协议。该协议与 协议不兼容,因此默认不出现在 Apache 发布版本中。

    移除依赖库 [1] 会导致无法访问 MySQL 外部表。访问 MySQL 外部表的功能会在后续版本中通过 UnixODBC 实现。

    移除依赖库 [2] 会导致在无法读取部分早期版本(0.8版本之前)写入的部分数据。因为早期版本中的数据是使用 LZO 算法压缩的,在之后的版本中,已经更改为 LZ4 压缩算法。后续我们会提供工具用于检测和转换这部分数据。

    1. WITH_MYSQL=1 WITH_LZO=1 sh build.sh

    注意,当用户依赖这两个第三方库时,则默认不在 Apache License 2.0 协议框架下使用 Doris。请注意 GPL 相关协议约束。

    • [1] mysql-5.7.18