Hadoop, HDFS и MapReduce для Data Engineer
Карьерник — 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 как фреймворк.
Этапы:
- Map: трансформация input → промежуточные
(key, value)пары - Shuffle/Sort: перераспределение по ключам, сортировка
- 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:
- Клиент сабмитит job в RM
- RM запускает AM в одном из контейнеров
- AM запрашивает дополнительные контейнеры для тасков
- NM запускает таски в контейнерах
- AM мониторит, рестартит при падении
Schedulers: Capacity Scheduler (по очередям с лимитами), Fair Scheduler (справедливое распределение).
YARN используется как resource layer для Spark, MapReduce, Hive on Tez. Альтернативы — Kubernetes, Mesos, локальный standalone.
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 для прод-критичных.
Связанные темы
- Spark на собеседовании DE
- Spark shuffle и skew
- Подготовка к собесу Data Engineer
- Parquet vs ORC vs Avro для DE
- Lakehouse, Iceberg и Delta
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+ вопросами для собесов.