Doris–基础–2.1–部署–源码编译(使用Docker开发镜像)
前提
使用hd用户登陆
完成基础环境搭建
https://blog.csdn.net/zhou920786312/article/details/118212302
1、下载 Docker 镜像
docker pull apache/doris:build-env-ldb-toolchain-latest
1.1、Docker开发镜像 和 Doris版本 关系
- 从 Apache Doris 0.15 版本起,后续镜像版本号将与 Doris 版本号统一。
- 比如:可以使用 apache/doris:build-env-for-0.15.0 来编译 0.15.0 版本。
- apache/doris:build-env-ldb-toolchain-latest 用于编译最新主干版本代码,会随主干版本不断更新。
- 可以查看 docker/README.md 中的更新时间。
1.2、Docker开发镜像 的 JDK
从 build-env-1.3.1 的docker镜像起,同时包含了 OpenJDK 8 和 OpenJDK 11,并且默认使用 OpenJDK 11 编译。
请确保编译使用的 JDK 版本和运行时使用的 JDK 版本一致,否则会导致非预期的运行错误。
你可以在进入编译镜像的容器后,使用以下命令切换默认 JDK 版本:
# 切换到 JDK 8:
alternatives --set java java-1.8.0-openjdk.x86_64
alternatives --set javac java-1.8.0-openjdk.x86_64
export JAVA_HOME=/usr/lib/jvm/java-1.8.0
# 切换到 JDK 11:
alternatives --set java java-11-openjdk.x86_64
alternatives --set javac java-11-openjdk.x86_64
export JAVA_HOME=/usr/lib/jvm/java-11
2、运行镜像
2.1、创建容器
- 将镜像中 maven 的 .m2 目录挂载到宿主机目录,以防止每次启动镜像编译时,重复下载 maven 的依赖库
- 以挂载本地 Doris 源码目录的方式运行镜像,这样编译的产出二进制文件会存储在宿主机中,不会因为镜像退出而消失。
docker run -it \
-v /usr/local/.m2:/root/.m2 \
-v /usr/local/doris-src/:/root/doris-src/ \
apache/doris:build-env-ldb-toolchain-latest
2.2、切换jdk
# 切换到 JDK 8:
alternatives --set java java-1.8.0-openjdk.x86_64
alternatives --set javac java-1.8.0-openjdk.x86_64
export JAVA_HOME=/usr/lib/jvm/java-1.8.0
3、源码
3.1、下载源码
- 我这里选择的版本是1.1.2
https://doris.apache.org/zh-CN/download/
3.2、把源码拷贝到容器里面
cd /usr/local/doris-src/
ls
3.3、解压
cd /usr/local/doris-src/
tar -zxvf apache-doris-1.1.2-src.tar.gz
rm -rf apache-doris-1.1.2-src.tar.gz
4、编译 Doris
在容器里面操作
4.1、查看编译机器是否支持avx2指令集
cat /proc/cpuinfo | grep avx2
# 如果 不支持,使用以下命令进行编译
USE_AVX2=0 sh build.sh
# 如果 支持,使用以下命令进行编译
sh build.sh
4.2、编译
因为我的机器是支持的,所以我的编译命令如下
cd /root/doris-src/apache-doris-1.1.2-src
sh build.sh
4.3、输出
编译完成后,产出文件在 output/ 目录中。
5、常见问题
5.1、注意
如果你是第一次使用 build-env-for-0.15.0 或之后的版本,第一次编译的时候要使用如下命令
sh build.sh --clean --be --fe
编译完成后,产出文件在 output/ 目录中。
5.2、fatal error: Killed signal terminated program …
- 使用 Docker 镜像编译时如遇到上述报错,可能是分配给镜像的内存不足
- Docker 默认分配的内存大小为 2GB,编译过程中内存占用的峰值大于 2GB
- 尝试适当调大镜像的分配内存,推荐 4GB ~ 8GB。