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 стек.

Предварительные знания

  • What is Big Data: 5V

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 узлов - данные целы
NameNode1 (+ 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 держит всё это вместе.

ИнструментНазначениеКлючевое применение
HiveSQL на HadoopSQL -> MapReduce/Spark. Для аналитиков, не программистов
PigСкриптовые ETL-пайплайныPig Latin DSL. Проще, чем Java MapReduce
HBaseNoSQL (column-family) на HDFSGoogle Bigtable-клон. Миллиарды строк, random read/write, low latency
SqoopImport/Export RDBMS <-> HDFSMySQL -> HDFS за одну команду. Параллельный импорт
FlumeСбор логов в HDFSAgent -> 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
Hadoop Ecosystem

0

1

Войти