O Apache Doris, um banco de dados analítico em tempo real de alto desempenho, possui uma impressionante arquitetura subjacente e design de código. Para os desenvolvedores, dominar a compilação do código-fonte e a depuração é fundamental para entender o núcleo do Doris. No entanto, o processo de construção envolve várias cadeias de ferramentas e configurações de dependências, e durante a depuração, você pode encontrar várias questões complexas que podem deixar os iniciantes se sentindo sobrecarregados.
Este artigo o guiará pelo processo, desde o código-fonte até a execução, fornecendo uma análise detalhada dos procedimentos de compilação e depuração do Apache Doris. Desde a configuração do ambiente e a verificação do código até a solução de problemas de problemas comuns, combinamos exemplos práticos para ajudá-lo a começar rapidamente com o desenvolvimento e depuração do Doris.
Visão geral
Você já se perguntou como uma consulta SQL é analisada e executada do início ao fim? No Apache Doris, esse processo envolve vários componentes principais e mecanismos internos complexos. Este artigo o guiará pela jornada do código-fonte até a execução, oferecendo uma análise abrangente do processo de compilação e depuração do Doris, e ajudando você a obter uma compreensão profunda dos princípios de execução do SQL.
1. Ambiente
Ambiente Básico
- Configuração do computador. MacBook Pro (Chip: Apple M1, macOS: 15.1)
- JDK. Versão 17
- Ramo do Doris. Use o ramo Doris Master (especificamente, o ramo-2.1)
Instalando Dependências de Ambiente
Ao utilizar Homebrew, a versão do JDK instalada é a 17 porque na macOS a versão arm64 do Homebrew não inclui o JDK 8 por padrão. Atualmente, o Doris suporta apenas o 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
Explicação de Dependências
1. Java, Maven, etc. Estes podem ser baixados separadamente para uma gestão mais fácil.
- No macOS, é recomendado o Zulu JDK17.
- O Maven pode ser baixado no site oficial do Maven.
- O Java e o Maven baixados manualmente devem ser configurados nas suas variáveis de ambiente.
2. Variáveis de ambiente de outras dependências (exemplo para Macs com 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
Adicione as configurações acima ao seu arquivo ~/.bashrc
ou ~/.zshrc
e execute source ~/.bashrc
ou source ~/.zshrc
para aplicar as mudanças.
Instalando Thrift
Nota: Thrift precisa ser instalado apenas quando estiver depurando apenas o FE (Frontend). Quando estiver depurando tanto o BE (Backend) quanto o FE, as bibliotecas de terceiros do BE já incluem o 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`
Buscando Seu Código
Clone seu código executando os seguintes comandos:
cd ~
mkdir DorisDev
cd DorisDev
git clone <https://github.com/GitHubID/doris.git>
Configurando Variáveis de Ambiente
export DORIS_HOME=~/DorisDev/doris
export PATH=$DORIS_HOME/bin:$PATH
Download das Dependências de Compilação do Doris
1. Acesse a página Apache Doris Third Party Prebuilt (link) para encontrar o código-fonte de todas as bibliotecas de terceiros. Você pode baixar diretamente o arquivo doris-thirdparty-source.tgz
.
2. Alternativamente, você pode baixar as bibliotecas de terceiros pré-compiladas na mesma página, o que evita que você precise compilar essas bibliotecas. Consulte os comandos abaixo.
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
Ao executar protoc
e thrift
, você pode encontrar problemas ao abri-los devido a questões de verificação do desenvolvedor. Nesse caso, acesse Segurança e Privacidade e clique no botão Abrir Mesmo Assim na guia Geral para confirmar que deseja abrir o binário. Para mais detalhes, consulte o Suporte da Apple.
Aumentar o Limite Máximo de Descritores de Arquivo do Sistema
Após a modificação, execute source
no arquivo correspondente para aplicar as alterações.
# For bash: echo 'ulimit -n 65536' >>~/.bashrc
# For zsh: echo 'ulimit -n 65536' >>~/.zshrc
2. Compilando o Doris
Acesse o diretório principal do Doris e execute o script de compilação:
cd $DORIS_HOME
# Compile the entire Doris project:
sh build.sh
# Or compile only FE and BE:
sh build.sh --fe --be
Se você deseja acelerar o processo de compilação e não precisa da página de frontend do FE, você pode comentar a seção de compilação do FE UI no 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
Após uma compilação bem-sucedida, você deve ver uma saída semelhante ao seguinte:
3. Depuração
Configurando o Ambiente de Depuração
Este guia abrange a depuração apenas do 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.
Comece a depuração usando o IntelliJ IDEA.
Importante: Não abra o diretório raiz do projeto Doris; em vez disso, abra o diretório FE para evitar conflitos com o CLion.
Gerando Código FE
Abra o terminal do IDEA, navegue até o diretório raiz do código e execute:
sh generated-source.sh
Aguarde até ver a mensagem “Concluído”.
Configurando a Depuração para FE
1. Editar configurações.
2. Adicione uma configuração DorisFE. Clique no ícone + no canto superior esquerdo para adicionar uma configuração de Aplicativo. Consulte a imagem abaixo para as configurações específicas.
3. Diretório de trabalho. Defina-o como o diretório fe
dentro do código-fonte.
4. Variáveis de ambiente. Configure as variáveis de ambiente de forma semelhante às exportadas em fe/bin/start_fe.sh
no diretório raiz do Doris. A variável DORIS_HOME
deve apontar para o diretório que você copiou anteriormente durante a instalação.
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
Clique em Executar ou Depurar. Isso acionará o processo de compilação para FE; uma vez concluído, o FE iniciará. Neste guia, escolhemos Depurar.
Iniciando BE
Como você já copiou o pacote compilado para o diretório doris-run
, inicie o BE de dentro desse diretório:
sh bin/start_be.sh --daemon
Depuração FE
1. Conecte-se ao FE. Use um cliente MySQL ou DBeaver para se conectar ao FE lançado pelo IDEA.
mysql -uroot -h127.0.0.1 -P9030
2. Adicione o nó BE ao cluster.
alter system add backend "127.0.0.1:9050";
3. Defina pontos de interrupção no código. Localize o código ConnectProcessor no projeto:
Defina um ponto de interrupção no método handleQuery. Quando você executar uma consulta, o depurador atingirá o ponto de interrupção e você poderá iniciar uma jornada de depuração agradável. Por exemplo, se estiver trabalhando na tarefa de migração de sintaxe do Doris mencionada nas sessões anteriores, você pode usar a depuração para refinar iterativamente seu código.
FAQs
Pergunta 1
Ao compilar, você pode encontrar um erro de conflito de bloqueio:
Could not acquire lock(s)
Resposta
Exclua quaisquer arquivos .lock
em seu repositório local do Maven executando:
find ~/.m2/repository -name "*.lock" -delete
Pergunta 2
Ao compilar, um erro causado por uma versão mais recente do Node.js pode ocorrer:
opensslErrorStack: ['error:03000086:digital envelope routines::initialization error'] library: 'digital envelope routines' reason: 'unsupported' code: 'ERR_OSSL_EVP_UNSUPPORTED'
Resposta
Defina o Node.js para usar o provedor de OpenSSL legado executando:
# Instruct Node.js to use the legacy OpenSSL provider export NODE_OPTIONS=--openssl-legacy-provider
Referência: Discussão no StackOverflow
Pergunta 3
O IntelliJ IDEA falha ao iniciar o FE com o erro:
java: OutOfMemoryError: insufficient memory
Resposta
O compilador do Maven pode não ter memória suficiente. Aumente a alocação de memória conforme mostrado abaixo:
Questão 5
O IntelliJ IDEA falha ao iniciar o FE com o erro:
java: cannot find symbol Symbol: class GeneratedMemoPatterns Location: package org.apache.doris.nereids.pattern
Resposta
Resolva esse problema executando os seguintes comandos no diretório raiz do 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/
Questão 5
Em algumas versões, a compilação pode falhar com o erro:
error: reference to ‘detail’ is ambiguous
Resposta
Modifique o código de acordo com este PR ou execute os seguintes comandos:
wget https://github.com/apache/doris/pull/43868.patch
git apply 43868.patch
Questão 6
Em algumas versões, durante a depuração, o FE na porta 9030 falha ao iniciar, e o fe.log
relata:
Can not find help zip file: help-resource.zip
Resposta
Vá para o diretório doris/docs
, execute os seguintes comandos e então reinicie o FE:
cd doris/docs sh build_help_zip.sh
cp -r build/help-resource.zip ../fe/fe-core/target/classes
Ao seguir este guia, você deve ser capaz de configurar seu ambiente, compilar e depurar o Apache Doris com mais facilidade. Feliz depuração!
Source:
https://dzone.com/articles/guide-to-building-and-debugging-apache-doris