Apache Doris, eine leistungsstarke, echtzeitfähige analytische Datenbank, prahlt mit einer beeindruckenden zugrundeliegenden Architektur und Code-Design. Für Entwickler ist das Beherrschen der Quellcodekompilierung und -debugging der Schlüssel zum Verständnis des Kerns von Doris. Der Build-Prozess umfasst jedoch mehrere Toolchains und Abhängigkeitskonfigurationen, und während des Debuggens können Sie auf verschiedene komplexe Probleme stoßen, die Anfänger überfordern können.
In diesem Artikel führen wir Sie durch den Prozess vom Quellcode bis zur Laufzeit und bieten eine detaillierte Analyse der Kompilierungs- und Debugging-Verfahren von Apache Doris. Vom Einrichten der Umgebung und dem Auschecken des Codes bis hin zur Behebung häufiger Probleme kombinieren wir praktische Beispiele, um Ihnen einen schnellen Einstieg in die Doris-Entwicklung und -Debugging zu ermöglichen.
Überblick
Haben Sie sich jemals gefragt, wie eine SQL-Abfrage von Anfang bis Ende analysiert und ausgeführt wird? Bei Apache Doris beinhaltet dieser Prozess mehrere Kernkomponenten und komplexe interne Mechanismen. Dieser Artikel führt Sie durch die Reise vom Quellcode bis zur Laufzeit, bietet eine umfassende Analyse des Build- und Debugging-Prozesses von Doris und hilft Ihnen, ein tiefes Verständnis der SQL-Ausführungsprinzipien zu erlangen.
1. Umgebung
Grundlegende Umgebung
- Computerkonfiguration. MacBook Pro (Chip: Apple M1, macOS: 15.1)
- JDK. Version 17
- Doris-Zweig. Verwenden Sie den Doris Master Zweig (speziell den Zweig-2.1)
Installieren von Umgebungsabhängigkeiten
Bei Verwendung von Homebrew ist die installierte JDK-Version 17, da die arm64-Version von Homebrew auf macOS standardmäßig nicht JDK 8 enthält. Derzeit unterstützt Doris nur JDK8 und 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
Erklärung der Abhängigkeiten
1. Java, Maven usw.. Diese können separat heruntergeladen werden, um die Verwaltung zu erleichtern.
- Auf macOS wird Zulu JDK17 empfohlen.
- Maven kann von der offiziellen Maven-Website heruntergeladen werden.
- Manuell heruntergeladenes Java und Maven müssen in Ihren Umgebungsvariablen konfiguriert werden.
2. Andere Umgebungsvariablen von Abhängigkeiten (Beispiel für 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
Fügen Sie die obigen Konfigurationen Ihrer ~/.bashrc
oder ~/.zshrc
-Datei hinzu und führen Sie source ~/.bashrc
oder source ~/.zshrc
aus, um die Änderungen anzuwenden.
Installation von Thrift
Hinweis: Thrift muss nur installiert werden, wenn Sie nur das FE (Frontend) debuggen. Wenn Sie sowohl BE (Backend) als auch FE debuggen, sind die BE-Drittanbieterbibliotheken bereits mit Thrift ausgestattet.
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`
Ihr Code abrufen
Klonen Sie Ihren Code, indem Sie die folgenden Befehle ausführen:
cd ~
mkdir DorisDev
cd DorisDev
git clone <https://github.com/GitHubID/doris.git>
Setzen von Umgebungsvariablen
export DORIS_HOME=~/DorisDev/doris
export PATH=$DORIS_HOME/bin:$PATH
Herunterladen von Doris Build-Abhängigkeiten
1. Besuchen Sie die Seite Apache Doris Third Party Prebuilt (Link), um den Quellcode für alle Drittanbieter-Bibliotheken zu finden. Sie können direkt doris-thirdparty-source.tgz
herunterladen.
2. Alternativ können Sie die vorkompilierten Drittanbieter-Bibliotheken von derselben Seite herunterladen, was Sie davor bewahrt, diese Bibliotheken selbst zu kompilieren. Verwenden Sie die folgenden Befehle.
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
Bei der Ausführung von protoc
und thrift
können Sie auf Probleme beim Öffnen stoßen, die auf Entwicklerverifizierungsprobleme zurückzuführen sind. In diesem Fall wechseln Sie zu Sicherheit & Datenschutz und klicken Sie auf die Schaltfläche Trotzdem öffnen im Allgemeinen Tab, um zu bestätigen, dass Sie die Binärdatei öffnen möchten. Weitere Details finden Sie unter Apple Support.
Erhöhen des System-Maximalwertes für Dateideskriptoren
Nach der Änderung führen Sie source
auf der entsprechenden Datei aus, um die Änderungen anzuwenden.
# For bash: echo 'ulimit -n 65536' >>~/.bashrc
# For zsh: echo 'ulimit -n 65536' >>~/.zshrc
2. Kompilieren von Doris
Wechseln Sie in Ihr Doris-Verzeichnis und führen Sie das Build-Skript aus:
cd $DORIS_HOME
# Compile the entire Doris project:
sh build.sh
# Or compile only FE and BE:
sh build.sh --fe --be
Wenn Sie den Build-Prozess beschleunigen möchten und die FE-Frontend-Seite nicht benötigen, können Sie den Abschnitt für den FE-UI-Build im Skript build.sh auskommentieren:
# FE UI must be built before building FE
#if [[ "${BUILD_FE}" -eq 1 ]]; then
# if [[ "${BUILD_UI}" -eq 1 ]]; then
# build_ui
# fi
#fi
Nach erfolgreicher Kompilierung sollten Sie eine Ausgabe sehen, die ähnlich wie folgt aussieht:
3. Debugging
Konfigurieren der Debug-Umgebung
In diesem Leitfaden wird nur das Debuggen des Doris-FE behandelt.
# 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.
Beginnen Sie mit dem Debuggen über IntelliJ IDEA.
Wichtig: Öffnen Sie nicht das Stammverzeichnis des Doris-Projekts, sondern öffnen Sie das Verzeichnis FE, um Konflikte mit CLion zu vermeiden.
Generieren von FE-Code
Öffnen Sie das IDEA-Terminal, navigieren Sie zum Stammverzeichnis des Codes und führen Sie aus:
sh generated-source.sh
Warten Sie, bis Sie die Meldung „Fertig“ sehen.
Konfigurieren des Debuggens für FE
1. Konfigurationen bearbeiten.
2. Fügen Sie eine DorisFE-Konfiguration hinzu. Klicken Sie auf das Symbol + oben links, um eine Anwendungskonfiguration hinzuzufügen. Beachten Sie das Bild unten für die spezifischen Einstellungen.
3. Arbeitsverzeichnis. Legen Sie es auf das Verzeichnis fe
innerhalb des Quellcodes fest.
4. Umgebungsvariablen. Konfigurieren Sie die Umgebungsvariablen ähnlich wie die, die in fe/bin/start_fe.sh
im Stammverzeichnis von Doris exportiert wurden. Die Variable DORIS_HOME
sollte auf das Verzeichnis zeigen, das Sie während des Setups zuvor kopiert haben.
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 starten
Klicken Sie auf Ausführen oder Debuggen. Dies löst den Build-Prozess für FE aus; sobald dieser abgeschlossen ist, wird FE gestartet. In diesem Leitfaden wählen wir Debuggen.
BE starten
Da Sie das kompilierte Paket bereits in das Verzeichnis doris-run
kopiert haben, starten Sie das BE von innerhalb dieses Verzeichnisses:
sh bin/start_be.sh --daemon
Fehlerbehebung FE
1. Verbindung zum FE herstellen. Verwenden Sie einen MySQL-Client oder DBeaver, um eine Verbindung zum vom IDEA gestarteten FE herzustellen.
mysql -uroot -h127.0.0.1 -P9030
2. Fügen Sie den BE-Node dem Cluster hinzu.
alter system add backend "127.0.0.1:9050";
3. Setzen Sie Breakpoints im Code. Suchen Sie den ConnectProcessor-Code im Projekt:
Setzen Sie einen Breakpoint in der Methode handleQuery. Wenn Sie eine Abfrage ausführen, wird der Debugger den Breakpoint erreichen, und Sie können eine angenehme Debugging-Reise beginnen. Wenn Sie beispielsweise an der in vorherigen Sitzungen erwähnten Doris-Syntaxmigration arbeiten, können Sie das Debugging verwenden, um Ihren Code iterativ zu verbessern.
FAQs
Frage 1
Während der Kompilierung kann ein Sperrkonfliktfehler auftreten:
Could not acquire lock(s)
Antwort
Löschen Sie alle .lock
-Dateien in Ihrem lokalen Maven-Repository, indem Sie Folgendes ausführen:
find ~/.m2/repository -name "*.lock" -delete
Frage 2
Während der Kompilierung kann ein Fehler durch eine neuere Version von Node.js verursacht werden:
opensslErrorStack: ['error:03000086:digital envelope routines::initialization error'] library: 'digital envelope routines' reason: 'unsupported' code: 'ERR_OSSL_EVP_UNSUPPORTED'
Antwort
Legen Sie Node.js fest, um den Legacy-OpenSSL-Anbieter zu verwenden, indem Sie Folgendes ausführen:
# Instruct Node.js to use the legacy OpenSSL provider export NODE_OPTIONS=--openssl-legacy-provider
Referenz: StackOverflow-Diskussion
Frage 3
IntelliJ IDEA startet FE nicht mit dem Fehler:
java: OutOfMemoryError: insufficient memory
Antwort
Der Compiler von Maven verfügt möglicherweise nicht über ausreichend Speicher. Erhöhen Sie die Speicherzuweisung wie unten gezeigt:
Frage 5
IntelliJ IDEA startet FE nicht mit dem Fehler:
java: cannot find symbol Symbol: class GeneratedMemoPatterns Location: package org.apache.doris.nereids.pattern
Antwort
Beheben Sie dieses Problem, indem Sie die folgenden Befehle im Doris-Stammverzeichnis ausführen:
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/
Frage 5
In einigen Versionen kann die Kompilierung mit dem Fehler fehlschlagen:
error: reference to ‘detail’ is ambiguous
Antwort
Ändern Sie den Code gemäß diesem PR oder führen Sie die folgenden Befehle aus:
wget https://github.com/apache/doris/pull/43868.patch
git apply 43868.patch
Frage 6
In einigen Versionen scheitert beim Debuggen das FE auf Port 9030 zu starten, und fe.log
meldet:
Can not find help zip file: help-resource.zip
Antwort
Wechseln Sie zum doris/docs
Verzeichnis, führen Sie die folgenden Befehle aus und starten Sie dann das FE neu:
cd doris/docs sh build_help_zip.sh
cp -r build/help-resource.zip ../fe/fe-core/target/classes
Indem Sie dieser Anleitung folgen, sollten Sie in der Lage sein, Ihre Umgebung einzurichten, Apache Doris einfacher zu kompilieren und zu debuggen. Viel Erfolg beim Debuggen!
Source:
https://dzone.com/articles/guide-to-building-and-debugging-apache-doris