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", какой режим развертывания мне следует использовать: кластер или клиент?