Что такое Apache Spark?

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

Ответ

Apache Spark — это унифицированный, высокопроизводительный движок для распределенной обработки больших данных с открытым исходным кодом. В отличие от Hadoop MapReduce, который работает с диском на каждом этапе, Spark использует резидентные вычисления в оперативной памяти (in-memory), что делает его на порядки быстрее для итеративных алгоритмов (машинное обучение) и интерактивной аналитики.

Ключевые особенности и компоненты, которые я использовал в работе:

  • Скорость: Основная идея — Resilient Distributed Datasets (RDD). Это неизменяемая распределенная коллекция объектов, которая может кэшироваться в памяти. Последующие операции над закэшированным RDD выполняются с огромной скоростью.
  • Универсальность: Spark предоставляет единый API для различных задач:
    • Spark SQL: Для работы со структурированными данными через SQL или DataFrame API. Я использовал его для ETL-пайплайнов, агрегации логов.
      from pyspark.sql import SparkSession
      spark = SparkSession.builder.appName("Example").getOrCreate()
      df = spark.read.json("logs.json")
      df.filter(df["status"] == 404).groupBy("endpoint").count().show()
    • Spark Streaming (и Structured Streaming): Для обработки потоковых данных в (почти) реальном времени. Например, для агрегации метрик из потока событий Kafka.
    • MLlib: Библиотека для распределенного машинного обучения. Использовал для обучения моделей классификации на больших наборах данных.
    • GraphX: Для обработки графов (социальные сети, рекомендации).
  • Простота API: Основные абстракции — RDD (низкоуровневый) и DataFrame/Dataset (высокоуровневый, оптимизированный). Работа с DataFrame через SQL или DSL (на Scala, Java, Python, R) интуитивно понятна.
  • Отказоустойчивость: Spark автоматически восстанавливается после сбоев нод, пересчитывая потерянные части данных на основе lineage (информации о происхождении данных).

Типичные сценарии использования в моей практике:

  1. Пакетная обработка (ETL): Ежедневная/еженедельная обработка терабайтов сырых логов, их очистка, обогащение и загрузка в хранилище данных (Data Warehouse).
  2. Интерактивная аналитика: Быстрое выполнение ad-hoc-запросов к большим наборам данных через Spark SQL для бизнес-аналитиков.
  3. Машинное обучение в больших данных: Подготовка признаков и обучение моделей на данных, которые не помещаются в память одной машины.
  4. Обработка потоков: Анализ потока кликов на сайте для обнаружения аномалий в реальном времени.

Spark обычно развертывается в кластере (YARN, Mesos, Kubernetes или standalone) и управляет распределением задач и данных между сотнями или тысячами серверов.