Какие условия должен использовать режим развертывания кластера вместо клиента?
Документ https://spark.apache.org/docs/1.1.0/submitting-applications.html
описывает режим развертывания как:
--deploy-mode: Whether to deploy your driver on the worker nodes (cluster) or locally as an external client (client) (default: client)
Используя эту диаграмму fig1
в качестве руководства (взято из http://spark.apache.org/docs/1.2.0/cluster-overview.html):
![enter image description here]()
Если я начинаю работу Spark:
./bin/spark-submit \
--class com.driver \
--master spark://MY_MASTER:7077 \
--executor-memory 845M \
--deploy-mode client \
./bin/Driver.jar
Тогда Driver Program
будет MY_MASTER
, как указано в fig1
MY_MASTER
Если вместо этого я использую --deploy-mode cluster
, тогда Driver Program
будет использоваться совместно с рабочими узлами? Если это правда, значит ли это, что поле Driver Program
в fig1
может быть отброшено (поскольку оно больше не используется), поскольку SparkContext
также будет использоваться совместно с рабочими узлами?
Какие условия следует использовать cluster
вместо client
?
Ответы
Ответ 1
Нет, когда режим развертывания client
, программа-драйвер не обязательно является основным node. Вы можете запускать искру - отправить на свой ноутбук, и программа драйвера будет работать на вашем ноутбуке.
Наоборот, когда режим развертывания cluster
, менеджер кланов (master node) используется для поиска подчиненного устройства, имеющего достаточно ресурсов для выполнения программы драйвера. В результате программа драйвера будет работать на одном из подчиненных узлов. Поскольку его выполнение делегировано, вы не можете получить результат из Программы драйверов, он должен хранить свои результаты в файле, базе данных и т.д.
- Режим клиента
- Хотите получить результат работы (динамический анализ)
- Легкость разработки/отладки
- Управление, в котором работает программа драйвера.
- Всегда запускать приложение: выставить свою программу запуска Spark в качестве службы REST или веб-интерфейса.
- Режим кластеров
- Легче для выделения ресурсов (пусть главный решает): Огонь и забыть
- Контролируйте свою программу драйверов с веб-интерфейса мастера, как и другие работники.
- Остановить в конце: одно задание завершено, выделенные ресурсы освобождены.
Ответ 2
Я думаю, что это может помочь вам понять. В документе https://spark.apache.org/docs/latest/submitting-applications.html
В нем говорится: "Общая стратегия развертывания заключается в том, чтобы отправить ваше приложение с шлюзовой машины, которая физически расположена совместно с вашими рабочими машинами (например, Master node в автономном кластере EC2). В этой настройке подходит режим клиента. mode, драйвер запускается непосредственно в процессе искра-отправки, который действует как клиент для кластера. Ввод и вывод приложения подключен к консоли. Таким образом, этот режим особенно подходит для приложений, которые включают REPL (например, Искры оболочки).
В качестве альтернативы, если ваше приложение отправлено с компьютера далеко от рабочих компьютеров (например, локально на вашем ноутбуке), обычно используется режим кластера для минимизации задержек в сети между драйверами и исполнителями. Обратите внимание: режим кластеров в настоящее время не поддерживается для кластеров Mesos или приложений Python.
Ответ 3
Как насчет HADR?
- В режиме кластера YARN перезапускает драйвер, не убивая исполнителей.
- В режиме клиента YARN автоматически убивает всех исполнителей, если ваш драйвер убит.