Apache Doris, una base de datos analítica en tiempo real de alto rendimiento, presume de una impresionante arquitectura subyacente y diseño de código. Para los desarrolladores, dominar la compilación de código fuente y la depuración es clave para entender el núcleo de Doris. Sin embargo, el proceso de compilación implica múltiples cadenas de herramientas y configuraciones de dependencias, y durante la depuración, es posible que encuentres diversos problemas complejos que pueden hacer que los principiantes se sientan abrumados.
Este artículo te guiará a través del proceso desde el código fuente hasta el tiempo de ejecución, proporcionando un análisis detallado de los procedimientos de compilación y depuración de Apache Doris. Desde la configuración del entorno y la verificación del código hasta la solución de problemas comunes, combinamos ejemplos prácticos para ayudarte a comenzar rápidamente con el desarrollo y la depuración de Doris.
Visión general
¿Alguna vez te has preguntado cómo se analiza y se ejecuta una consulta SQL de principio a fin? En Apache Doris, este proceso implica múltiples componentes principales y complejos mecanismos internos. Este artículo te guiará a través del viaje desde el código fuente hasta el tiempo de ejecución, ofreciendo un análisis exhaustivo del proceso de compilación y depuración de Doris, y ayudándote a obtener una comprensión profunda de los principios de ejecución de SQL.
1. Entorno
Entorno Básico
- Configuración de la computadora. MacBook Pro (Chip: Apple M1, macOS: 15.1)
- JDK. Versión 17
- Rama de Doris. Utiliza la rama Doris Master (específicamente, la rama-2.1)
Instalación de Dependencias del Entorno
Cuando se utiliza Homebrew, la versión de JDK instalada es la 17 porque en macOS la versión arm64 de Homebrew no incluye JDK 8 de forma predeterminada. Actualmente, Doris solo admite JDK8 y 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
Explicación de Dependencias
1. Java, Maven, etc. Estos se pueden descargar por separado para una gestión más sencilla.
- En macOS, se recomienda Zulu JDK17.
- Maven se puede descargar desde el sitio web oficial de Maven.
- Java y Maven descargados manualmente deben configurarse en las variables de entorno.
2. Variables de entorno de otras dependencias (ejemplo para 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
Agrega las configuraciones anteriores a tu archivo ~/.bashrc
o ~/.zshrc
y ejecuta source ~/.bashrc
o source ~/.zshrc
para aplicar los cambios.
Instalación de Thrift
Nota: Thrift solo necesita ser instalado cuando estás depurando solo el FE (Frontend). Cuando depuras tanto el BE (Backend) como el FE, las bibliotecas de terceros del BE ya incluyen 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`
Obteniendo tu Código
Clona tu código ejecutando los siguientes comandos:
cd ~
mkdir DorisDev
cd DorisDev
git clone <https://github.com/GitHubID/doris.git>
Configuración de Variables de Entorno
export DORIS_HOME=~/DorisDev/doris
export PATH=$DORIS_HOME/bin:$PATH
Descarga de Dependencias de Compilación de Doris
1. Visita la página de Apache Doris Third Party Prebuilt (enlace) para encontrar el código fuente de todas las bibliotecas de terceros. Puedes descargar directamente doris-thirdparty-source.tgz
.
2. Alternativamente, puedes descargar las bibliotecas de terceros precompiladas desde la misma página, lo que te ahorra tener que compilar estas bibliotecas tú mismo. Consulta los comandos a continuación.
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
Cuando ejecutes protoc
y thrift
, es posible que encuentres problemas al abrirlos debido a problemas de verificación de desarrollador. En ese caso, ve a Seguridad y Privacidad y haz clic en el botón Abrir de todos modos en la pestaña General para confirmar que deseas abrir el binario. Para más detalles, consulta el Soporte de Apple.
Aumenta el Límite Máximo de Descriptores de Archivos del Sistema
Después de modificarlo, ejecuta source
en el archivo correspondiente para aplicar los cambios.
# For bash: echo 'ulimit -n 65536' >>~/.bashrc
# For zsh: echo 'ulimit -n 65536' >>~/.zshrc
2. Compilación de Doris
Ve a tu directorio principal de Doris y ejecuta el script de compilación:
cd $DORIS_HOME
# Compile the entire Doris project:
sh build.sh
# Or compile only FE and BE:
sh build.sh --fe --be
Si deseas acelerar el proceso de compilación y no necesitas la página frontend de FE, puedes comentar la sección de compilación de la interfaz de usuario FE en el 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
Después de una compilación exitosa, deberías ver una salida similar a la siguiente:
3. Depuración
Configuración del entorno de depuración
Esta guía cubre la depuración solo de 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.
Comience la depuración usando IntelliJ IDEA.
Importante: No abra el directorio raíz del proyecto Doris; en su lugar, abra el directorio FE para evitar conflictos con CLion.
Generación de Código FE
Abra la terminal de IDEA, navegue hasta el directorio raíz del código y ejecute:
sh generated-source.sh
Espere hasta ver el mensaje “Hecho”.
Configuración de la Depuración para FE
1. Editar configuraciones.
2. Agregar una configuración DorisFE. Haga clic en el icono + en la parte superior izquierda para agregar una configuración de Aplicación. Consulte la imagen a continuación para ver la configuración específica.
3. Directorio de trabajo. Establézcalo en el directorio fe
dentro del código fuente.
4. Variables de entorno. Configure las variables de entorno de manera similar a las exportadas en fe/bin/start_fe.sh
en el directorio raíz de Doris. La variable DORIS_HOME
debe apuntar al directorio que copió anteriormente durante la configuración.
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
Iniciando FE
Haga clic en Ejecutar o Depurar. Esto desencadenará el proceso de compilación para FE; una vez completado, FE se iniciará. En esta guía, elegimos Depurar.
Iniciando BE
Dado que ya ha copiado el paquete compilado al directorio doris-run
, inicie el BE desde ese directorio:
sh bin/start_be.sh --daemon
Depuración FE
1. Conéctese al FE. Utilice un cliente MySQL o DBeaver para conectarse al FE lanzado por IDEA.
mysql -uroot -h127.0.0.1 -P9030
2. Agregue el nodo BE al clúster.
alter system add backend "127.0.0.1:9050";
3. Establezca puntos de interrupción en el código. Localice el código ConnectProcessor en el proyecto:
Establezca un punto de interrupción en el método handleQuery. Cuando ejecute una consulta, el depurador alcanzará el punto de interrupción, y podrá comenzar un viaje de depuración agradable. Por ejemplo, si está trabajando en la tarea de migración de sintaxis de Doris mencionada en sesiones anteriores, puede utilizar la depuración para refinar iterativamente su código.
FAQs
Pregunta 1
Durante la compilación, es posible que se encuentre con un error de conflicto de bloqueo:
Could not acquire lock(s)
Respuesta
Elimine cualquier archivo .lock
en su repositorio local de Maven ejecutando:
find ~/.m2/repository -name "*.lock" -delete
Pregunta 2
Durante la compilación, puede ocurrir un error causado por una versión más nueva de Node.js:
opensslErrorStack: ['error:03000086:digital envelope routines::initialization error'] library: 'digital envelope routines' reason: 'unsupported' code: 'ERR_OSSL_EVP_UNSUPPORTED'
Respuesta
Establezca Node.js para usar el proveedor de OpenSSL heredado ejecutando:
# Instruct Node.js to use the legacy OpenSSL provider export NODE_OPTIONS=--openssl-legacy-provider
Referencia: Discusión en StackOverflow
Pregunta 3
IntelliJ IDEA no logra iniciar el FE con el error:
java: OutOfMemoryError: insufficient memory
Respuesta
Es posible que el compilador de Maven no tenga suficiente memoria. Aumente la asignación de memoria como se muestra a continuación:
Pregunta 5
IntelliJ IDEA no logra iniciar FE con el error:
java: cannot find symbol Symbol: class GeneratedMemoPatterns Location: package org.apache.doris.nereids.pattern
Respuesta
Resuelve este problema ejecutando los siguientes comandos en el directorio raíz 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/
Pregunta 5
En algunas versiones, la compilación puede fallar con el error:
error: reference to ‘detail’ is ambiguous
Respuesta
Modifica el código de acuerdo a este PR o ejecuta los siguientes comandos:
wget https://github.com/apache/doris/pull/43868.patch
git apply 43868.patch
Pregunta 6
En algunas versiones durante la depuración, la FE en el puerto 9030 no logra iniciarse, y fe.log
reporta:
Can not find help zip file: help-resource.zip
Respuesta
Navega al directorio doris/docs
, ejecuta los siguientes comandos y luego reinicia FE:
cd doris/docs sh build_help_zip.sh
cp -r build/help-resource.zip ../fe/fe-core/target/classes
¡Siguiendo esta guía, deberías poder configurar tu entorno, compilar y depurar Apache Doris con mayor facilidad. ¡Feliz depuración!
Source:
https://dzone.com/articles/guide-to-building-and-debugging-apache-doris