Какое место занимал Apache Spark в архитектуре?

«Какое место занимал Apache Spark в архитектуре?» — вопрос из категории Apache Spark, который задают на 33% собеседований Data Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В типичной архитектуре обработки данных Apache Spark занимает место движка для пакетной и потоковой обработки (ETL/ELT) и аналитики, расположенного между системами-источниками и целевыми хранилищами или сервисами.

Конкретные роли в архитектуре:

  1. Слой обработки (Processing Engine): Основная роль. Spark выполняет преобразования, агрегации и сложные вычисления над большими наборами данных, загруженными из различных источников.
  2. Стриминг (Stream Processing): Модули Spark Streaming или Structured Streaming обрабатывают потоки данных в режиме, близком к реальному времени, используя микропакетную модель.
  3. Промежуточный слой (In-Memory Cache): Благодаря работе с данными в оперативной памяти (RDD, DataFrame), Spark может выступать как высокопроизводительный кэширующий слой для повторяющихся запросов или итеративных алгоритмов (например, в MLlib).

Типичный пайплайн:

# 1. Чтение из источника (сырые данные)
df_raw = spark.read 
    .format("kafka") 
    .option("kafka.bootstrap.servers", "broker:9092") 
    .option("subscribe", "logs") 
    .load()

# 2. Трансформация и обогащение (обработка в Spark)
df_cleaned = df_raw 
    .filter(col("severity") == "ERROR") 
    .withColumn("processing_time", current_timestamp()) 
    .groupBy("application").count()

# 3. Запись результата в целевое хранилище
df_cleaned.write 
    .mode("append") 
    .format("delta") 
    .save("/data-lake/error_metrics")

Интеграция: Spark подключается к источникам (Kafka, HDFS, S3, JDBC-базы), обрабатывает данные и записывает результаты в аналитические хранилища (Delta Lake, Iceberg, Hive), ключ-значение хранилища (Cassandra) или обратно в очереди для дальнейшей обработки.