Apache Doris, une base de données analytique en temps réel haute performance, vante une architecture sous-jacente et une conception de code impressionnantes. Pour les développeurs, maîtriser la compilation du code source et le débogage est essentiel pour comprendre le cœur de Doris. Cependant, le processus de construction implique de multiples chaînes d’outils et configurations de dépendances, et lors du débogage, vous pouvez rencontrer divers problèmes complexes qui peuvent laisser les débutants se sentir dépassés.
Cet article vous guide à travers le processus du code source à l’exécution, en fournissant une analyse détaillée des procédures de compilation et de débogage d’Apache Doris. De la configuration de l’environnement et du checkout du code aux solutions aux problèmes courants, nous combinons des exemples pratiques pour vous aider à démarrer rapidement le développement et le débogage avec Doris.
Aperçu
Avez-vous déjà demandé comment une requête SQL est analysée et exécutée du début à la fin ? Dans Apache Doris, ce processus implique de multiples composants principaux et mécanismes internes complexes. Cet article vous guidera à travers le voyage du code source à l’exécution, offrant une analyse complète du processus de construction et de débogage de Doris, et vous aidant à acquérir une compréhension approfondie des principes d’exécution SQL.
1. Environnement
Environnement de base
- Configuration de l’ordinateur. MacBook Pro (Puce : Apple M1, macOS : 15.1)
- JDK. Version 17
- Branche Doris. Utilisez la branche Doris Master (plus précisément, la branche-2.1)
Installation des dépendances de l’environnement
Lorsque vous utilisez Homebrew, la version de JDK installée est 17 car sur macOS, la version arm64 de Homebrew n’inclut pas JDK 8 par défaut. Actuellement, Doris ne prend en charge que JDK8 et 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
Explication des dépendances
1. Java, Maven, etc.. Ceux-ci peuvent être téléchargés séparément pour une gestion plus facile.
- Sur macOS, Zulu JDK17 est recommandé.
- Maven peut être téléchargé depuis le site officiel de Maven.
- Java et Maven téléchargés manuellement doivent être configurés dans vos variables d’environnement.
2. Variables d’environnement des autres dépendances (exemple pour les Macs Apple Silicon) :
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
Ajoutez les configurations ci-dessus à votre fichier ~/.bashrc
ou ~/.zshrc
et exécutez source ~/.bashrc
ou source ~/.zshrc
pour appliquer les modifications.
Installation de Thrift
Remarque : Thrift doit être installé uniquement lorsque vous déboguez uniquement le FE (Frontend). Lors du débogage à la fois du BE (Backend) et du FE, les bibliothèques tierces du BE incluent déjà 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`
Récupération de votre code
Clonez votre code en exécutant les commandes suivantes :
cd ~
mkdir DorisDev
cd DorisDev
git clone <https://github.com/GitHubID/doris.git>
Définir des variables d’environnement
export DORIS_HOME=~/DorisDev/doris
export PATH=$DORIS_HOME/bin:$PATH
Téléchargement des dépendances de construction de Doris
1. Visitez la page Apache Doris Third Party Prebuilt (lien) pour trouver le code source de toutes les bibliothèques tierces. Vous pouvez télécharger directement doris-thirdparty-source.tgz
.
2. Alternativement, vous pouvez télécharger les bibliothèques tierces précompilées depuis la même page, ce qui vous évite de compiler ces bibliothèques vous-même. Référez-vous aux commandes ci-dessous.
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
Lorsque vous exécutez protoc
et thrift
, vous pourriez rencontrer des problèmes pour les ouvrir en raison de problèmes de vérification des développeurs. Dans ce cas, allez dans Sécurité et confidentialité et cliquez sur le bouton Ouvrir quand même dans l’onglet Général pour confirmer que vous souhaitez ouvrir le binaire. Pour plus de détails, référez-vous à Support Apple.
Augmenter la limite maximale des descripteurs de fichiers du système
Après modification, exécutez source
sur le fichier correspondant pour appliquer les changements.
# For bash: echo 'ulimit -n 65536' >>~/.bashrc
# For zsh: echo 'ulimit -n 65536' >>~/.zshrc
2. Compiler Doris
Accédez à votre répertoire principal de Doris et exécutez le script de construction :
cd $DORIS_HOME
# Compile the entire Doris project:
sh build.sh
# Or compile only FE and BE:
sh build.sh --fe --be
Si vous souhaitez accélérer le processus de construction et que vous n’avez pas besoin de la page frontend FE, vous pouvez commenter la section de construction de l’interface utilisateur FE dans le script build.sh :
# FE UI must be built before building FE
#if [[ "${BUILD_FE}" -eq 1 ]]; then
# if [[ "${BUILD_UI}" -eq 1 ]]; then
# build_ui
# fi
#fi
Après une compilation réussie, vous devriez voir une sortie similaire à ce qui suit :
3. Débogage
Configuration de l’environnement de débogage
Ce guide couvre uniquement le débogage du 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.
Démarrez le débogage en utilisant IntelliJ IDEA.
Important : Ne pas ouvrir le répertoire racine du projet Doris ; ouvrez plutôt le répertoire FE pour éviter les conflits avec CLion.
Génération du code FE
Ouvrez le terminal IDEA, naviguez jusqu’au répertoire racine du code, et exécutez :
sh generated-source.sh
Attendez jusqu’à ce que vous voyiez le message « Fait ».
Configuration du débogage pour FE
1. Modifier les configurations.
2. Ajouter une configuration DorisFE. Cliquez sur l’icône + dans le coin supérieur gauche pour ajouter une configuration d’application. Référez-vous à l’image ci-dessous pour les paramètres spécifiques.
3. Répertoire de travail. Réglez-le sur le répertoire fe
dans le code source.
4. Variables d’environnement. Configurez les variables d’environnement de la même manière que celles exportées dans fe/bin/start_fe.sh
dans le répertoire racine de Doris. La variable DORIS_HOME
doit pointer vers le répertoire que vous avez copié plus tôt lors de la configuration.
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
Démarrage de FE
Cliquez sur Exécuter ou Déboguer. Cela déclenchera le processus de construction pour FE ; une fois terminé, le FE démarrera. Dans ce guide, nous choisissons Déboguer.
Démarrage de BE
Étant donné que vous avez déjà copié le package compilé dans le répertoire doris-run
, démarrez le BE depuis ce répertoire :
sh bin/start_be.sh --daemon
Débogage FE
1. Connectez-vous au FE. Utilisez un client MySQL ou DBeaver pour vous connecter au FE lancé par IDEA.
mysql -uroot -h127.0.0.1 -P9030
2. Ajoutez le nœud BE au cluster.
alter system add backend "127.0.0.1:9050";
3. Définissez des points d’arrêt dans le code. Localisez le code ConnectProcessor dans le projet :
Définissez un point d’arrêt dans la méthode handleQuery. Lorsque vous exécutez une requête, le débogueur atteindra le point d’arrêt, et vous pourrez commencer un agréable parcours de débogage. Par exemple, si vous travaillez sur la tâche de migration de syntaxe Doris mentionnée dans les sessions précédentes, vous pouvez utiliser le débogage pour affiner votre code de manière itérative.
FAQ
Question 1
Pendant la compilation, vous pourriez rencontrer une erreur de conflit de verrouillage :
Could not acquire lock(s)
Réponse
Supprimez tous les fichiers .lock
de votre dépôt local Maven en exécutant :
find ~/.m2/repository -name "*.lock" -delete
Question 2
Pendant la compilation, une erreur causée par une version plus récente de Node.js peut survenir :
opensslErrorStack: ['error:03000086:digital envelope routines::initialization error'] library: 'digital envelope routines' reason: 'unsupported' code: 'ERR_OSSL_EVP_UNSUPPORTED'
Réponse
Configurez Node.js pour utiliser le fournisseur OpenSSL hérité en exécutant :
# Instruct Node.js to use the legacy OpenSSL provider export NODE_OPTIONS=--openssl-legacy-provider
Référence : Discussion StackOverflow
Question 3
IntelliJ IDEA ne parvient pas à démarrer le FE avec l’erreur :
java: OutOfMemoryError: insufficient memory
Réponse
Le compilateur de Maven peut ne pas avoir suffisamment de mémoire. Augmentez l’allocation de mémoire comme indiqué ci-dessous :
Question 5
IntelliJ IDEA ne parvient pas à démarrer FE avec l’erreur :
java: cannot find symbol Symbol: class GeneratedMemoPatterns Location: package org.apache.doris.nereids.pattern
Réponse
Résolvez ce problème en exécutant les commandes suivantes dans le répertoire racine de 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/
Question 5
Dans certaines versions, la compilation peut échouer avec l’erreur :
error: reference to ‘detail’ is ambiguous
Réponse
Modifiez le code selon cette PR ou exécutez les commandes suivantes :
wget https://github.com/apache/doris/pull/43868.patch
git apply 43868.patch
Question 6
Dans certaines versions, lors du débogage, le FE sur le port 9030 ne parvient pas à démarrer, et fe.log
signale :
Can not find help zip file: help-resource.zip
Réponse
Rendez-vous dans le répertoire doris/docs
, exécutez les commandes suivantes, puis redémarrez le FE :
cd doris/docs sh build_help_zip.sh
cp -r build/help-resource.zip ../fe/fe-core/target/classes
En suivant ce guide, vous devriez être en mesure de configurer votre environnement, de compiler et de déboguer Apache Doris plus facilement. Bon débogage !
Source:
https://dzone.com/articles/guide-to-building-and-debugging-apache-doris