Перейти к содержанию

Обзор развертывания Apache Spark на сервере

Предварительные требования и базовые условия

Для успешного размещения приложения Apache Spark сервер должен соответствовать следующим требованиям:

  • Операционная система: Debian (Bookworm) или Ubuntu (Bullseye).

  • Привилегии: Требуется доступ root для установки пакетов, настройки переменных окружения и управления Docker.

  • Среда выполнения Java: На системе должен быть установлен OpenJDK (версия 11 для Ubuntu Bullseye, версия 17 для Debian Bookworm).

  • Сеть: Сервер должен иметь исходящий доступ в интернет для загрузки архива Apache Spark и SSL-сертификатов.

  • Порты: Для внутренней коммуникации должны быть доступны следующие порты:

  • 4040: Spark UI (внутренний)

  • 8080: Spark Master

  • 8081: Spark Worker

  • 18080: Spark History Server

  • 443: HTTPS (внешний доступ через Nginx)

FQDN конечной точки

Приложение доступно по следующему формату полностью квалифицированного доменного имени (FQDN):

  • Формат: spark<Server ID>.hostkey.in:443

  • Пример: Если Server ID равен 123, адрес будет spark123.hostkey.in.

Доступ предоставляется по протоколу HTTPS на порту 443.

Структура файлов и каталогов

Приложение и его вспомогательные компоненты организованы в следующих каталогах:

  • Установка Apache Spark: /root/spark-3.5.3-bin-hadoop3 (распакован из архива).

  • Конфигурация Nginx:

  • Файл compose: /root/nginx/compose.yml

  • Конфигурация пользователя: /data/nginx/user_conf.d/spark<Server ID>.hostkey.in.conf

  • SSL-сертификаты: /etc/letsencrypt/live/spark<Server ID>.hostkey.in/

  • Переменные окружения: /etc/environment

Процесс установки приложения

Приложение Apache Spark устанавливается вручную на хост-системе с помощью следующих шагов:

  1. Обновление системы: Пакеты APT обновляются и обновляются до актуальных версий.

  2. Установка Java: Пакет default-jdk устанавливается через APT.

  3. Настройка окружения:

    • JAVA_HOME устанавливается в /usr/lib/jvm/java-11-openjdk-amd64 на Ubuntu или /usr/lib/jvm/java-17-openjdk-amd64 на Debian.

    • SPARK_LOCAL_IP устанавливается в 127.0.0.1.

    • Эти переменные добавляются в файл /etc/environment.

  4. Загрузка Spark: Архив Apache Spark загружается из официального архива Apache:

    • URL: https://archive.apache.org/dist/spark/spark-3.5.3/spark-3.5.3-bin-hadoop3.tgz

    • Пункт назначения: /root/spark-3.5.3-bin-hadoop3.tgz

  5. Распаковка: Архив распаковывается в корневой каталог.

  6. Очистка: Исходный файл архива удаляется.

  7. Перезагрузка: Система перезагружается для применения новых переменных окружения.

Установленная версия Apache Spark — 3.5.3.

Контейнеры Docker и их развертывание

Обратный прокси и завершение SSL-сессий обрабатываются контейнерами Docker, управляемыми через Docker Compose.

  • Установка Docker: Docker установлен на хост-системе.

  • Расположение файла Compose: /root/nginx/compose.yml

  • Имя сервиса: nginx

  • Образ: jonasal/nginx-certbot:latest

  • Режим сети: host

  • Томы (Volumes):

  • nginx_secrets (внешний), смонтированный в /etc/letsencrypt

  • /data/nginx/user_conf.d, смонтированный в /etc/nginx/user_conf.d

  • Окружение:

  • CERTBOT_EMAIL: hkadm@hostkey.com

  • Файл окружения: /data/nginx/nginx-certbot.env

Контейнер запускается с помощью команды:

docker compose up -d
выполненной из каталога /root/nginx.

Прокси-серверы

Nginx выступает в роли обратного прокси, обрабатывая завершение SSL-сессий и маршрутизируя трафик к внутренним сервисам Spark.

  • Домен: spark<Server ID>.hostkey.in

  • Протокол: HTTPS (Порт 443)

  • Провайдер SSL: Let's Encrypt (управляется Certbot внутри контейнера Docker)

  • Пути к сертификатам:

  • Fullchain: /etc/letsencrypt/live/spark<Server ID>.hostkey.in/fullchain.pem

  • Приватный ключ: /etc/letsencrypt/live/spark<Server ID>.hostkey.in/privkey.pem

  • Chain: /etc/letsencrypt/live/spark<Server ID>.hostkey.in/chain.pem

Конфигурация маршрутизации

Конфигурация Nginx маршрутизирует трафик на конкретные внутренние порты в зависимости от пути URL:

Путь URL Внутренний сервис Внутренний порт
/ Spark UI 4040
/master Spark Master 8080
/worker Spark Worker 8081
/history Spark History Server 18080

Конфигурация прокси включает заголовки X-Forwarded-Host, X-Forwarded-Server, X-Real-IP и X-Forwarded-For. Поддержка WebSocket включена для основного пути.

Доступные порты для подключения

Для приложения настроены следующие порты:

  • Внешний доступ:

  • 443: HTTPS (Обратный прокси Nginx)

  • Внутренний доступ (доступен только с хоста или через прокси):

  • 4040: Spark UI

  • 8080: Spark Master

  • 8081: Spark Worker

  • 18080: Spark History Server

Запуск, остановка и обновление

Управление сервисом прокси на базе Docker осуществляется с помощью команд Docker Compose из каталога /root/nginx.

  • Запуск/Перезапуск:

    cd /root/nginx
    docker compose up -d
    

  • Остановка:

    cd /root/nginx
    docker compose down
    

  • Обновление: Для обновления образа контейнера Nginx необходимо загрузить последнюю версию и перезапустить его:

    cd /root/nginx
    docker compose pull
    docker compose up -d
    

Само приложение Apache Spark работает как нативный процесс на хосте. Для перезапуска Spark пользователю необходимо перейти в каталог установки и выполнить соответствующие команды оболочки Spark или скрипты, либо перезагрузить хост-систему, если были изменены переменные окружения.

question_mark
Я могу вам чем-то помочь?
question_mark
ИИ Помощник ×