Apache Doris ARM 架构编译

    注意,该文档仅作为指导性文档。在不同环境中编译可能出现其他错误。

    1. KylinOS 版本:

    2. CPU型号:

      1. model name : Phytium,FT-2000+/64

    该方法适用于 之后的 Doris 版本。

    下载 ldb_toolchain_gen.aarch64.sh

    之后的编译方式参阅

    注意其中 jdk 和 nodejs 都需要下载对应的 aarch64 版本:

    1. Java8-aarch64

    CentOS & Ubuntu

    1. 系统版本:CentOS 8.4、Ubuntu 20.04
    2. 系统架构:ARM X64
    3. CPU:4 C
    4. 内存:16 GB
    5. 硬盘:40GB(SSD)、100GB(SSD)

    软件环境对照表

    软件环境安装命令

    CentOS 8.4
    • 创建软件下载安装包根目录和软件安装根目录

      1. # 创建软件下载安装包根目录
      2. mkdir /opt/tools
      3. # 创建软件安装根目录
      4. mkdir /opt/software
    • Git

      1. # 省去编译麻烦,直接使用 yum 安装
      2. yum install -y git
    • JDK8

      1. # 两种方式,第一种是省去额外下载和配置,直接使用 yum 安装,安装 devel 包是为了获取一些工具,如 jps 命令
      2. yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
      3. # 第二种是下载 arm64 架构的安装包,解压配置环境变量后使用
      4. cd /opt/tools
      5. wget https://doris-thirdparty-repo.bj.bcebos.com/thirdparty/jdk-8u291-linux-aarch64.tar.gz && \
      6. tar -zxvf jdk-8u291-linux-aarch64.tar.gz && \
      7. mv jdk1.8.0_291 /opt/software/jdk8
    • Maven

      1. cd /opt/tools
      2. # wget 工具下载后,直接解压缩配置环境变量使用
      3. wget https://dlcdn.apache.org/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz && \
      4. tar -zxvf apache-maven-3.6.3-bin.tar.gz && \
      5. mv apache-maven-3.6.3 /opt/software/maven
    • NodeJS

      1. cd /opt/tools
      2. # 下载 arm64 架构的安装包
      3. wget https://doris-thirdparty-repo.bj.bcebos.com/thirdparty/node-v16.3.0-linux-arm64.tar.xz && \
      4. tar -xvf node-v16.3.0-linux-arm64.tar.xz && \
      5. mv node-v16.3.0-linux-arm64 /opt/software/nodejs
    • LDB-Toolchain

      1. cd /opt/tools
      2. # 下载 LDB-Toolchain ARM 版本
      3. wget https://github.com/amosbird/ldb_toolchain_gen/releases/download/v0.9.1/ldb_toolchain_gen.aarch64.sh && \
      4. sh ldb_toolchain_gen.aarch64.sh /opt/software/ldb_toolchain/
    • 配置环境变量

      1. # 配置环境变量
      2. vim /etc/profile.d/doris.sh
      3. export JAVA_HOME=/opt/software/jdk8
      4. export MAVEN_HOME=/opt/software/maven
      5. export NODE_JS_HOME=/opt/software/nodejs
      6. export LDB_HOME=/opt/software/ldb_toolchain
      7. export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$NODE_JS_HOME/bin:$LDB_HOME/bin:$PATH
      8. # 保存退出并刷新环境变量
      9. source /etc/profile.d/doris.sh
      10. # 测试是否成功
      11. java -version
      12. > java version "1.8.0_291"
      13. mvn -version
      14. > Apache Maven 3.6.3
      15. node --version
      16. > v16.3.0
      17. gcc --version
      18. > gcc-11
    • 安装其他额外环境和组件

    Ubuntu 20.04
    • 更新 apt-get 软件库

      1. apt-get update
    • 创建软件下载安装包根目录和软件安装根目录

      1. # 创建软件下载安装包根目录
      2. mkdir /opt/tools
      3. # 创建软件安装根目录
      4. mkdir /opt/software
    • Git

      1. # 省去编译麻烦,直接使用 apt-get 安装
      2. apt-get -y install git
    • JDK8

      1. # 下载 arm64 架构的安装包,解压配置环境变量后使用
      2. cd /opt/tools
      3. wget https://doris-thirdparty-repo.bj.bcebos.com/thirdparty/jdk-8u291-linux-aarch64.tar.gz && \
      4. tar -zxvf jdk-8u291-linux-aarch64.tar.gz && \
      5. mv jdk1.8.0_291 /opt/software/jdk8
    • Maven

      1. cd /opt/tools
      2. # wget 工具下载后,直接解压缩配置环境变量使用
      3. wget https://dlcdn.apache.org/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz && \
      4. tar -zxvf apache-maven-3.6.3-bin.tar.gz && \
      5. mv apache-maven-3.6.3 /opt/software/maven
    • NodeJS

      1. cd /opt/tools
      2. # 下载 arm64 架构的安装包
      3. wget https://doris-thirdparty-repo.bj.bcebos.com/thirdparty/node-v16.3.0-linux-arm64.tar.xz && \
      4. tar -xvf node-v16.3.0-linux-arm64.tar.xz && \
      5. mv node-v16.3.0-linux-arm64 /opt/software/nodejs
    • LDB-Toolchain

    • 配置环境变量

      1. # 配置环境变量
      2. vim /etc/profile.d/doris.sh
      3. export JAVA_HOME=/opt/software/jdk8
      4. export MAVEN_HOME=/opt/software/maven
      5. export NODE_JS_HOME=/opt/software/nodejs
      6. export LDB_HOME=/opt/software/ldb_toolchain
      7. export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$NODE_JS_HOME/bin:$LDB_HOME/bin:$PATH
      8. # 保存退出并刷新环境变量
      9. source /etc/profile.d/doris.sh
      10. # 测试是否成功
      11. java -version
      12. > java version "1.8.0_291"
      13. mvn -version
      14. > Apache Maven 3.6.3
      15. node --version
      16. > v16.3.0
      17. gcc --version
      18. > gcc-11
    • 安装其他额外环境和组件

      1. # install required system packages
      2. sudo apt install -y build-essential cmake flex automake bison binutils-dev libiberty-dev zip libncurses5-dev curl ninja-build
      3. sudo apt-get install -y make
      4. sudo apt-get install -y unzip
      5. sudo apt-get install -y python2
      6. sudo apt-get install -y byacc
      7. sudo apt-get install -y automake
      8. sudo apt-get install -y libtool
      9. sudo add-apt-repository ppa:ubuntu-toolchain-r/ppa
      10. sudo apt update
      11. sudo apt install gcc-11 g++-11
      12. sudo apt-get -y install autoconf autopoint
      13. # install autoconf-2.69
      14. cd /opt/tools
      15. wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz && \
      16. tar zxf autoconf-2.69.tar.gz && \
      17. mv autoconf-2.69 /opt/software/autoconf && \
      18. cd /opt/software/autoconf && \
      19. ./configure && \
      20. make && \
      21. make install

    下载源码

    1. cd /opt
    2. git clone https://github.com/apache/doris.git

    安装部署

    查看是否支持 AVX2 指令集

    若有数据返回,则代表支持,若无数据返回,则代表不支持

    1. cat /proc/cpuinfo | grep avx2
    执行编译
    1. # 支持 AVX2 指令集的机器,直接编译即可
    2. sh build.sh
    3. # 不支持 AVX2 指令集的机器,使用如下命令编译
    4. USE_AVX2=OFF sh build.sh
    1. 编译第三方库 libhdfs3.a ,找不到文件夹

      • 问题描述

        在执行编译安装过程中,出现了如下报错

      • 问题原因

        第三方库的依赖下载有问题

    2. python 命令未找到

      • 问题描述

        • 执行 build.sh 时抛出异常

          /opt/doris/env.sh: line 46: python: command not found

          Python 2.7.18

      • 问题原因

        经查找,发现该系统默认使用 python2.7python3.6python2python3 这几个命令来执行 python 命令,Doris安装依赖需要 python 2.7+ 版本即可,故只需要添加名为 python 的命令连接即可,使用版本2和版本3的都可以

      • 解决方案

        建立 \usr\binpython 命令的软连接

        1. # 查看python安装目录
        2. whereis python
        3. # 建立软连接
        4. sudo ln -s /usr/bin/python2.7 /usr/bin/python
    3. 编译结束后没有 output 目录

      • 问题描述

        • build.sh 执行结束后,目录中未发现 output 文件夹.
      • 问题原因

        未成功编译,需重新编译

      • 解决方案

        1. sh build.sh --clean
    4. spark-dpp 编译失败

      • 问题描述

        • 执行 build.sh 编译以后,编译至 Spark-DPP 报错失败

          Failed to execute goal on project spark-dpp

      • 问题原因

        最后的错误提示,是由于下载失败(且由于是未能连接到 repo.maven.apache.org 中央仓库)的问题

        重新 build

      • 解决方案

        • 重新 build
    5. 剩余空间不足,编译失败

      • 问题描述

        • 编译过程中报 构建 CXX 对象失败,提示剩余空间不足

          fatal error: error writing to /tmp/ccKn4nPK.s: No space left on device 1112 | } // namespace doris::vectorized compilation terminated.

      • 问题原因

        设备剩余空间不足

      • 解决方案

        扩大设备剩余空间,如删除不需要的文件等

    6. 启动FE失败,事务-20 问题

      • 问题描述

        在启动 FE 时,报事务错误 20 问题,状态为 UNKNOWN

      • 问题原因

        硬盘空间不足,需更多空间

      • 解决方案

        释放硬盘空间或者挂载新硬盘

    7. BDB 环境设置异常,磁盘寻找错误

      • 问题描述

        在迁移 FE 所在的盘符后启动 FE 报异常

      • 问题原因

        迁移了 FE 所在的位置,元数据存储的硬盘信息无法匹配到,或者该硬盘损坏或未挂载

      • 解决方案

        • 检查硬盘是否正常,是否初始化并正确挂载
        • 修复 FE 元数据
        • 若为测试机器,则可以删除元数据目录重新启动
    8. 在 pkg.config 中找不到 pkg.m4 文件

      • 问题描述

        • 编译过程中出现了找不到文件错误,报错如下

          Couldn’t find pkg.m4 from pkg-config. Install the appropriate package for your distribution or set ACLOCAL_PATH to the directory containing pkg.m4.

        • 通过查找上面的日志,发现是 libxml2 这个三方库在编译的时候出现了问题

      • 问题原因

        libxml2 三方库编译错误,找不到 pkg.m4 文件

        猜测:

        1. Ubuntu 系统加载环境变量时有异常,导致 ldb 目录下的索引未被成功加载
        2. 在 libxml2 编译时检索环境变量失效,导致编译过程没有检索到 ldb/aclocal 目录
      • 解决方案

        将 ldb/aclocal 目录下的 pkg.m4 文件拷贝至 libxml2/m4 目录下,重新编译第三方库

    9. 执行测试 CURL_HAS_TLS_PROXY 失败

      • 问题描述

        • 三方包编译过程报错,错误如下

          -- Performing Test CURL_HAS_TLS_PROXY - Failed CMake Error at cmake/dependencies.cmake:15 (get_property): INTERFACE_LIBRARY targets may only have whitelisted properties. The property “LINK_LIBRARIES_ALL” is not allowed.

        • 查看日志以后,发现内部是由于 curl No such file or directory

      • 问题原因

        编译环境有错误,查看 gcc 版本后发现是系统自带的 9.3.0 版本,故而没有走 ldb 编译,需设置 ldb 环境变量

      • 解决方案

        配置 ldb 环境变量

        1. # 配置环境变量
        2. vim /etc/profile.d/ldb.sh
        3. export LDB_HOME=/opt/software/ldb_toolchain
        4. export PATH=$LDB_HOME/bin:$PATH
        5. # 保存退出并刷新环境变量
        6. source /etc/profile.d/ldb.sh
        7. # 测试
        8. gcc --version
        9. > gcc-11
    10. 其他异常问题

    • 问题描述

      如有以下组件的错误提示,则统一以该方案解决

      • bison 相关
        1. 安装 bison-3.0.4 时报 fseterr.c 错误
      • flex 相关
        1. flex 命令未找到
      • cmake 相关
        1. cmake 命令未找到
        2. cmake 找不到依赖库
        3. cmake 找不到 CMAKE_ROOT
        4. cmake 环境变量 CXX 中找不到编译器集
      • boost 相关
        1. Boost.Build 构建引擎失败
      • mysql 相关
        1. 找不到 mysql 的客户端依赖 a 文件
      • gcc 相关
        1. GCC 版本需要11+
    • 问题原因

      未使用 Ldb-Toolschain 进行编译

      • 检查 Ldb-Toolschain 环境变量是否配置
      • 查看 gcc 版本是否是 gcc-11