メインコンテンツまでスキップ
に最終更新

Linux で Apache Doris を直接コンパイルする

このドキュメントでは、Docker イメージや LDB Toolchain を使わずに、Linux 上で Apache Doris を直接コンパイルする方法を説明します。Ubuntu 24.04 以降を例に使用します。

対象読者とメリット・デメリット​

項目説明
対象読者Ubuntu 24.04 以降などの新しいディストリビューションで、システムに付属する GCC を使いたい開発者
メリット手順が最も少なく、システムのパッケージマネージャーから依存関係を直接インストールできる
デメリット古いディストリビューションでは、GCC や glibc のバージョンが古すぎてコンパイルに失敗する場合がある。その場合は、代わりに LDB Toolchain を使用する

環境要件​

コンポーネント必要なバージョン
オペレーティングシステムUbuntu 24.04 以降(または他のディストリビューションの同等のバージョン)
JDK8 以降(バージョン 2.1 以前)、17(バージョン 3.0 以降、または master ブランチ)
GCC10 以降
Python2.7 以降
Apache Maven3.5 以降
CMake3.19.2 以降
Bison3.0 以降

1. JDK をインストールする​

コンパイル対象の Doris のバージョンに応じて、JDK を選択します。

# To compile Doris 2.1 or earlier, install JDK 8
sudo apt install openjdk-8-jdk

# To compile Doris 3.0 or later, or the master branch, install JDK 17
sudo apt install openjdk-17-jdk

2. システムの依存関係をインストールする​

sudo apt install build-essential maven cmake byacc flex automake libtool-bin bison binutils-dev libiberty-dev zip unzip libncurses5-dev curl git ninja-build python
sudo add-apt-repository ppa:ubuntu-toolchain-r/ppa
sudo apt update
sudo apt install gcc-10 g++-10
sudo apt-get install autoconf automake libtool autopoint

3. CPU が AVX2 に対応しているか確認する​

cat /proc/cpuinfo | grep avx2

出力が空でなければ、CPU は AVX2 に対応しており、デフォルトのコンパイルオプションを使用できます。出力が空の場合は、ビルドコマンドに USE_AVX2=0 を付けます。

4. ビルドを実行する​

# Default build, producing AVX2-enabled artifacts
sh build.sh

# When the CPU does not support AVX2, append USE_AVX2=0
USE_AVX2=0 sh build.sh

# Build a Debug version of BE
BUILD_TYPE=Debug sh build.sh

5. ビルド成果物の場所を確認する​

ビルドが完了すると、成果物はソースルートディレクトリの output/ 以下に配置されます。

よくある質問​

Q1: 古いバージョンの Ubuntu や CentOS でも直接コンパイルできますか?​

古いディストリビューションに付属する GCC や glibc は、通常、バージョンが古すぎます。代わりに LDB Toolchain または Docker イメージ を使用してください。

Q2: ビルド時に AVX2 not supported と表示されます。​

CPU が AVX2 命令セットに対応していません。USE_AVX2=0 sh build.sh で再実行し、ビルド済みサードパーティライブラリの no-avx2 系列をダウンロードしてください。

Q3: ビルド時に Too many open files と表示されます。​

ulimit -n 65536 でプロセスごとのファイルディスクリプター数の上限を引き上げるか、/etc/security/limits.conf で永続的に設定してください。

Q4: メモリ不足でビルドの途中にプロセスが強制終了されます。​

ninja failed with: signal: killed というメッセージは、通常、メモリ不足(OOM)を示します。メモリが 16 GB 以上のマシンを使用するか、並列度(-j パラメーター)を下げてください。