Apache Doris, een high-performance, real-time analytische database, pronkt met een indrukwekkende onderliggende architectuur en code ontwerp. Voor ontwikkelaars is het beheersen van de compilatie van de broncode en debugging essentieel om de kern van Doris te begrijpen. Het bouwproces omvat echter meerdere toolchains en afhankelijkheidsconfiguraties, en tijdens het debuggen kunt u verschillende complexe problemen tegenkomen die beginners overweldigd kunnen laten voelen.
Dit artikel begeleidt u door het proces van broncode tot runtime, en biedt een gedetailleerde analyse van de compilatie- en debuggingprocedures van Apache Doris. Van het opzetten van de omgeving en het uitchecken van de code tot het oplossen van veelvoorkomende problemen, combineren we praktische voorbeelden om u snel op weg te helpen met Doris ontwikkeling en debugging.
Overzicht
Heb je je ooit afgevraagd hoe een SQL-query van begin tot eind geparseerd en uitgevoerd wordt? In Apache Doris omvat dit proces meerdere kernonderdelen en complexe interne mechanismen. Dit artikel zal u begeleiden door de reis van broncode tot runtime, met een uitgebreide analyse van het bouw- en debugproces van Doris, en u helpen een diep begrip van SQL-uitvoeringsprincipes te krijgen.
1. Omgeving
Basisomgeving
- Computerspecificaties. MacBook Pro (Chip: Apple M1, macOS: 15.1)
- JDK. Versie 17
- Doris tak. Gebruik de Doris Master tak (specifiek, de tak-2.1)
Het installeren van omgevingsafhankelijkheden
Wanneer je Homebrew gebruikt, is de geïnstalleerde JDK-versie 17 omdat de arm64-versie van Homebrew op macOS JDK 8 niet standaard bevat. Momenteel ondersteunt Doris alleen JDK8 en 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
Uitleg van afhankelijkheden
1. Java, Maven, etc. Deze kunnen apart worden gedownload voor eenvoudiger beheer.
- Op macOS wordt Zulu JDK17 aanbevolen.
- Maven kan worden gedownload van de officiële Maven-website.
- Handmatig gedownloade Java en Maven moeten geconfigureerd worden in je omgevingsvariabelen.
2. Omgevingsvariabelen van andere afhankelijkheden (voorbeeld voor 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
Voeg de bovenstaande configuraties toe aan je ~/.bashrc
of ~/.zshrc
bestand en voer source ~/.bashrc
of source ~/.zshrc
uit om de wijzigingen toe te passen.
Het installeren van Thrift
Let op: Thrift moet alleen worden geïnstalleerd wanneer je alleen de FE (Frontend) debugt. Bij het debuggen van zowel BE (Backend) als FE zijn de BE third-party libraries al inclusief 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`
Het ophalen van je code
Kloon je code door de volgende commando’s uit te voeren:
cd ~
mkdir DorisDev
cd DorisDev
git clone <https://github.com/GitHubID/doris.git>
Omgevingsvariabelen Instellen
export DORIS_HOME=~/DorisDev/doris
export PATH=$DORIS_HOME/bin:$PATH
Afhankelijkheden voor de Doris Build Downloaden
1. Bezoek de Apache Doris Derde Partij Voorafgebouwd pagina (link) om de broncode voor alle derde partij bibliotheken te vinden. Je kunt doris-thirdparty-source.tgz
rechtstreeks downloaden.
2. Als alternatief kun je de vooraf gecompileerde derde partij bibliotheken van dezelfde pagina downloaden, wat je bespaart van het zelf compileren van deze bibliotheken. Raadpleeg de onderstaande commando’s.
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
Bij het uitvoeren van protoc
en thrift
kun je problemen tegenkomen bij het openen ervan vanwege ontwikkelaarsverificatieproblemen. In dat geval ga je naar Beveiliging & Privacy en klik je op de knop Open Toch in het tabblad Algemeen om te bevestigen dat je de binaire wilt openen. Voor meer details, zie Apple Support.
Systeem Maximum Bestandsdescriptor Limiet Verhogen
Na het aanpassen, voer source
uit op het overeenkomstige bestand om de wijzigingen toe te passen.
# For bash: echo 'ulimit -n 65536' >>~/.bashrc
# For zsh: echo 'ulimit -n 65536' >>~/.zshrc
2. Doris Compileren
Navigeer naar je Doris thuismap en voer het buildscript uit:
cd $DORIS_HOME
# Compile the entire Doris project:
sh build.sh
# Or compile only FE and BE:
sh build.sh --fe --be
Als je het buildproces wilt versnellen en je hebt de FE frontendpagina niet nodig, kun je de FE UI buildsectie in het build.sh script uitcommentariëren:
# FE UI must be built before building FE
#if [[ "${BUILD_FE}" -eq 1 ]]; then
# if [[ "${BUILD_UI}" -eq 1 ]]; then
# build_ui
# fi
#fi
Na een succesvolle compilatie zou je een uitvoer moeten zien die vergelijkbaar is met het volgende:
3. Debuggen
Configureren van de Debugomgeving
Deze handleiding behandelt alleen het debuggen van 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.
Start met debuggen in IntelliJ IDEA.
Belangrijk: Open de hoofdmap van het Doris-project niet; open in plaats daarvan de FE map om conflicten met CLion te voorkomen.
Genereren van FE Code
Open de IDEA-terminal, navigeer naar de hoofdmap van de code en voer uit:
sh generated-source.sh
Wacht tot je de boodschap “Klaar” ziet verschijnen.
Configureren van Debug voor FE
1. Wijzig configuraties.
2. Voeg een DorisFE-configuratie toe. Klik op het pictogram + linksboven om een toepassingsconfiguratie toe te voegen. Raadpleeg de afbeelding hieronder voor de specifieke instellingen.
3. Werkmap. Stel deze in op de fe
map binnen de broncode.
4. Omgevingsvariabelen. Configureer de omgevingsvariabelen op een vergelijkbare manier als die geëxporteerd zijn in fe/bin/start_fe.sh
in de hoofdmap van Doris. De variabele DORIS_HOME
moet verwijzen naar de map die je eerder tijdens de installatie hebt gekopieerd.
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
Starten van FE
Klik op Run of Debug. Hiermee wordt het bouwproces voor FE gestart; zodra dit is voltooid, zal de FE starten. In deze handleiding kiezen we voor Debug.
Starten van BE
Aangezien je het gecompileerde pakket al hebt gekopieerd naar de doris-run
map, start de BE vanuit die map:
sh bin/start_be.sh --daemon
Debugging FE
1. Verbind met de FE. Gebruik een MySQL-client of DBeaver om verbinding te maken met de FE die door IDEA is gestart.
mysql -uroot -h127.0.0.1 -P9030
2. Voeg de BE-knoop toe aan de cluster.
alter system add backend "127.0.0.1:9050";
3. Zet breekpunten in de code. Zoek de ConnectProcessor code in het project:
Zet een breekpunt bij de handleQuery methode. Wanneer je een query uitvoert, zal de debugger het breekpunt raken, en kun je beginnen aan een plezierige debuggingreis. Als je bijvoorbeeld werkt aan de Doris-syntaxis migratietaak die in eerdere sessies is genoemd, kun je debugging gebruiken om je code iteratief te verfijnen.
FAQs
Vraag 1
Tijdens de compilatie kun je een vergrendelingsconflict fout tegenkomen:
Could not acquire lock(s)
Antwoord
Verwijder alle .lock
bestanden in je lokale Maven-repository door het volgende uit te voeren:
find ~/.m2/repository -name "*.lock" -delete
Vraag 2
Tijdens de compilatie kan een fout optreden door een nieuwere versie van Node.js:
opensslErrorStack: ['error:03000086:digital envelope routines::initialization error'] library: 'digital envelope routines' reason: 'unsupported' code: 'ERR_OSSL_EVP_UNSUPPORTED'
Antwoord
Stel Node.js in om de legacy OpenSSL-provider te gebruiken door het volgende uit te voeren:
# Instruct Node.js to use the legacy OpenSSL provider export NODE_OPTIONS=--openssl-legacy-provider
Referentie: StackOverflow Discussie
Vraag 3
IntelliJ IDEA kan de FE niet starten met de fout:
java: OutOfMemoryError: insufficient memory
Antwoord
De compiler van Maven heeft mogelijk niet genoeg geheugen. Verhoog de geheugentoewijzing zoals hieronder weergegeven:
Vraag 5
IntelliJ IDEA kan FE niet starten met de fout:
java: cannot find symbol Symbol: class GeneratedMemoPatterns Location: package org.apache.doris.nereids.pattern
Antwoord
Los dit probleem op door de volgende commando’s uit te voeren in de rootdirectory van 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/
Vraag 5
In sommige versies kan de compilatie mislukken met de fout:
error: reference to ‘detail’ is ambiguous
Antwoord
Wijzig de code volgens deze PR of voer de volgende commando’s uit:
wget https://github.com/apache/doris/pull/43868.patch
git apply 43868.patch
Vraag 6
In sommige versies mislukt het debuggen, en kan FE op poort 9030 niet starten, en fe.log
meldt:
Can not find help zip file: help-resource.zip
Antwoord
Navigeer naar de doris/docs
directory, voer de volgende commando’s uit en herstart dan FE:
cd doris/docs sh build_help_zip.sh
cp -r build/help-resource.zip ../fe/fe-core/target/classes
Door deze gids te volgen, zou je in staat moeten zijn om je omgeving op te zetten, te compileren en Apache Doris eenvoudiger te debuggen. Veel succes met debuggen!
Source:
https://dzone.com/articles/guide-to-building-and-debugging-apache-doris