Компиляция в macOS
В этом документе описано, как установить зависимости, скомпилировать Apache Doris из исходного кода, запустить его и подготовить среду для локальной отладки в macOS (Intel и Apple Silicon).
Компиляция и развёртывание в режиме с разделением вычислений и хранения пока не поддерживаются в macOS.
1. Требования к среде
- macOS 12 (Monterey) или более поздняя версия (поддерживаются Intel и Apple Silicon)
- Homebrew
- JDK 8 или JDK 17 (в настоящее время Doris поддерживает только эти две версии)
2. Установка зависимостей
Установите основные зависимости с помощью Homebrew:
brew install automake autoconf libtool pkg-config texinfo coreutils gnu-getopt \
python@3 cmake ninja ccache bison byacc gettext wget pcre maven llvm@22 llvm@20 openjdk@17 npm
Необходимы обе версии LLVM.
llvm@22используется для компиляции BE (LLVM 22.1.8 стал первым выпуском, в котором среда выполнения AddressSanitizer запускается в macOS 26.4 и более поздних версиях).llvm@20используется для компиляции сторонних библиотек при их сборке из исходного кода:thirdparty/build-thirdparty.shзавершает работу, если эта версия отсутствует, аbuild.shавтоматически запускает такую сборку, когда вthirdparty/installedнет нужной ему библиотеки. Скрипты сборки находят обе версии через Homebrew, поэтому ни одну из них не нужно добавлять вPATH.
В версии brew для arm64 в macOS по умолчанию нет JDK 8, поэтому рекомендуется использовать
openjdk@17. Если вам нужен JDK 8, установите Zulu JDK 8 вручную. Maven также можно скачать отдельно с сайта Maven и настроить с помощью переменных окружения.
Для некоторых зависимостей на Apple Silicon также нужно вручную настроить переменные окружения:
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
3. Получение исходного кода и настройка DORIS_HOME
cd ~
mkdir DorisDev && cd DorisDev
git clone https://github.com/apache/doris.git
export DORIS_HOME=~/DorisDev/doris
export PATH=$DORIS_HOME/bin:$PATH
4. (Необязательно) Отдельная установка Thrift
Отдельная установка Thrift требуется только для отладки FE без BE. При отладке BE и FE Thrift уже входит в состав сторонних библиотек BE.
brew install thrift@0.16.0
mkdir -p ./thirdparty/installed/bin
# Apple Silicon
ln -s /opt/homebrew/Cellar/thrift@0.16.0/0.16.0/bin/thrift ./thirdparty/installed/bin/thrift
# Intel
ln -s /usr/local/Cellar/thrift@0.16.0/0.16.0/bin/thrift ./thirdparty/installed/bin/thrift
Если при выполнении brew install thrift@0.16.0 сообщается, что версия не найдена, выполните следующие команды:
brew tap homebrew/core --force
brew tap-new $USER/local-tap
brew extract --version='0.16.0' thrift $USER/local-tap
brew install thrift@0.16.0
Подробнее: https://gist.github.com/tonydeng/02e571f273d6cce4230dc8d5f394493c
5. Ускорение сборки с помощью готовых сторонних библиотек (рекомендуется)
Вы можете скачать готовые сторонние библиотеки, предоставленные сообществом, чтобы пропустить их компиляцию:
cd thirdparty
rm -rf installed
# Intel chip
curl -L https://github.com/apache/doris-thirdparty/releases/download/automation/doris-thirdparty-prebuilt-darwin-x86_64.tar.xz \
-o - | tar -Jxf -
# Apple Silicon chip
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 --version
Если при запуске
protocиthriftпоявляется сообщение невозможно открыть, так как не удаётся проверить разработчика, перейдите вSecurity & Privacy → Generalи нажмитеOpen Anyway. Подробнее: https://support.apple.com/zh-cn/HT202491
Вы также можете скачать исходный код сторонних библиотек doris-thirdparty-source.tgz со страницы Готовые сторонние библиотеки Apache Doris и скомпилировать их самостоятельно.
6. Настройка лимита файловых дескрипторов
ulimit -n 65536
# Write to the startup script so it takes effect automatically next time the terminal opens
# bash
echo 'ulimit -n 65536' >>~/.bashrc
# zsh
echo 'ulimit -n 65536' >>~/.zshrc
7. Компиляция
cd $DORIS_HOME
bash build.sh
8. Запуск BE / FE
cd output/be/bin && ./start_be.sh --daemon
cd output/fe/bin && ./start_fe.sh --daemon
9. Настройка среды локальной отладки
# Copy the build output to use as the runtime directory
cp -r output ../doris-run
Затем внесите следующие изменения в conf для FE / BE:
- Настройте IP и каталоги
- Дополнительно задайте
min_file_descriptor_number = 10000для BE
Далее настройте отладку в своей IDE:
- Настройка среды разработки FE - IntelliJ IDEA
- Настройка среды разработки BE - CLion (см. «Вариант 2: Локальная разработка в macOS»)
Часто задаваемые вопросы
CMake не может найти OpenMP
При компиляции BE CMake может не найти OpenMP и сообщить о следующих ошибках:
Could NOT find OpenMP_C (missing: OpenMP_C_FLAGS OpenMP_C_LIB_NAMES)
fatal error: 'omp.h' file not found
Установите libomp, затем убедитесь, что установленный через Homebrew пакет содержит omp.h:
brew install libomp
LIBOMP_PREFIX="$(brew --prefix libomp)"
test -f "${LIBOMP_PREFIX}/include/omp.h"
Добавьте следующие переменные окружения в custom_env.sh в корневом каталоге исходного кода Doris:
LIBOMP_PREFIX="$(brew --prefix libomp)"
export CPPFLAGS="-I${LIBOMP_PREFIX}/include ${CPPFLAGS:-}"
export CFLAGS="-I${LIBOMP_PREFIX}/include ${CFLAGS:-}"
export CXXFLAGS="-I${LIBOMP_PREFIX}/include ${CXXFLAGS:-}"
export LDFLAGS="-L${LIBOMP_PREFIX}/lib ${LDFLAGS:-}"
export EXTRA_CXX_FLAGS="-I${LIBOMP_PREFIX}/include ${EXTRA_CXX_FLAGS:-}"
Файл be/CMakeLists.txt сбрасывает CMAKE_C_FLAGS и CMAKE_CXX_FLAGS, поэтому при проверках OpenMP в CMake значения CPPFLAGS, CFLAGS и CXXFLAGS могут не учитываться. EXTRA_CXX_FLAGS передаёт путь к заголовочным файлам libomp в сборку BE и необходим для этого обходного решения.
custom_env.sh содержит локальные настройки сборки. Не добавляйте этот файл в репозиторий.
Сборка завершается ошибкой из-за слишком новой версии Node.js
Сообщение об ошибке:
opensslErrorStack: ['error:03000086:digital envelope routines::initialization error']
library: 'digital envelope routines'
reason: 'unsupported'
code: 'ERR_OSSL_EVP_UNSUPPORTED'
Решение:
export NODE_OPTIONS=--openssl-legacy-provider