Компиляция Apache Doris с помощью образов Docker
В этом документе описано, как скомпилировать исходный код Doris с помощью официального образа Apache Doris для сборки. Сообщество поддерживает образ и оперативно обновляет его зависимости, поэтому вручную устанавливать toolchain и сторонние библиотеки не требуется. Этот способ компиляции рекомендуется в первую очередь.
При использовании образа Docker компиляция и развёртывание в режиме разделения хранения и вычислений пока не поддерживаются.
Целевая аудитория, преимущества и недостатки
| Критерий | Описание |
|---|---|
| Целевая аудитория | Разработчики, которым нужно быстро подготовить среду сборки без ручной настройки зависимостей |
| Преимущества | Образ содержит предустановленные thirdparty, toolchain и JDK и сразу готов к использованию |
| Недостатки | На локальной машине требуется рабочая среда Docker; образ занимает довольно много места (около 3.3 ГБ) |
Если Docker недоступен на машине, воспользуйтесь компиляцией с LDB Toolchain.
1. Установка Docker
В CentOS установите Docker напрямую через менеджер пакетов:
yum install docker
Для других дистрибутивов см. официальное руководство по установке Docker.
2. Выбор и загрузка образа для сборки
Для разных версий Doris предназначены разные образы для сборки. apache/doris:build-env-ldb-toolchain-latest используется для компиляции кода ветки master и непрерывно обновляется вместе с основной веткой.
| Тег образа | Совместимая версия Doris | Примечания |
|---|---|---|
apache/doris:build-env-for-2.0 | 2.0.x | Поддерживает набор инструкций AVX2 |
apache/doris:build-env-for-2.0-no-avx2 | 2.0.x | Совместим с CPU без поддержки AVX2 |
apache/doris:build-env-for-2.1 | 2.1.x | Поддерживает набор инструкций AVX2 |
apache/doris:build-env-for-2.1-no-avx2 | 2.1.x | Совместим с CPU без поддержки AVX2 |
apache/doris:build-env-for-3.0 | 3.0.x | Поддерживает набор инструкций AVX2 |
apache/doris:build-env-for-3.0-no-avx2 | 3.0.x | Совместим с CPU без поддержки AVX2 |
apache/doris:build-env-for-3.1 | 3.1.x | Поддерживает набор инструкций AVX2 |
apache/doris:build-env-for-3.1-no-avx2 | 3.1.x | Совместим с CPU без поддержки AVX2 |
apache/doris:build-env-ldb-toolchain-latest | master | Соответствует основной ветке |
apache/doris:build-env-ldb-toolchain-no-avx2-latest | master | Совместим с CPU без поддержки AVX2 |
На примере компиляции Doris 2.0 загрузим и проверим образ:
# You can also use docker.io/apache/doris:build-env-for-2.0
docker pull apache/doris:build-env-for-2.0
# Confirm that the image has been downloaded successfully
docker images
# REPOSITORY TAG IMAGE ID CREATED SIZE
# apache/doris build-env-for-2.0 f29cf1979dba 3 days ago 3.3GB
Примечания по выбору образа
- Теги образов однозначно соответствуют версиям Doris. Выбирайте образ, соответствующий целевой ветке, и избегайте компиляции с образом для другой версии.
- Сторонние библиотеки в образах
no-avx2могут работать на CPU без поддержки AVX2. Их необходимо компилировать с параметромUSE_AVX2=0. - Историю изменений образов см. в журнале изменений thirdparty.
- Последняя версия образа
apache/doris:build-env-ldb-toolchain-latest(на данный момент поддерживает только архитектуру x86_64) включает JDK 8 и JDK 17. Для версий 2.1 и более ранних используйте JDK 8, а для версий 3.0 и более поздних или ветки master используйте JDK 17. - При компиляции с помощью Docker на архитектуре ARM64 сначала загрузите базовый образ Linux, совместимый с ARM64 (например,
apache/doris:base-latest, который соответствует Ubuntu 22.04.5 LTS), а затем установите зависимости и выполните компиляцию по инструкциям из документов Прямая компиляция в Linux и Компиляция на платформе ARM.
Внутри контейнера переключайте JDK с помощью переменных окружения:
# Switch to JDK 8
export JAVA_HOME=/usr/lib/jvm/java-1.8.0
export PATH=$JAVA_HOME/bin/:$PATH
# Switch to JDK 17
export JAVA_HOME=/usr/lib/jvm/jdk-17.0.2/
export PATH=$JAVA_HOME/bin/:$PATH
3. Компиляция Doris
3.1 Загрузка исходного кода Doris
На хосте загрузите код нужной ветки (в примере используется branch-2.0):
git clone -b branch-2.0 https://github.com/apache/doris.git
Предположим, что исходный код находится в каталоге ~/doris-branch-2.0.
3.2 Запуск контейнера для сборки
# Prepare the maven .m2 directory on the host in advance so that Java dependencies can be reused across multiple builds
mkdir ~/.m2
# Mount the source code and the .m2 directory, then start the build image
docker run -it --network=host \
--name mydocker \
-v ~/.m2:/root/.m2 \
-v ~/doris-branch-2.0:/root/doris-branch-2.0/ \
apache/doris:build-env-for-2.0
# After the command runs successfully, it enters the container automatically
Назначение основных параметров docker run:
| Параметр | Назначение |
|---|---|
-v | Подключает каталог хоста к контейнеру для сохранения исходного кода и зависимостей |
--name | Задаёт имя контейнера для удобства дальнейшего управления |
--network | Задаёт сетевой режим контейнера. host использует общий сетевой стек с хостом и не требует проброса портов |
Рекомендации:
- Всегда подключайте каталог с исходным кодом Doris, чтобы артефакты сборки оставались на хосте и не терялись после завершения работы контейнера.
- Подключайте каталог
.m2, чтобы не загружать зависимости Maven повторно при каждом запуске контейнера. - Для загрузки сторонних библиотек внутри контейнера требуется доступ в интернет. Рекомендуется использовать режим
--network=host.
3.3 Выполнение сборки
В контейнере перейдите в каталог исходного кода и выполните:
# By default, compile artifacts that support AVX2
sh build.sh
# When the CPU does not support AVX2, append USE_AVX2=0
USE_AVX2=0 sh build.sh
# Compile the Debug version of BE
BUILD_TYPE=Debug sh build.sh
По завершении сборки артефакты будут находиться в подкаталоге output/ каталога с исходным кодом.
Как проверить, поддерживает ли машина набор инструкций AVX2?
cat /proc/cpuinfo | grep avx2
Непустой вывод означает, что AVX2 поддерживается.
4. Создание собственного образа для разработки
Чтобы настроить базовый образ под свои задачи (например, выбрать другой базовый дистрибутив или добавить инструменты отладки), обратитесь к файлу docker/README.md в исходном коде.
Часто задаваемые вопросы
Вопрос 1: Что произойдёт, если версия образа не соответствует версии Doris?
Библиотеки thirdparty и toolchain в образе тесно связаны с исходным кодом Doris. Использование компонентов разных версий с высокой вероятностью приведёт к ошибкам компоновки, таким как undefined reference или incompatible library, во время компиляции. Выбирайте образ строго по таблице.
Вопрос 2: При сборке появляется сообщение AVX2 not supported?
CPU хоста или целевой машины, на которой будет запускаться Doris, не поддерживает набор инструкций AVX2. Перейдите на образ с суффиксом no-avx2 и задайте USE_AVX2=0 при сборке.
Вопрос 3: Образ загружается слишком медленно с помощью docker pull?
Настройте зеркало Docker для ускорения загрузки образов или используйте полный путь docker.io/apache/doris:....
Вопрос 4: В контейнере не удаётся загрузить библиотеки Java?
Убедитесь, что контейнер запущен с параметром --network=host, а каталог ~/.m2 подключён к контейнеру, чтобы прокси или сетевая изоляция не препятствовали доступу к центральному репозиторию Maven.