Apache Dorisは、高性能でリアルタイムな分析データベースで、印象的な基盤アーキテクチャとコード設計を誇っています。開発者にとって、ソースコードのコンパイルとデバッグの習得がDorisのコアを理解するための鍵です。ただし、ビルドプロセスには複数のツールチェーンと依存関係の構成が必要であり、デバッグ中には初心者を圧倒させるさまざまな複雑な問題に遭遇することがあります。
この記事では、ソースコードからランタイムまでのプロセスを詳細に解説し、Apache Dorisのコンパイルおよびデバッグ手順を提供します。環境の設定やコードのチェックアウトから一般的な問題のトラブルシューティングまで、実践的な例を組み合わせて、Dorisの開発とデバッグを迅速に始めるのに役立ちます。
概要
SQLクエリが最初から最後までどのように解析され実行されるかを考えたことがありますか?Apache Dorisでは、このプロセスには複数のコアコンポーネントと複雑な内部メカニズムが関与します。本記事では、ソースコードからランタイムまでの旅を案内し、Dorisのビルドおよびデバッグプロセスの包括的な分析を提供し、SQL実行原理の深い理解を助けます。
1. 環境
基本環境
- コンピュータ構成:MacBook Pro(チップ:Apple M1、macOS:15.1)
- JDK:バージョン17
- Dorisブランチ:Doris Masterブランチ(具体的には、branch-2.1)
環境依存関係のインストール
Homebrewを使用する場合、macOSのarm64バージョンはデフォルトでJDK 8を含んでいないため、インストールされるJDKバージョンは17になります。現在、DorisはJDK8とJDK17のみをサポートしています。
brew install automake autoconf libtool pkg-config texinfo coreutils gnu-getopt \ python@3 cmake ninja ccache bison byacc gettext wget pcre maven llvm@16 openjdk@17 npm
依存関係の説明
1. Java、Mavenなど。これらは個別にダウンロードして管理しやすくすることができます。
- macOSでは、Zulu JDK17が推奨されています。
- Mavenは公式Mavenウェブサイトからダウンロードできます。
- 手動でダウンロードしたJavaとMavenは環境変数で設定する必要があります。
2. その他の依存関係の環境変数(Apple Silicon Macsの例):
export PATH=/opt/homebrew/opt/llvm/bin:$PATH
export PATH=/opt/homebrew/opt/bison/bin:$PATH
export PATH=/opt/homebrew/opt/texinfo/bin:$PATH
ln -s -f /opt/homebrew/bin/python3 /opt/homebrew/bin/python
上記の設定を~/.bashrc
または~/.zshrc
ファイルに追加し、source ~/.bashrc
またはsource ~/.zshrc
を実行して変更を適用してください。
Thriftのインストール
注意: ThriftはFE(フロントエンド)のみをデバッグする場合にのみインストールする必要があります。BE(バックエンド)とFEの両方をデバッグする場合は、BEのサードパーティライブラリにはすでにThriftが含まれています。
MacOS:
1. Download: `brew install [email protected]`
2. Create a symbolic link:
`mkdir -p ./thirdparty/installed/bin`
# Apple Silicon 芯片 macOS
`ln -s /opt/homebrew/Cellar/[email protected]/0.16.0/bin/thrift ./thirdparty/installed/bin/thrift`
# Intel 芯片 macOS
`ln -s /usr/local/Cellar/[email protected]/0.16.0/bin/thrift ./thirdparty/installed/bin/thrift`
Note: Running `brew install [email protected]` on macOS may report that the version cannot be found. To resolve this, execute the following commands in the terminal:
1. `brew tap homebrew/core --force`
2. `brew tap-new $USER/local-tap`
3. `brew extract --version='0.16.0' thrift $USER/local-tap`
4. `brew install [email protected]`
Reference: `https://gist.github.com/tonydeng/02e571f273d6cce4230dc8d5f394493c`
コードの取得
以下のコマンドを実行してコードをクローンしてください:
cd ~
mkdir DorisDev
cd DorisDev
git clone <https://github.com/GitHubID/doris.git>
環境変数の設定
export DORIS_HOME=~/DorisDev/doris
export PATH=$DORIS_HOME/bin:$PATH
Dorisビルドの依存関係のダウンロード
1. Apache Doris Third Party Prebuilt ページ(リンク)にアクセスして、すべてのサードパーティライブラリのソースコードを見つけます。直接 doris-thirdparty-source.tgz
をダウンロードできます。
2. あるいは、同じページから事前にコンパイルされたサードパーティライブラリをダウンロードすることもできます。以下のコマンドを参照してください。
cd thirdparty
rm -rf installed
# For Intel Macs: curl -L <https://github.com/apache/doris-thirdparty/releases/download/automation/doris-thirdparty-prebuilt-darwin-x86_64.tar.xz> \\
-o - | tar -Jxf -
# For Apple Silicon Macs: curl -L <https://github.com/apache/doris-thirdparty/releases/download/automation/doris-thirdparty-prebuilt-darwin-arm64.tar.xz> \\
-o - | tar -Jxf -
# Verify that protoc and thrift run correctly:
cd installed/bin
./protoc --version
./thrift --versio
protoc
や thrift
を実行する際、開発者検証の問題によりそれらを開けない場合があります。その場合は、セキュリティとプライバシー に移動し、一般タブで 強制的に開く ボタンをクリックしてバイナリを開くことを確認してください。詳細については、Appleサポート を参照してください。
システムの最大ファイル記述子制限の増加
変更後、対応するファイルで source
を実行して変更を適用してください。
# For bash: echo 'ulimit -n 65536' >>~/.bashrc
# For zsh: echo 'ulimit -n 65536' >>~/.zshrc
2. Dorisのコンパイル
Dorisのホームディレクトリに移動して、ビルドスクリプトを実行します:
cd $DORIS_HOME
# Compile the entire Doris project:
sh build.sh
# Or compile only FE and BE:
sh build.sh --fe --be
ビルドプロセスを高速化し、FEフロントエンドページを必要としない場合は、build.sh スクリプトの FE UI ビルドセクションをコメントアウトできます:
# FE UI must be built before building FE
#if [[ "${BUILD_FE}" -eq 1 ]]; then
# if [[ "${BUILD_UI}" -eq 1 ]]; then
# build_ui
# fi
#fi
コンパイルが成功すると、次のような出力が表示されるはずです:
3. デバッグ
デバッグ環境の設定
このガイドは、Doris FEのデバッグに焦点を当てています。
# Copy the compiled package to a separate directory:
cp -r output/ ../doris-run
# Configure FE/BE settings:
1. Set the IP and directories.
2. For BE, add the extra configuration: min_file_descriptor_number = 10000.
IntelliJ IDEAを使用してデバッグを開始します。
重要: Dorisプロジェクトのルートディレクトリを開かず、かわりにFEディレクトリを開いて、CLionとの競合を避けてください。
FEコードの生成
IDEAターミナルを開き、コードのルートディレクトリに移動し、次のコマンドを実行します:
sh generated-source.sh
メッセージ「Done」が表示されるまで待ちます。
FEのデバッグの構成
1. 構成の編集。
2. DorisFE構成を追加します。上部左側の+アイコンをクリックしてアプリケーション構成を追加します。具体的な設定については、以下の画像を参照してください。
3. 作業ディレクトリ。ソースコード内のfe
ディレクトリに設定します。
4. 環境変数。環境変数を設定します。これはDorisルートディレクトリのfe/bin/start_fe.sh
でエクスポートされているものと同様に構成します。DORIS_HOME
変数は、セットアップ時にコピーしたディレクトリを指すべきです。
JAVA_OPTS=-Xmx8092m;
LOG_DIR=/Users/abc/DorisDev/doris-run/fe/log;
PID_DIR=/Users/abc/DorisDev/doris-run/fe/log;
DORIS_HOME=/Users/abc/DorisDev/doris-run/fe
FEの起動
実行またはデバッグをクリックします。これによりFEのビルドプロセスが開始され、完了するとFEが起動します。このガイドでは、デバッグを選択します。
BEの起動
コンパイルされたパッケージをdoris-run
ディレクトリにすでにコピーしたので、そのディレクトリ内からBEを起動します。
sh bin/start_be.sh --daemon
FEのデバッグ
1. FEに接続する。IDEAで起動したFEにMySQLクライアントまたはDBeaverを使用して接続します。
mysql -uroot -h127.0.0.1 -P9030
2. BEノードをクラスターに追加する。
alter system add backend "127.0.0.1:9050";
3. コードにブレークポイントを設定する。プロジェクト内のConnectProcessorコードを見つけて、
handleQueryメソッドにブレークポイントを設定します。クエリを実行すると、デバッガがブレークポイントに到達し、楽しいデバッグの旅を開始できます。たとえば、前回のセッションで言及されたDoris構文移行タスクに取り組んでいる場合、デバッグを使用してコードを反復的に改良できます。
FAQ
質問 1
コンパイル中にロックの競合エラーが発生する可能性があります:
Could not acquire lock(s)
回答
ローカルMavenリポジトリ内の任意の.lock
ファイルを削除するには、次を実行します:
find ~/.m2/repository -name "*.lock" -delete
質問 2
コンパイル中に、新しいバージョンのNode.jsによって発生するエラーが発生する可能性があります:
opensslErrorStack: ['error:03000086:digital envelope routines::initialization error'] library: 'digital envelope routines' reason: 'unsupported' code: 'ERR_OSSL_EVP_UNSUPPORTED'
回答
以下を実行して、Node.jsをレガシーOpenSSLプロバイダーを使用するように設定します:
# Instruct Node.js to use the legacy OpenSSL provider export NODE_OPTIONS=--openssl-legacy-provider
質問 3
IntelliJ IDEAがFEの起動に失敗し、「
java: OutOfMemoryError: insufficient memory
」というエラーが表示される場合:
Mavenのコンパイラに十分なメモリが割り当てられていない可能性があります。以下に示すようにメモリ割り当てを増やしてください:
質問5
IntelliJ IDEAがエラーでFEの起動に失敗する場合があります:
java: cannot find symbol Symbol: class GeneratedMemoPatterns Location: package org.apache.doris.nereids.pattern
回答
次のコマンドをDorisのルートディレクトリで実行してこの問題を解決します:
mv fe/fe-core/target/generated-sources/annotations/org/apache/doris/nereids/pattern/ fe/fe-core/target/generated-sources/org/apache/doris/
mv fe/fe-core/target/generated-sources/cup/org/apache/doris/analysis/ fe/fe-core/target/generated-sources/org/apache/doris/
質問5
一部のバージョンでは、コンパイルがエラーで失敗する場合があります:
error: reference to ‘detail’ is ambiguous
回答
このPRに従ってコードを変更するか、次のコマンドを実行します:
wget https://github.com/apache/doris/pull/43868.patch
git apply 43868.patch
質問6
デバッグ中に、ポート9030でFEの起動に失敗する場合やfe.log
に報告される場合があります:
Can not find help zip file: help-resource.zip
回答
doris/docs
ディレクトリに移動し、次のコマンドを実行してからFEを再起動してください:
cd doris/docs sh build_help_zip.sh
cp -r build/help-resource.zip ../fe/fe-core/target/classes
このガイドに従うことで、Apache Dorisの環境構築、コンパイル、およびデバッグをより簡単に行うことができます。ハッピーなデバッグ!
Source:
https://dzone.com/articles/guide-to-building-and-debugging-apache-doris