Spark narn cluster vs client - как выбрать, какой из них использовать?

Документы спарк имеют следующий параграф, который описывает разницу между клиентом пряжи и кластером пряжи:

Существует два режима развертывания, которые можно использовать для запуска приложений Spark на YARN. В режиме кластера драйвер Spark запускается в главном процессе приложения, которым управляет YARN в кластере, и клиент может уйти после запуска приложения. В режиме клиента драйвер запускается в клиентском процессе, а мастер приложения используется только для запроса ресурсов из YARN.

Я предполагаю, что есть два варианта по причине. Если так, как вы выбираете, какой использовать?

Пожалуйста, используйте факты, чтобы обосновать свой ответ так, чтобы этот вопрос и ответы отвечали требованиям stackoverflow.

Есть несколько аналогичных вопросов о стековом потоке, однако эти вопросы фокусируются на разнице между двумя подходами, но не фокусируются на том, когда один подход более подходит, чем другой.

Ответ 1

Распространенной стратегией развертывания является отправка вашего приложения с компьютера шлюза, который физически размещен вместе с вашими рабочими машинами (например, главный узел в автономном кластере EC2). В этой настройке режим клиента подходит. В режиме клиента драйвер запускается непосредственно в процессе spark-submit, который действует как клиент для кластера. Вход и выход приложения привязаны к консоли. Таким образом, этот режим особенно подходит для приложений, в которых используется REPL (например, Spark shell).

В качестве альтернативы, если ваше приложение отправлено с компьютера, удаленного от рабочих компьютеров (например, локально на вашем ноутбуке), обычно используется кластерный режим, чтобы минимизировать задержку в сети между драйверами и исполнителями. Обратите внимание, что режим кластера в настоящее время не поддерживается для кластеров Mesos. В настоящее время только YARN поддерживает кластерный режим для приложений Python. "- Отправка приложений

Из этого я понимаю, что обе стратегии используют кластер для распределения задач; Разница заключается в том, где запускается "программа драйвера": локально с помощью spark-submit или также в кластере.

Когда вы должны использовать любой из них, подробно описано в приведенной выше цитате, но я также сделал другое: для больших jar я использовал rsync чтобы скопировать их в кластер (или даже в мастер-узел) со скоростью, в 100 раз превышающей скорость сети, а затем представлен из кластера. Это может быть лучше, чем "режим кластера" для больших банок. Обратите внимание, что режим клиента, вероятно, не передает банку мастеру. В этот момент разница между 2 минимальна. Вероятно, режим клиента лучше, когда программа драйвера простаивает большую часть времени, чтобы в полной мере использовать ядра на локальной машине и, возможно, избежать передачи jar на мастер (даже на интерфейсе обратной связи большой jar занимает довольно много секунд), А в режиме клиента вы можете перенести (rsync) банку на любой узел кластера.

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

Заключение:

  • Подводя итог, если я нахожусь в одной локальной сети с кластером, я бы использовал режим клиента и отправил его со своего ноутбука. Если кластер находится далеко, я бы либо отправил локально с режимом кластера, либо rsync jar на удаленный кластер и отправил его туда, в режиме клиента или кластера, в зависимости от того, насколько загружена программа драйвера на ресурсах. *

AFAIK Программа драйвера, работающая в кластере, менее уязвима для удаленных отключений, приводящих к сбою драйвера и всего искрового задания. Это особенно полезно для долго выполняющихся заданий, таких как потоковые рабочие нагрузки типа обработки.

Ответ 2

Spark Jobs, работающие на YARN

При запуске Spark на YARN каждый исполнитель Spark работает как контейнер YARN. Если MapReduce планирует контейнер и запускает JVM для каждой задачи, Spark размещает несколько задач в одном контейнере. Такой подход позволяет на несколько порядков быстрее запускать задачи.

Spark поддерживает два режима работы на YARN: режим " пряжа-кластер " и режим " пряжа-клиент ". В общих чертах, режим пряжи-кластера имеет смысл для производственных заданий, а режим пряжи-клиента имеет смысл для интерактивного и отладочного использования, когда вы хотите, чтобы ваши приложения немедленно выводили результаты.

Чтобы понять разницу, нужно понять концепцию YARNs Application Master. В YARN каждый экземпляр приложения имеет процесс Application Master, который является первым контейнером, запущенным для этого приложения. Приложение отвечает за запрос ресурсов у ResourceManager и, когда выделяет их, говорит NodeManager запускать контейнеры от его имени. Мастера приложений устраняют необходимость в активном клиенте - процесс, запускающий приложение, может исчезнуть, и продолжается координация от процесса, управляемого YARN, работающим в кластере.

В режиме кластера пряжи драйвер работает в Application Master. Это означает, что один и тот же процесс отвечает как за управление приложением, так и за запрос ресурсов у YARN, и этот процесс выполняется внутри контейнера YARN. Клиент, который запускает приложение, не должен оставаться в течение всей своей жизни.

enter image description here

режим кластера пряжи

Режим кластера пряжи не очень подходит для интерактивного использования Spark, но режим клиента пряжи есть. Приложения Spark, требующие ввода данных пользователем, такие как spark-shell и PySpark, нуждаются в драйвере Spark для запуска внутри клиентского процесса, который запускает приложение Spark. В режиме клиента-пряжи Application Master просто присутствует, чтобы запросить контейнеры-исполнители из YARN. Клиент связывается с этими контейнерами для планирования работы после их запуска:

enter image description here

режим пряжи-клиента

Эта таблица предлагает краткий список различий между этими режимами: введите описание изображения здесь

Ссылка: https://blog.cloudera.com/blog/2014/05/apache-spark-resource-management-and-yarn-app-models/

Ответ 3

Когда я использую aws cli для создания кластера EMR и на шаге во время инициализации присутствует "spark-submit", какой режим развертывания мне следует использовать: кластер или клиент?