Big Data
Hadoop Ecosystem
2008. Twitter: 100 твитов в секунду. 2023: 6000 твитов в секунду. Instagram: 95M фото в день. Hadoop был Facebook Pet Project 2006 - сегодня это Apache Hadoop, Apache Spark, облачные хранилища петабайт. Дуг Каттинг назвал проект в честь жёлтого плюшевого слоника сына. Этот слоник вырос в экосистему, которая обрабатывает большую часть мировых данных.
- **Yahoo** - один из первых production-кластеров: 4000+ узлов, петабайты данных для поисковой индексации
- **Facebook** - крупнейший Hadoop-кластер: 600+ PB данных в HDFS, тысячи Hive-запросов ежедневно
- **LinkedIn** - Hadoop + Kafka (созданный в LinkedIn) для обработки миллиардов событий активности пользователей
- **Alibaba** - крупнейший Hadoop-кластер в Азии, обрабатывает данные 900M+ пользователей
Дуг Каттинг и рождение Hadoop
Дуг Каттинг разрабатывал поисковую систему Nutch - и ему нужен был способ обрабатывать весь веб. Когда Google опубликовал статьи о GFS (2003) и MapReduce (2004), Каттинг вместе с Майком Кафарелла реализовал их в open-source. Проект назвали Hadoop - так звали жёлтого плюшевого слоника сына Каттинга. Yahoo наняла Каттинга в 2006 году и сделала Hadoop основой инфраструктуры. Кафарелла также был соавтором веб-краулера, который стал основой Nutch и повлиял на весь Big Data стек.
Предварительные знания
HDFS: файловая система на тысячах серверов
2006 год. Facebook хранит фотографии на обычных серверах. Через 5 лет это уже 100 PB данных. Ни один диск не вмещает такое. **HDFS (Hadoop Distributed File System)** решает задачу радикально: файл разбивается на блоки по 128 MB, каждый блок копируется на 3 разных сервера. Если один умрёт - два других хранят полную копию. Facebook сегодня: 600+ PB в HDFS, тысячи Hive-запросов ежедневно.
| Параметр | Значение | Зачем |
|---|---|---|
| Размер блока | 128 MB (по умолчанию) | 1 TB файл = ~8000 блоков, а не миллионы. Минимизирует overhead метаданных |
| Фактор репликации | 3 (по умолчанию) | Блок на 3 разных узлах. Потеря 2 узлов - данные целы |
| NameNode | 1 (+ standby) | Хранит ВСЮ карту: какой блок на каком узле. Single point of failure |
| DataNode | Сотни/тысячи | Хранят блоки данных. Шлют heartbeat каждые 3 секунды |
HDFS оптимизирован под паттерн **Write-Once-Read-Many (WORM)**. Файл записывается один раз, читается многократно. Нельзя изменить строку 42 в файле - это не база данных. Зато терабайтный файл читается последовательно с огромной скоростью. Netflix, Yahoo, LinkedIn строят аналитические пайплайны именно на этом паттерне.
**NameNode - единая точка отказа.** Если упадёт NameNode - весь кластер недоступен. В production: **NameNode HA** - активный + standby NameNode с автоматическим failover через ZooKeeper. Это CAP-выбор CP: лучше недоступность, чем рассогласованность карты блоков.
HDFS не подходит для миллионов мелких файлов. NameNode хранит метаданные в RAM (~150 байт на файл). 100M файлов = 15 GB только на метаданные. Решение: объединять мелкие файлы в SequenceFile или Avro-контейнеры.
Файл 500 MB загружен в HDFS с блоком 128 MB и репликацией 3. Сколько места займёт на кластере?
MapReduce: вычисления к данным, не данные к вычислениям
2004 год. Google публикует статью «MapReduce: Simplified Data Processing on Large Clusters». Джефф Дин и Санджай Гемават описывают парадигму, которая изменит индустрию. Идея гениальная в своей простоте: данные лежат на сотнях серверов - не тащить их к программе, а доставить программу к данным. Программа весит килобайты. Данные - терабайты. Разрыв в миллион раз.
MapReduce вдохновлён функциональным программированием: `map` применяется к каждому элементу, `reduce` агрегирует результаты. Divide and conquer на уровне распределённых систем - тот же алгоритмический паттерн, что в сортировке слиянием, но на 1000 машинах.
**Word Count** - Hello World мира MapReduce. Терабайтный файл на одном сервере - часы. С MapReduce на 100 узлах - минуты. Не потому что каждый узел умный, а потому что каждый обрабатывает свою часть данных независимо и параллельно.
**Главная проблема MapReduce - disk I/O.** Между Map и Reduce все промежуточные данные записываются на диск. Для итеративных алгоритмов (ML, PageRank) это катастрофа: 10 итераций = 10 циклов записи/чтения. Spark хранит промежуточные данные в памяти - отсюда 10-100x прирост скорости.
Почему MapReduce перемещает вычисления к данным, а не наоборот?
YARN: один кластер для всех фреймворков
Hadoop 1.x: кластер умеет запускать только MapReduce. Yahoo хочет запустить рядом Spark и Hive - приходится держать два отдельных кластера, дублировать данные, платить вдвойне. Hadoop 2.0 (2012) решает это **YARN (Yet Another Resource Negotiator)**: один кластер, один пул ресурсов, любые фреймворки.
**YARN** разделяет роли: управление ресурсами (кто получает CPU и RAM) и выполнение задач (как именно обрабатываются данные). Теперь MapReduce, Spark, Flink, Hive работают на одном кластере одновременно, без конфликтов.
| Компонент | Роль | Аналогия |
|---|---|---|
| ResourceManager | Распределяет ресурсы кластера | Диспетчер аэропорта - решает кто куда летит |
| NodeManager | Ресурсы одного узла | Техник на полосе - следит за конкретным самолётом |
| Container | Изолированная порция CPU+RAM | Посадочное место - фиксированный ресурс |
| ApplicationMaster | Координатор одного приложения | Пилот - управляет своим рейсом |
YARN поддерживает **планировщики**: CapacityScheduler (для multi-tenant кластеров с квотами на команду) и FairScheduler (ресурсы делятся поровну). Выбор зависит от организации: несколько команд = CapacityScheduler.
Команда хочет запустить Spark и MapReduce одновременно на одном кластере. Что нужно?
Экосистема Hadoop: что выросло вокруг ядра
HDFS + MapReduce + YARN - ядро. Но вокруг ядра за 15 лет выросла экосистема, которую используют тысячи компаний. Hive превращает SQL-запросы в MapReduce-задачи. HBase даёт random read/write поверх HDFS. Sqoop тащит данные из MySQL в HDFS за одну команду. ZooKeeper держит всё это вместе.
| Инструмент | Назначение | Ключевое применение |
|---|---|---|
| Hive | SQL на Hadoop | SQL -> MapReduce/Spark. Для аналитиков, не программистов |
| Pig | Скриптовые ETL-пайплайны | Pig Latin DSL. Проще, чем Java MapReduce |
| HBase | NoSQL (column-family) на HDFS | Google Bigtable-клон. Миллиарды строк, random read/write, low latency |
| Sqoop | Import/Export RDBMS <-> HDFS | MySQL -> HDFS за одну команду. Параллельный импорт |
| Flume | Сбор логов в HDFS | Agent -> Collector -> HDFS. Для потоковых данных |
| ZooKeeper | Координация распределённых систем | Выбор лидера, distributed locks. Используется HBase, Kafka, YARN |
Современный Big Data стек эволюционировал: MapReduce уступил место **Apache Spark** (in-memory, в 10-100 раз быстрее). Появились облачные решения: **AWS EMR**, **Google Dataproc**, **Azure HDInsight**. Но HDFS и YARN остаются фундаментом для тысяч кластеров. Spark не заменяет Hadoop - он заменяет MapReduce, работая поверх тех же HDFS и YARN.
**Apache Spark** не заменяет Hadoop - он заменяет **MapReduce**. Spark работает поверх HDFS и YARN, но хранит промежуточные данные в памяти. Для итеративных задач (ML, граф-алгоритмы) Spark быстрее в 10-100 раз.
Hadoop мёртв - его полностью заменили Spark и облачные решения.
MapReduce устарел, но HDFS и YARN живы и активно используются. Spark работает ПОВЕРХ Hadoop.
Тысячи компаний (банки, телекомы, ритейл) имеют on-premise Hadoop-кластеры с петабайтами данных. Миграция в облако занимает годы. HDFS хранит данные, YARN управляет ресурсами, Spark заменил MapReduce как вычислительный движок. Без понимания Hadoop невозможно работать со Spark, Hive и Kafka.
Аналитик хочет SQL-запрос к 500 GB логов в HDFS. Какой инструмент использовать?
Ключевые идеи
- **HDFS** - блоки 128 MB, репликация x3, NameNode + DataNodes. 600+ PB в Facebook, сотни тысяч серверов в Yahoo
- **MapReduce** - вычисления к данным: Map (параллельно) -> Shuffle (группировка) -> Reduce (агрегация). Медленный из-за disk I/O
- **YARN** - менеджер ресурсов: Spark, MapReduce, Flink на одном кластере одновременно
- **Экосистема** - Hive (SQL), HBase (NoSQL), Sqoop (import), Flume (логи), ZooKeeper (координация)
- **Эволюция** - MapReduce заменён Spark, HDFS+YARN остаются фундаментом, облака добавили S3+EMR
- **Игрушечный слоник** Дуга Каттинга стал именем проекта, изменившего обработку данных во всём мире
Связанные темы
Hadoop - фундамент. Далее детально разберём MapReduce и познакомимся с Spark:
- MapReduce: парадигма — Детальный разбор Map -> Shuffle -> Reduce с примерами кода
- Что такое Big Data: 5V — Hadoop решает проблемы Volume и Variety из модели 5V
Вопросы для размышления
- Почему HDFS использует блоки по 128 MB, а не 4 KB как обычные файловые системы? Что произойдёт при уменьшении размера блока?
- В каких случаях выбрать HBase вместо Hive? Какие требования определяют выбор?
- Big Data проект с нуля в 2024 году - Hadoop on-premise или облачное решение (AWS EMR)? Какие факторы учитывать?
Связанные уроки
- bd-01 — 5V модель и проблемы Big Data из первого урока
- bd-03 — MapReduce в деталях - следующий шаг после обзора экосистемы
- ds-02-cap-theorem — HDFS репликация и NameNode HA - CAP trade-off на практике
- bt-13-kafka — Kafka часто работает в паре с HDFS как источник данных для Hadoop
- alg-19-divide-conquer — MapReduce - divide and conquer на уровне распределённых систем
- isd-08-database-selection