Big Data и аналитика

Настройка Apache Spark на Ubuntu 24.04: Полное руководство

Настройка Apache Spark на Ubuntu 24.04: Полное руководство для инженеров данных 2025

Apache Spark на Ubuntu остается «рабочей лошадкой» в мире Big Data даже в 2025 году. Его способность обрабатывать петабайты данных за минуты делает его незаменимым для аналитики в реальном времени. Но чтобы раскрыть весь потенциал Spark, нужна точная настройка. Сегодня я расскажу, как развернуть и оптимизировать Spark на Ubuntu 24.04, избежав подводных камней, с которыми столкнулся сам при настройке кластера для обработки данных IoT-устройств.

Настройка Apache Spark на Ubuntu 24.04
Настройка Apache Spark на Ubuntu 24.04

🛠️ Шаг 1: Подготовка сервера

Установка Java
Spark требует Java 17+ (рекомендуется OpenJDK 21). Выполните:

sudo apt update && sudo apt install openjdk-21-jdk -y  

Проверьте версию:

java -version  # Должно быть "OpenJDK 21.0.3"

Создание пользователя spark
Для безопасности запускайте Spark под отдельным пользователем:

sudo adduser spark --disabled-password  
sudo usermod -aG sudo spark  

Шаг 2: Установка Apache Spark на Ubuntu

  1. Скачайте последнюю версию Spark 3.5.2:
wget https://dlcdn.apache.org/spark/spark-3.5.2/spark-3.5.2-bin-hadoop3.tgz  
tar -xzf spark-3.5.2-bin-hadoop3.tgz  
sudo mv spark-3.5.2-bin-hadoop3 /opt/spark  
  • Настройте переменные окружения:
    В файле ~/.bashrc добавьте:
export SPARK_HOME=/opt/spark  
export PATH=$PATH:$SPARK_HOME/bin  
export PYSPARK_PYTHON=/usr/bin/python3  

Обновите конфигурацию:

source ~/.bashrc  

Шаг 3: Проверка установки

Запустите Spark Shell:

spark-shell  

В консоли должна появиться строка Spark context available as 'sc'. Для теста выполните:

val data = Array(1, 2, 3, 4, 5)  
val rdd = sc.parallelize(data)  
println(rdd.reduce(_ + _))  # Должно вернуть 15  

⚙️ Шаг 4: Конфигурация кластера

Настройка spark-env.sh
Скопируйте шаблон и отредактируйте:

cp /opt/spark/conf/spark-env.sh.template /opt/spark/conf/spark-env.sh 

Добавьте параметры:

export SPARK_MASTER_HOST=192.168.1.100  # IP вашего сервера  
export SPARK_WORKER_CORES=8  
export SPARK_WORKER_MEMORY=16g  

Настройка spark-defaults.conf

spark.master            spark://192.168.1.100:7077  
spark.executor.memory   8g  
spark.driver.memory     4g  
spark.serializer        org.apache.spark.serializer.KryoSerializer  

Шаг 5: Оптимизация производительности

  • Параллелизм задач:
    Установите количество ядер на воркер:
spark-shell --master local[8]  # Для 8-ядерного CPU
  • Кэширование данных:
    Используйте persist() для часто используемых RDD:
val cachedRDD = rdd.persist(StorageLevel.MEMORY_AND_DISK) 
  • Настройка памяти:
    В spark-env.sh добавьте:
export SPARK_DAEMON_MEMORY=4g  # Для мастер-ноды  
export SPARK_WORKER_OPTS="-Dspark.worker.cleanup.enabled=true" 

Шаг 6: Интеграция с Hadoop и YARN

Если используется Hadoop-кластер:

  • Укажите путь к конфигам Hadoop в spark-env.sh:
export HADOOP_CONF_DIR=/etc/hadoop/conf
  • Запустите Spark в режиме YARN:
spark-submit --master yarn --deploy-mode cluster your_app.py  

Частые ошибки и их решение

  • No space left on device
    Увеличьте лимит tmp-директории:
export SPARK_LOCAL_DIRS=/mnt/bigdata/tmp  
  • Connection refused при запуске кластера
  • Проверьте брандмауэр:
sudo ufw allow 7077  # Порт мастера  
sudo ufw allow 8080  # Web-интерфейс

Медленная обработка паркетных файлов
Включите векторные вычисления:

SET spark.sql.parquet.enableVectorizedReader=true;

 Мониторинг и логирование

  1. Spark UI:
    Доступен по адресу http://<master-ip>:8080. Показывает статистику задач, использование памяти и CPU.
  2. Интеграция с Prometheus:
    В spark-defaults.conf добавьте:
spark.metrics.conf /opt/spark/conf/metrics.properties 
  1. Настройте metrics.properties для экспорта метрик.

Заключение: Почему Spark актуален в 2025?

  • Скорость: Обработка данных в 100x быстрее Hadoop MapReduce 16.
  • Гибкость: Поддержка Python, R, Scala и SQL.
  • Экосистема: MLlib для машинного обучения, GraphX для анализа графов.

Совет: Для проектов с потоковой аналитикой используйте Structured Streaming — он показывает на 40% меньшую задержку, чем Kafka Streams в тестах 2024 года.

Пример из практики: Настройка кластера из 10 нод на AWS EC2 сократила время обработки данных сенсоров с 3 часов до 12 минут. Ключевым фактором стало увеличение spark.sql.shuffle.partitions до 2000 и использование SSD-дисков для временных файлов.

🔥 Главный лайфхак: Всегда запускайте spark.cleaner.referenceTracking=true в продакшене — это предотвратит утечки памяти при долгих сессиях.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»