Apache Doris, высокопроизводительная база данных для реального времени аналитики, хвалится впечатляющей базовой архитектурой и дизайном кода. Для разработчиков владение компиляцией и отладкой исходного кода является ключом к пониманию основ Doris. Однако процесс сборки включает в себя несколько цепочек инструментов и настроек зависимостей, и во время отладки вы можете столкнуться с различными сложными проблемами, которые могут заставить начинающих почувствовать себя подавленными.
В этой статье мы проведем вас через процесс от исходного кода до выполнения, предоставляя подробный анализ процедур компиляции и отладки Apache Doris. От настройки окружения и проверки кода до устранения распространенных проблем, мы объединим практические примеры, чтобы помочь вам быстро начать работу с разработкой и отладкой Doris.
Обзор
Вы когда-нибудь задумывались, как SQL-запрос разбирается и выполняется от начала до конца? В Apache Doris этот процесс включает в себя несколько основных компонентов и сложных внутренних механизмов. Эта статья проведет вас через путешествие от исходного кода до выполнения, предлагая полный анализ процесса сборки и отладки Doris и помогая вам глубоко понять принципы выполнения SQL-запросов.
1. Окружение
Базовое окружение
- Конфигурация компьютера. MacBook Pro (Чип: Apple M1, macOS: 15.1)
- JDK. Версия 17
- Ветка Doris. Используйте ветку Doris Master (конкретно, ветку branch-2.1)
Установка зависимостей среды
При использовании Homebrew установленная версия JDK – 17, так как на macOS версия arm64 Homebrew по умолчанию не включает JDK 8. В настоящее время Doris поддерживает только JDK8 и 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
Объяснение зависимостей
1. Java, Maven и т. д.. Их можно скачать отдельно для более удобного управления.
- На macOS рекомендуется использовать Zulu JDK17.
- Maven можно скачать с официального сайта Maven.
- Скачанные вручную Java и Maven необходимо настроить в ваших переменных окружения.
2. Переменные окружения других зависимостей (пример для Mac с 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
Добавьте указанные выше конфигурации в ваш файл ~/.bashrc
или ~/.zshrc
и выполните source ~/.bashrc
или source ~/.zshrc
, чтобы применить изменения.
Установка Thrift
Примечание: Thrift необходимо устанавливать только при отладке только FE (фронтенда). При отладке как BE (бэкенда), так и FE, сторонние библиотеки BE уже включают 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`
Получение вашего кода
Клонируйте ваш код, выполнив следующие команды:
cd ~
mkdir DorisDev
cd DorisDev
git clone <https://github.com/GitHubID/doris.git>
Установка переменных окружения
export DORIS_HOME=~/DorisDev/doris
export PATH=$DORIS_HOME/bin:$PATH
Скачивание зависимостей сборки Doris
1. Перейдите на страницу Apache Doris Third Party Prebuilt (ссылка), чтобы найти исходный код всех сторонних библиотек. Вы можете напрямую скачать doris-thirdparty-source.tgz
.
2. В качестве альтернативы, вы можете скачать предварительно скомпилированные сторонние библиотеки с той же страницы, что избавит вас от необходимости компилировать эти библиотеки самостоятельно. Обратитесь к командам ниже.
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
При запуске protoc
и thrift
вы можете столкнуться с проблемами открытия их из-за проблем верификации разработчика. В этом случае перейдите в Безопасность и конфиденциальность и нажмите кнопку Открыть все равно на вкладке «Основные», чтобы подтвердить, что вы хотите открыть бинарный файл. Для получения дополнительной информации обратитесь к поддержке Apple.
Увеличение предела максимального количества открытых файлов в системе
После внесения изменений выполните source
на соответствующем файле, чтобы применить изменения.
# For bash: echo 'ulimit -n 65536' >>~/.bashrc
# For zsh: echo 'ulimit -n 65536' >>~/.zshrc
2. Компиляция Doris
Перейдите в ваш домашний каталог Doris и запустите скрипт сборки:
cd $DORIS_HOME
# Compile the entire Doris project:
sh build.sh
# Or compile only FE and BE:
sh build.sh --fe --be
Если вы хотите ускорить процесс сборки и вам не нужна страница интерфейса FE, вы можете закомментировать раздел сборки UI FE в скрипте 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
После успешной компиляции вы должны увидеть вывод, похожий на следующий:
3. Отладка
Настройка среды отладки
Это руководство охватывает только отладку 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.
Начните отладку с использованием IntelliJ IDEA.
Важно: Не открывайте корневой каталог проекта Doris; вместо этого откройте каталог FE, чтобы избежать конфликтов с CLion.
Генерация FE-кода
Откройте терминал IDEA, перейдите в корневой каталог кода и выполните:
sh generated-source.sh
Дождитесь сообщения “Done”.
Настройка отладки для FE
1. Измените конфигурации.
2. Добавьте конфигурацию DorisFE. Щелкните значок + в верхнем левом углу, чтобы добавить конфигурацию приложения. Обратитесь к изображению ниже для конкретных настроек.
3. Рабочий каталог. Установите его в каталог fe
внутри исходного кода.
4. Переменные среды. Настройте переменные среды аналогично тем, что экспортированы в fe/bin/start_fe.sh
в корневом каталоге Doris. Переменная DORIS_HOME
должна указывать на каталог, скопированный вами ранее во время настройки.
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
Щелкните Запуск или Отладка. Это запустит процесс сборки для FE; по завершении FE начнет работу. В этом руководстве мы выбираем Отладка.
Запуск BE
Поскольку вы уже скопировали скомпилированный пакет в каталог doris-run
, запустите BE из этого каталога:
sh bin/start_be.sh --daemon
Отладка FE
1. Подключитесь к FE. Используйте клиент MySQL или DBeaver для подключения к FE, запущенному с помощью IDEA.
mysql -uroot -h127.0.0.1 -P9030
2. Добавьте узел BE в кластер.
alter system add backend "127.0.0.1:9050";
3. Установите точки останова в коде. Найдите код ConnectProcessor в проекте:
Установите точку останова в методе handleQuery. При выполнении запроса отладчик остановится на точке останова, и вы сможете начать приятное путешествие по отладке. Например, если вы работаете над задачей миграции синтаксиса Doris, упомянутой в предыдущих сессиях, вы можете использовать отладку для итеративного улучшения своего кода.
ЧаВО
Вопрос 1
Во время компиляции вы можете столкнуться с ошибкой конфликта блокировки:
Could not acquire lock(s)
Ответ
Удалите любые файлы .lock
в локальном репозитории Maven, запустив:
find ~/.m2/repository -name "*.lock" -delete
Вопрос 2
Во время компиляции может возникнуть ошибка, вызванная новой версией Node.js:
opensslErrorStack: ['error:03000086:digital envelope routines::initialization error'] library: 'digital envelope routines' reason: 'unsupported' code: 'ERR_OSSL_EVP_UNSUPPORTED'
Ответ
Настройте Node.js на использование устаревшего поставщика OpenSSL, выполнив:
# Instruct Node.js to use the legacy OpenSSL provider export NODE_OPTIONS=--openssl-legacy-provider
Ссылка: Обсуждение на StackOverflow
Вопрос 3
IntelliJ IDEA не запускает FE с ошибкой:
java: OutOfMemoryError: insufficient memory
Ответ
Компилятор Maven может не иметь достаточно памяти. Увеличьте выделение памяти, как показано ниже:
Вопрос 5
IntelliJ IDEA не удается запустить FE с ошибкой:
java: cannot find symbol Symbol: class GeneratedMemoPatterns Location: package org.apache.doris.nereids.pattern
Ответ
Устраните эту проблему, выполнив следующие команды в корневом каталоге 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/
Вопрос 5
В некоторых версиях компиляция может завершиться неудачей с ошибкой:
error: reference to ‘detail’ is ambiguous
Ответ
Измените код в соответствии с этим PR или выполните следующие команды:
wget https://github.com/apache/doris/pull/43868.patch
git apply 43868.patch
Вопрос 6
В некоторых версиях во время отладки FE на порту 9030 не удается запуститься, и fe.log
сообщает:
Can not find help zip file: help-resource.zip
Ответ
Перейдите в каталог doris/docs
, выполните следующие команды, а затем перезапустите FE:
cd doris/docs sh build_help_zip.sh
cp -r build/help-resource.zip ../fe/fe-core/target/classes
Следуя этому руководству, вы сможете настроить свою среду, компилировать и отлаживать Apache Doris с большим удобством. Удачной отладки!
Source:
https://dzone.com/articles/guide-to-building-and-debugging-apache-doris