Apache Spark: Как устроены распределенные вычисления и почему память важнее диска

Stanford Online 10,1 тыс. 1 ч 17 мин 3 мин 20.09.2024
Главное

Распределенные вычисления и Apache Spark: Масштабируемость и отказоустойчивость 0:04

Современные системы обработки данных, такие как инфраструктуры Google, Facebook и Amazon, требуют работы с огромными массивами информации, измеряемыми сотнями терабайт. Решением этой задачи стали так называемые «складские» компьютеры (warehouse-scale computers) — кластеры из тысяч стандартных серверов, объединенных в единую вычислительную среду. В данной статье рассматриваются подходы к программированию таких систем, роль Apache Spark и механизмы, обеспечивающие их эффективность и отказоустойчивость.

Архитектура «складских» компьютеров и проблема ввода-вывода 5:01

Концепция «складского» компьютера, популяризированная Луисом Баррозу (Luiz Barroso) в его книге Datacenter as a Computer, предполагает использование товарных ПК (commodity PCs), соединенных через Ethernet. Основная мотивация перехода от одиночных узлов к кластерам — необходимость повышения пропускной способности ввода-вывода (I/O bandwidth). Обработка данных, которая на одном узле заняла бы 23 дня, на 1000 узлах выполняется за 33 минуты.

Основные особенности архитектуры:

Для коммуникации между узлами, работающими под управлением разных экземпляров ОС и не имеющими общего адресного пространства, используется модель передачи сообщений (message passing).

Распределенные файловые системы: Хранение данных 18:02

Для предотвращения потери данных в случае выхода из строя узла или коммутатора стойки, используется распределенная файловая система (например, Google File System — GFS, или ее open-source аналог HDFS).

Модель MapReduce: Первые шаги к автоматизации 27:39

Классическая модель MapReduce была призвана упростить распределенную обработку данных, скрывая сложность передачи сообщений. Она опирается на функциональные примитивы:

  1. Map: Применяет функцию к каждому элементу входных данных, не мутируя их, что обеспечивает легкую параллелизуемость и возможность повторного выполнения.
  2. Shuffle/Sort: Промежуточный этап, гарантирующий, что все значения с одинаковыми ключами попадут к одному редусеру.
  3. Reduce: Агрегирует значения для каждого ключа.

Эта модель эффективно справляется с отказами: если узел с mapper-задачей умирает, scheduler перезапускает задачу на другом узле, используя реплицированные данные. Однако MapReduce имеет существенные ограничения: модель линейна и неэффективна для итеративных алгоритмов (например, PageRank), так как требует записи каждого промежуточного результата на диск.

Apache Spark и Resilient Distributed Datasets (RDD) 58:36

Apache Spark был разработан для преодоления недостатков MapReduce, прежде всего за счет интенсивного использования оперативной памяти. Ключевой абстракцией здесь является Resilient Distributed Dataset (RDD) — неизменяемая, распределенная коллекция записей.

💬 Цитаты

«Основная проблема заключается в том, что вам нужно придумать, как запрограммировать сотни тысяч ядер, и как справиться с тем фактом, что оборудование ломается.»

Лектор Stanford 03:51

«Spark — это отказоустойчивые распределенные вычисления в оперативной памяти, с упором именно на слово «отказоустойчивые».»

Лектор Stanford 58:49
👥 Спикер
📚 Упомянутые книги
🔗 Упомянутые сайты и проекты
📖 Термины
RDD
Resilient Distributed Dataset, базовая абстракция в Spark, представляющая неизменяемую распределенную коллекцию объектов.
Lineage
Граф зависимостей, описывающий последовательность преобразований, которые привели к созданию конкретного RDD.
Shuffle
Процесс перераспределения данных между узлами кластера для выполнения группировок или соединений.
Narrow Dependency
Тип зависимости, при котором один раздел результирующего RDD зависит только от одного раздела родительского RDD.
📊 Цифры
⚖️ Другая сторона
Apache Spark MapReduce Distributed Computing HDFS Warehouse-scale computers