Hadoop, HDFS и MapReduce для Data Engineer

Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

Карьерник — Duolingo для аналитиков: 10 минут в день тренируй SQL, Python, A/B, статистику, метрики и ещё 3 темы собеса. 1500+ вопросов в Telegram-боте. Бесплатно.

Зачем Hadoop в 2026

Hadoop как стек активно вытеснён Spark/lakehouse. Но в РФ банки/телеком/корпорации ещё активно используют Hadoop-кластеры (Сбер, ВТБ, X5). На собесе DE в этих компаниях обязательны вопросы про HDFS, MapReduce и Hive — концептуально и практически.

Главная боль без понимания Hadoop — кандидат думает, что «всё на Spark» и не знает, что Spark часто работает поверх HDFS/YARN. На собесе вопрос «как Spark получает данные с HDFS?» — провал, если не знаешь архитектуру.

HDFS

Hadoop Distributed File System — распределённая файловая система. Файлы режутся на блоки (по умолчанию 128 МБ) и распределяются по узлам кластера с репликацией (обычно ×3).

Архитектура:

  • NameNode — мастер, хранит метаданные (структура директорий, mapping блоков к DataNodes)
  • DataNodes — хранят сами блоки
  • Secondary NameNode — checkpoint NameNode metadata (НЕ горячий резерв, не путать с HA)
file: events.parquet (500 МБ)
→ block_1 (128 МБ) → DN1, DN3, DN7
→ block_2 (128 МБ) → DN2, DN4, DN8
→ block_3 (128 МБ) → DN1, DN5, DN9
→ block_4 (116 МБ) → DN3, DN6, DN10

Свойства:

  • Append-only (нет UPDATE)
  • Write-once-read-many
  • Отказоустойчивость через репликацию
  • Дешёвое хранение терабайтов на commodity hardware

Команды:

hdfs dfs -ls /user/data/
hdfs dfs -put local.csv /user/data/
hdfs dfs -get /user/data/result.parquet ./
hdfs dfs -du -h /user/data/
hdfs dfs -rm -r /user/data/old/

Replication factor: dfs.replication, дефолт 3. Для тестовых сред — 1, для критичных — 3+.

MapReduce

Программная модель для обработки больших данных, реализована в Hadoop как фреймворк.

Этапы:

  1. Map: трансформация input → промежуточные (key, value) пары
  2. Shuffle/Sort: перераспределение по ключам, сортировка
  3. Reduce: агрегация значений по каждому ключу

Пример: word count на MapReduce.

# Mapper
def map(line):
    for word in line.split():
        yield (word, 1)

# Reducer
def reduce(word, counts):
    yield (word, sum(counts))

Промежуточные данные между Map и Reduce пишутся на диск → дорого. Это и есть главная причина медленности MapReduce.

Job execution:

  • Master запускает Map-таски на нодах с релевантными HDFS-блоками (data locality)
  • Map-результат пишется на локальный диск
  • Reduce-таски читают данные с других нод
  • Reduce-результат пишется в HDFS

Use cases: старые batch-pipeline (логи, billing). Новые проекты — Spark.

YARN

Yet Another Resource Negotiator — менеджер ресурсов кластера.

Компоненты:

  • ResourceManager (RM) — глобальный, распределяет ресурсы между приложениями
  • NodeManager (NM) — на каждой ноде, управляет контейнерами
  • ApplicationMaster (AM) — на приложение, запрашивает ресурсы у RM

Workflow:

  1. Клиент сабмитит job в RM
  2. RM запускает AM в одном из контейнеров
  3. AM запрашивает дополнительные контейнеры для тасков
  4. NM запускает таски в контейнерах
  5. AM мониторит, рестартит при падении

Schedulers: Capacity Scheduler (по очередям с лимитами), Fair Scheduler (справедливое распределение).

YARN используется как resource layer для Spark, MapReduce, Hive on Tez. Альтернативы — Kubernetes, Mesos, локальный standalone.

Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

Hive и экосистема

Hive — SQL поверх Hadoop. Данные в HDFS, схема в Metastore (MySQL/Postgres под капотом).

CREATE EXTERNAL TABLE events (
    user_id BIGINT,
    event_type STRING,
    amount DECIMAL(18,2)
)
PARTITIONED BY (event_date STRING)
STORED AS PARQUET
LOCATION '/data/events/';

ALTER TABLE events ADD PARTITION (event_date='2026-05-07') LOCATION '/data/events/dt=2026-05-07/';

SELECT event_type, count(*) FROM events WHERE event_date='2026-05-07' GROUP BY 1;

Engine для Hive:

  • MapReduce — оригинальный, медленный
  • Tez — DAG execution, быстрее MapReduce в 10-100×
  • Spark — Hive on Spark, ещё быстрее
  • LLAP — long-lived, для interactive queries

В современных Hadoop-кластерах Hive on Tez или Hive on Spark — стандарт.

Другие компоненты экосистемы:

  • HBase — NoSQL поверх HDFS
  • Pig — dataflow scripting (legacy)
  • Sqoop — import/export между РСУБД и HDFS
  • Flume — log ingestion
  • Oozie — workflow scheduler (вытесняется Airflow)

Hadoop vs Spark vs облака

Hadoop (HDFS + MapReduce + YARN + Hive):

  • On-premise, дешёвое хранение терабайт
  • Зрелая экосистема
  • Для batch-обработки и DWH-style queries

Spark:

  • In-memory, в 10-100× быстрее MapReduce
  • Стандарт для аналитики и ML
  • Может работать поверх HDFS+YARN или standalone

Облака (S3 + Spark/Trino + dbt):

  • Раздельное хранилище и compute (S3 + EMR/Glue)
  • Платишь только за compute при запросе
  • Lakehouse-форматы (Iceberg, Delta) дают ACID

В РФ: банки часто on-premise Hadoop. Стартапы и интернет-компании — облако (Yandex Cloud, VK Cloud) с S3-style хранилищем.

Частые ошибки

Считать Hadoop ≡ MapReduce. Hadoop — это HDFS + YARN + ecosystem. MapReduce — старый compute layer, в современных кластерах часто заменён на Tez/Spark.

Тысячи маленьких файлов в HDFS. NameNode хранит метаданные в RAM. Миллион файлов = OOM NameNode. Best practice — файлы 128 МБ – 1 ГБ.

Игнорировать data locality. Spark/MapReduce рад запускать таск на ноде с данными. Если конфиг Yarn неверный — перегон данных по сети, медленно.

Снежинка в HDFS. Глубокие директории /data/year/month/day/hour/ плохо работают на больших объёмах. Парквет с partitioning внутри одной таблицы лучше.

Использовать Hive для real-time. Hive — batch. Latency секунды-минуты. Real-time — Druid, ClickHouse.

Полагаться на Secondary NameNode как HA. Это checkpointer, не failover. HA NameNode (через Quorum Journal Manager) — для production.

Реплицировать критичные данные ×1. Один отказ = потеря. Минимум ×3 для прод-критичных.

Связанные темы

FAQ

Hadoop умер?

В чистом виде MapReduce — да. HDFS + YARN + Hive (с Tez/Spark) — нет, активно живут в банках и enterprise. На собесе DE в финтехе РФ обязательны.

S3 заменил HDFS?

В облаке — да. S3 дешевле, не требует управления, неограниченно масштабируется. HDFS остался в on-premise, где S3 недоступен или дорог.

Spark может работать без Hadoop?

Да. Standalone mode, K8s, или поверх облачного storage (S3). HDFS не обязателен.

Что такое EMR / Dataproc?

Managed Hadoop в облаке: AWS EMR, GCP Dataproc, Yandex Cloud Data Proc. Запускают spark+yarn+hive на эфемерных кластерах. Платишь за compute time.

Как читать Parquet с HDFS в Spark?

spark.read.parquet('hdfs://namenode:9000/data/events/'). Spark знает HDFS-протокол через Hadoop libraries.

Это официальная информация?

Нет. Статья основана на документации Apache Hadoop, Hive и общей практике on-premise DWH в РФ.


Тренируйте Data Engineering — откройте тренажёр с 1500+ вопросами для собесов.