Apache Doris, un database analitico ad alte prestazioni in tempo reale, vanta un’impressionante architettura sottostante e design del codice. Per gli sviluppatori, padroneggiare la compilazione del codice sorgente e il debug è fondamentale per comprendere il core di Doris. Tuttavia, il processo di build coinvolge molteplici catene di strumenti e configurazioni delle dipendenze e durante il debug, potresti incontrare varie problematiche complesse che possono lasciare i principianti sopraffatti.
Questo articolo ti guida attraverso il processo dal codice sorgente all’esecuzione, fornendo un’analisi dettagliata delle procedure di compilazione e debugging di Apache Doris. Dall’ambientazione dell’ambiente e il checkout del codice alla risoluzione dei problemi comuni, combiniamo esempi pratici per aiutarti a iniziare rapidamente lo sviluppo e il debugging di Doris.
Panoramica
Ti sei mai chiesto come viene analizzata ed eseguita una query SQL dall’inizio alla fine? In Apache Doris, questo processo coinvolge molteplici componenti core e complessi meccanismi interni. Questo articolo ti guiderà nel percorso dal codice sorgente all’esecuzione, offrendo un’analisi esaustiva del processo di build e debugging di Doris, e aiutandoti a ottenere una profonda comprensione dei principi di esecuzione SQL.
1. Ambiente
Ambiente Base
- Configurazione del computer. MacBook Pro (Chip: Apple M1, macOS: 15.1)
- JDK. Versione 17
- Ramificazione di Doris. Utilizza il ramo Doris Master (specificamente, il ramo-2.1)
Installazione delle dipendenze dell’ambiente
Quando si utilizza Homebrew, la versione di JDK installata è la 17 perché nella versione arm64 di Homebrew su macOS non è incluso di default JDK 8. Attualmente, Doris supporta solo JDK8 e 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
Spiegazione delle Dipendenze
1. Java, Maven, ecc. Questi possono essere scaricati separatamente per una gestione più semplice.
- Su macOS, è consigliato utilizzare Zulu JDK17.
- Maven può essere scaricato dal sito web ufficiale di Maven.
- Java e Maven scaricati manualmente devono essere configurati nelle variabili d’ambiente.
2. Altre variabili d’ambiente delle dipendenze (esempio per Mac con 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
Aggiungi le configurazioni sopra al tuo file ~/.bashrc
o ~/.zshrc
e esegui source ~/.bashrc
o source ~/.zshrc
per applicare le modifiche.
Installazione di Thrift
Nota: Thrift deve essere installato solo quando si sta eseguendo il debug solo del FE (Frontend). Quando si esegue il debug sia del BE (Backend) che del FE, le librerie di terze parti del BE includono già 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`
Recupero del Tuo Codice
Clona il tuo codice eseguendo i seguenti comandi:
cd ~
mkdir DorisDev
cd DorisDev
git clone <https://github.com/GitHubID/doris.git>
Impostazione delle variabili d’ambiente
export DORIS_HOME=~/DorisDev/doris
export PATH=$DORIS_HOME/bin:$PATH
Download delle dipendenze di compilazione di Doris
1. Visita la pagina Apache Doris Third Party Prebuilt (link) per trovare il codice sorgente di tutte le librerie di terze parti. Puoi scaricare direttamente doris-thirdparty-source.tgz
.
2. In alternativa, puoi scaricare le librerie di terze parti precompilate dalla stessa pagina, il che ti evita di compilare queste librerie da solo. Fai riferimento ai comandi seguenti.
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
Quando esegui protoc
e thrift
, potresti incontrare problemi nell’aprirli a causa di problemi di verifica dello sviluppatore. In tal caso, vai su Sicurezza e Privacy e clicca sul pulsante Apri comunque nella scheda Generale per confermare che desideri aprire il binario. Per ulteriori dettagli, consulta il Servizio di supporto Apple.
Aumenta il limite massimo dei descrittori di file di sistema
Dopo la modifica, esegui source
sul file corrispondente per applicare le modifiche.
# For bash: echo 'ulimit -n 65536' >>~/.bashrc
# For zsh: echo 'ulimit -n 65536' >>~/.zshrc
2. Compilazione di Doris
Vai alla directory home di Doris ed esegui lo script di compilazione:
cd $DORIS_HOME
# Compile the entire Doris project:
sh build.sh
# Or compile only FE and BE:
sh build.sh --fe --be
Se desideri accelerare il processo di compilazione e non hai bisogno della pagina frontend FE, puoi commentare la sezione di compilazione FE UI nello 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
Dopo una compilazione riuscita, dovresti vedere un output simile al seguente:
3. Debugging
Configurazione dell’Ambiente di Debug
Questa guida tratta il debug solo del 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.
Inizia il debug utilizzando IntelliJ IDEA.
Importante: Non aprire la directory principale del progetto Doris; invece, apri la directory FE per evitare conflitti con CLion.
Generazione del Codice FE
Apri il terminale IDEA, naviga fino alla directory principale del codice e esegui:
sh generated-source.sh
Attendi fino a quando compare il messaggio “Fatto”.
Configurazione Debug per FE
1. Modifica configurazioni.
2. Aggiungi una configurazione DorisFE. Clicca sull’icona + nell’angolo in alto a sinistra per aggiungere una configurazione Applicazione. Fai riferimento all’immagine sottostante per le impostazioni specifiche.
3. Directory di lavoro. Impostala sulla directory fe
all’interno del codice sorgente.
4. Variabili d’ambiente. Configura le variabili d’ambiente in modo simile a quelle esportate in fe/bin/start_fe.sh
nella directory principale di Doris. La variabile DORIS_HOME
dovrebbe puntare alla directory che hai copiato in precedenza durante la configurazione.
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
Avvio di FE
Clicca su Esegui o Debug. Questo attiverà il processo di compilazione per FE; una volta completato, FE partirà. In questa guida, scegliamo Debug.
Avvio di BE
Dato che hai già copiato il pacchetto compilato nella directory doris-run
, avvia il BE da quella directory:
sh bin/start_be.sh --daemon
Debugging FE
1. Connettersi al FE. Usare un client MySQL o DBeaver per connettersi al FE avviato da IDEA.
mysql -uroot -h127.0.0.1 -P9030
2. Aggiungere il nodo BE al cluster.
alter system add backend "127.0.0.1:9050";
3. Impostare i punti di interruzione nel codice. Trovare il codice ConnectProcessor nel progetto:
Impostare un punto di interruzione nel metodo handleQuery. Quando si esegue una query, il debugger si fermerà al punto di interruzione e si potrà iniziare un piacevole viaggio di debug. Ad esempio, se si sta lavorando sul compito di migrazione della sintassi di Doris menzionato nelle sessioni precedenti, è possibile utilizzare il debug per perfezionare iterativamente il proprio codice.
Domande frequenti
Domanda 1
Durante la compilazione, potrebbe verificarsi un errore di conflitto di blocco:
Could not acquire lock(s)
Risposta
Eliminare eventuali file .lock
nel repository Maven locale eseguendo:
find ~/.m2/repository -name "*.lock" -delete
Domanda 2
Durante la compilazione, potrebbe verificarsi un errore causato da una versione più recente di Node.js:
opensslErrorStack: ['error:03000086:digital envelope routines::initialization error'] library: 'digital envelope routines' reason: 'unsupported' code: 'ERR_OSSL_EVP_UNSUPPORTED'
Risposta
Impostare Node.js per utilizzare il provider legacy di OpenSSL eseguendo:
# Instruct Node.js to use the legacy OpenSSL provider export NODE_OPTIONS=--openssl-legacy-provider
Riferimento: Discussione su StackOverflow
Domanda 3
IntelliJ IDEA non riesce ad avviare il FE con l’errore:
java: OutOfMemoryError: insufficient memory
Risposta
Il compilatore di Maven potrebbe non avere abbastanza memoria. Aumentare l’allocazione di memoria come mostrato di seguito:
Domanda 5
IntelliJ IDEA non riesce a avviare FE con l’errore:
java: cannot find symbol Symbol: class GeneratedMemoPatterns Location: package org.apache.doris.nereids.pattern
Risposta
Risolvere questo problema eseguendo i seguenti comandi nella directory radice di 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/
Domanda 5
In alcune versioni, la compilazione potrebbe fallire con l’errore:
error: reference to ‘detail’ is ambiguous
Risposta
Modificare il codice secondo questo PR o eseguire i seguenti comandi:
wget https://github.com/apache/doris/pull/43868.patch
git apply 43868.patch
Domanda 6
In alcune versioni durante il debug, la FE sulla porta 9030 non riesce a partire e fe.log
riporta:
Can not find help zip file: help-resource.zip
Risposta
Passare alla directory doris/docs
, eseguire i seguenti comandi e quindi riavviare FE:
cd doris/docs sh build_help_zip.sh
cp -r build/help-resource.zip ../fe/fe-core/target/classes
Seguendo questa guida, dovresti essere in grado di configurare il tuo ambiente, compilare e fare il debug di Apache Doris con maggiore facilità. Buon debugging!
Source:
https://dzone.com/articles/guide-to-building-and-debugging-apache-doris