Чем отличается Spark от Hadoop?

Apache Spark и Apache Hadoop — это два популярных фреймворка для распределённой обработки больших данных, но они различаются как по архитектуре, так и по принципам работы. Hadoop старше и изначально ориентирован на хранение и пакетную обработку данных, тогда как Spark появился позже как более производительная и гибкая альтернатива. Ниже представлены основные различия между ними по ключевым аспектам.

1. Архитектура и модель вычислений

Hadoop:

  • В основе лежит Hadoop Distributed File System (HDFS) для хранения данных и MapReduce как вычислительная модель.

  • MapReduce — это модель пакетной обработки, в которой данные читаются с диска, обрабатываются в нескольких этапах (map → shuffle → reduce), а результат снова записывается на диск.

  • Каждый этап обработки требует чтения/записи на диск, что делает процесс относительно медленным.

Spark:

  • Spark использует свою собственную вычислительную модель, основанную на резильентных распределённых наборах данных (RDD), которые могут обрабатываться в памяти.

  • Поддерживает in-memory computing, что значительно ускоряет выполнение задач, особенно повторных операций (итераций).

  • Работает поверх HDFS, S3, HBase, Cassandra и других источников, но не зависит от MapReduce.

2. Скорость и производительность

Hadoop MapReduce:

  • Производительность ограничена из-за постоянных операций чтения/записи на диск.

  • Хорошо подходит для обработки больших объёмов данных в пакетном режиме, когда задержки не критичны.

  • Неэффективен для итеративных задач, таких как обучение моделей машинного обучения.

Apache Spark:

  • Быстрее MapReduce в 10–100 раз при in-memory-обработке.

  • Идеально подходит для итеративных алгоритмов, кэширования промежуточных результатов.

  • Поддерживает lazy evaluation — вычисления происходят только при необходимости.

3. API и язык программирования

Hadoop:

  • Основной API MapReduce основан на Java, хотя существуют обёртки для Python (Hadoop Streaming), но они менее удобны.

  • Программирование требует много кода и сложной конфигурации.

Spark:

  • Имеет высокоуровневые API на Scala, Java, Python и R.

  • Включает удобные абстракции: RDD, DataFrame и Dataset.

  • Поддерживает SQL-подобные запросы через Spark SQL.

4. Модули и возможности

Hadoop:

  • Основной модуль — MapReduce.

  • Экосистема включает:

    • HDFS — распределённое хранилище.

    • YARN — менеджер ресурсов.

    • Hive — SQL-интерфейс.

    • Pig — язык для обработки данных.

    • Oozie — оркестрация задач.

Spark:

  • Один монолитный фреймворк, включающий модули:

    • Spark Core — базовая функциональность.

    • Spark SQL — работа с табличными данными и SQL-запросами.

    • Spark Streaming — потоковая обработка.

    • MLlib — библиотека машинного обучения.

    • GraphX — работа с графами.

5. Обработка в реальном времени (streaming)

Hadoop:

  • MapReduce не поддерживает real-time или near-real-time обработку.

  • Для потоков используется Apache Storm или Apache Flume в связке с Hadoop, что усложняет архитектуру.

Spark:

  • Поддерживает Spark Streaming и Structured Streaming для реального времени.

  • Возможна микробатч-обработка с минимальной задержкой.

  • Имеет единую архитектуру для batch и streaming-обработки.

6. Управление ресурсами

Hadoop:

  • Использует YARN как менеджер ресурсов и диспетчер задач.

  • Хорошо масштабируется при большом количестве узлов.

Spark:

  • Может работать с разными менеджерами ресурсов:
    • **YARN
      **
    • **Apache Mesos
      **
    • **Kubernetes
      **
    • В собственном standalone-режиме

7. Надёжность и отказоустойчивость

Hadoop:

  • Обеспечивает отказоустойчивость за счёт хранения реплик данных в HDFS.

  • MapReduce задачи могут быть перезапущены при сбоях.

Spark:

  • Обеспечивает отказоустойчивость через RDD lineage — возможность восстановления потерянных данных по графу зависимостей.

  • Критично к потерям данных в in-memory режиме при неустойчивых кластерах, если не используется сохранение на диск.

8. Совместимость и экосистема

Hadoop:

  • Более зрелая экосистема: поддержка HBase, Hive, Flume, Oozie, Sqoop и др.

  • Популярен как корпоративный стандарт на многих кластерах.

Spark:

  • Широко интегрируется с Hadoop (может использовать HDFS и YARN).

  • Поддерживает подключение к S3, Cassandra, Kafka и другим источникам.

  • Используется как замена или надстройка над Hadoop в новых проектах.

9. Установка и эксплуатация

Hadoop:

  • Настройка MapReduce требует отдельной конфигурации.

  • Управление большим кластером может быть сложным.

Spark:

  • Относительно проще в развёртывании и локальной отладке.

  • Легко запускается в интерактивной среде (Spark shell, Jupyter).

10. Типы задач, для которых лучше подходят

Задача Подходит Hadoop Подходит Spark
Пакетная обработка больших файлов
--- --- ---
Аналитика в реальном времени
--- --- ---
Машинное обучение (итерации)
--- --- ---
Работа с графами ✅ (GraphX)
--- --- ---
SQL-аналитика Частично (Hive) ✅ (Spark SQL)
--- --- ---
Интерактивный анализ данных
--- --- ---

Apache Spark рассматривается как более современное и гибкое решение для большинства аналитических задач, тогда как Apache Hadoop с MapReduce может быть полезен в организациях с уже существующими системами и большим объёмом batch-обработки. Spark может эффективно использовать ресурсы Hadoop (например, HDFS и YARN), позволяя миграцию без полной замены инфраструктуры.