← Назад к вопросам

Почему появился Spark?

1.2 Junior🔥 141 комментариев
#Apache Spark#Hadoop и распределенные системы

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Почему появился Apache Spark

Apache Spark — это революционное решение, которое решило серьёзные проблемы, которые испытывали Hadoop MapReduce. История его появления тесно связана с эволюцией Big Data обработки.

Проблемы Hadoop MapReduce (до Spark)

Hadoop MapReduce доминировал в 2000-2010 годах, но имел серьёзные ограничения:

1. Медленная обработка I/O операций

MapReduce workflow:
Map -> Disk I/O -> Shuffle -> Disk I/O -> Reduce -> Disk I/O

Каждая операция пишет на диск, что очень медленно!

2. Сложность многошаговых вычислений

# MapReduce требовал отдельных job-ов для каждого этапа
# Job 1: Extract -> Disk
# Job 2: Transform -> Disk
# Job 3: Load -> Disk

# Для простого pipeline нужно 3 отдельных MapReduce job-а!

3. Неподдерживание интерактивных запросов

MapReduce был построен на batch processing. Интерактивные запросы (ad-hoc аналитика) были невозможны. Каждый запрос требовал 10+ секунд инициализации кластера.

4. Сложность разработки

// MapReduce требовал много boilerplate кода
public class WordCount {
    public static class Mapper extends org.apache.hadoop.mapreduce.Mapper<LongWritable, Text, Text, IntWritable> {
        public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
            // много кода даже для простого случая
        }
    }
}

Рождение Spark (2009-2012)

Apache Spark появился в UC Berkeley AMPLab (2009) как исследовательский проект, возглавляемый Matei Zaharia. К 2012 году он был представлен общественности.

Ключная инновация: RDD (Resilient Distributed Dataset)

RDD позволял:

  • Хранить данные в памяти между операциями
  • Реконструировать потерянные данные через DAG (Directed Acyclic Graph)
  • Обеспечить отказоустойчивость без дискового I/O

Основные преимущества Spark

1. Скорость обработки (In-Memory Computing)

MapReduce:  1 TB Sort
- 10 итераций x 209 сек = 2090 сек (35 минут)

Spark:  1 TB Sort  
- 1 итерация = 4 сек (ПАМЯТИ)
- 500x быстрее!

Пример в коде:

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("fast").getOrCreate()

# Данные загружаются в памяти
df = spark.read.parquet('large_file.parquet')

# Множество операций в памяти (нет дискового I/O)
result = (
    df
    .filter(df.age > 25)
    .groupBy('city')
    .agg({'salary': 'avg'})
    .orderBy('avg(salary)', ascending=False)
)

result.show()  # Весь pipeline в памяти!

2. Универсальная платформа

Spark не просто заменяет MapReduce, он предоставляет единый API для разных типов обработки:

  • Spark SQL — SQL запросы (Hive совместимость)
  • Spark MLlib — Machine Learning
  • Spark Streaming — Real-time обработка
  • GraphX — Граф обработка
# Все на одной платформе
spark.sql("SELECT * FROM events").show()  # SQL

df.ml_pipeline.fit(training_data)  # ML

ssc.socketTextStream('localhost', 9999)  # Streaming

3. Простота разработки

Spark использует высокоуровневые языки (Python, Scala, Java, SQL):

# Spark — очень просто
df.filter(df.salary > 100000).groupBy('dept').count().show()

# MapReduce — нужно писать классы и много boilerplate

4. Интерактивные запросы

Spark позволил интерактивную аналитику через shell:

pyspark  # Стартует интерпретатор с подогрытым Spark контекстом

>>> df = spark.read.csv('data.csv', header=True)
>>> df.filter(df.value > 100).show()  # Результат за секунды!

5. Поддержка разнообразных источников данных

# HDFS
df = spark.read.parquet('hdfs://namenode/path/file.parquet')

# S3
df = spark.read.csv('s3://bucket/data.csv')

# Databases
df = spark.read.jdbc(url='jdbc:postgresql://host:5432/db', table='users')

# Streaming Kafka
df = spark.readStream.format('kafka').option('subscribe', 'topic').load()

Историческая контекст

ПериодТехнологияПроблемы
2004-2008Hadoop MapReduceМедленно, сложно, только batch
2008-2009Hive, PigОбёртки над MapReduce, по-прежнему медленно
2009-2012Spark (исследование)В AMPLab, не готов к production
2012-2014Spark 0.5-1.0Первые production deployments
2014+Spark 2.0+Стандарт de-facto для Big Data

Почему Spark "выжил" (в отличие от других проектов)

  1. Правильное время — 2012 год, когда потребность в быстрой обработке была острой
  2. Технологическое превосходство — RDD + DAG архитектура была революционной
  3. Команда качества — Matei Zaharia и его группа разработчиков из Berkeley
  4. Принятие сообществом — Быстро стал стандартом индустрии
  5. Финансирование — Databricks (созданная основателем Spark) инвестировала в развитие

Современное состояние

2024 год:

  • Spark остаётся стандартом для Big Data обработки
  • Конкуренты появились (Dask, Polars, DuckDB), но Spark доминирует
  • PySpark — самый популярный язык для Data Engineering

Альтернативы:

  • Dask — для Pandas DataFrames в распределённой среде
  • Polars — быстрая замена Pandas (однопроцессная)
  • DuckDB — аналитическая БД (локальная)
  • Presto/Trino — распределённые SQL движки

Но Spark по-прежнему лидирует в enterprise.

Почему появился Spark? | PrepBro