Spark

Senior

Как развернуть кластер Spark — Kubernetes, YARN или EMR — и что реально меняется?

Самому Spark всё равно, под каким менеджером кластера он работает — а вам будет не всё равно, в первый раз, когда что-то упадёт и понадобится знать, куда смотреть.

Читать на:
Управляемый EMR/Databricks Kubernetes YARN
Примерно сколько операционной ответственности каждый вариант оставляет вам, от большего к меньшему — не измеренная статистика.

Реальный движок исполнения Spark идентичен независимо от того, что планирует его executor'ы. Выбор менеджера кластера — это на самом деле выбор того, кто владеет провижинингом, масштабированием и восстановлением после сбоев: Spark или вы.

Что реально берёт на себя каждый вариант

YARN — исходный менеджер ресурсов Hadoop: зрелый, хорошо понятный всем, кто уже управлял Hadoop-кластером, но это отдельная система, которую вы сами провижините, патчите и мониторите, целиком отдельно от Spark. Kubernetes запускает executor'ы Spark как поды напрямую, а значит Spark использует ваш уже существующий инструментарий K8s (RBAC, мониторинг, автомасштабирование) вместо собственного — по-настоящему привлекательно, если K8s уже то, как всё остальное в вашей организации деплоится, и по-настоящему лишняя работа, если нет. Управляемые варианты (EMR, Databricks, Dataproc) полностью владеют слоем менеджера кластера — вы получаете API провижининга кластера и счёт, а не систему для патчинга.

# одна и та же задача, три мастера — вся разница для Spark в этой строке spark-submit --master yarn ... spark-submit --master k8s://https://my-cluster-api:6443 ... spark-submit --master yarn ... # EMR всё ещё говорит на YARN внутри

Где реально проявляются операционные различия

Не в самой Spark-задаче — в том, что ломается и кого будят по звонку, когда это происходит. Очереди capacity scheduler кластера YARN и здоровье узлов — проблема вашей команды по настройке и мониторингу; на Kubernetes это становится запросами/лимитами ресурсов подов и тем автомасштабировщиком, который вы подключили — возможно, его уже владеет ваша платформенная команда для всего остального. Управляемый EMR/Databricks убирает сбои узлов, патчинг AMI/образов и политику масштабирования за контракт поддержки — реальная ценность ценой потери части доступа к низкоуровневой настройке, которую дают самоуправляемые кластеры (кастомные параметры ядра, нестандартные конфигурации инстансов).

Решение, которое дорого обратить

Смена менеджера кластера позже — это не изменение конфига, это перепровижининг инфраструктуры, перепроверка границ IAM/сети и обычно период параллельного прогона для уверенности перед переключением. Код самой Spark-задачи почти не меняется (в основном только --master и настройки ресурсов, специфичные для менеджера кластера), что соблазняет считать выбор менеджера кластера обратимым — необратим именно окружающий операционный инструментарий и знания команды.

Вне области opti-pipe: движок правил читает event log завершённой задачи независимо от того, какой менеджер кластера её запускал — рекомендации, которые он выдаёт (размер executor'ов, число shuffle partition), одинаковы в любом случае, поскольку они о конфигурации самой задачи, а не об инфраструктуре под ней.

Посмотрите, как это выглядит на вашем собственном пайплайне.

Загрузите реальный event log Spark, run_results.json от dbt или экспорт метрик Flink — и получите конкретные рекомендации, которые нужно одобрить, а не ещё одно эмпирическое правило.