Документ 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):
Если я начну работу со 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
?
3 ответа
Нет, когда режим развертывания равен client
, программа драйвера не обязательно является главным узлом. Вы можете запустить spark-submit на своем ноутбуке, а программа драйверов будет работать на вашем ноутбуке.
Напротив, когда режим развертывания равен cluster
, тогда диспетчер кластера (главный узел) используется для поиска подчиненного устройства, имеющего достаточно доступных ресурсов для выполнения программы драйвера. В результате программа драйвера будет работать на одном из подчиненных узлов. Поскольку его выполнение делегировано, вы не можете получить результат от программы драйвера, он должен сохранять свои результаты в файле, базе данных и т. Д.
- Клиентский режим
- Хотите получить результат работы (динамический анализ)
- Легче для разработки / отладки
- Контролируйте, где выполняется ваша программа драйвера.
- Всегда работающее приложение: откройте средство запуска заданий Spark как службу REST или веб-интерфейс.
- Кластерный режим
- Проще выделить ресурсы (пусть решает хозяин): запустить и забыть.
- Следите за своей программой драйвера из главного веб-интерфейса, как и другие рабочие.
- Остановиться в конце: одно задание выполнено, выделенные ресурсы освобождены.
Думаю, это может помочь вам понять. В документе https: //spark.apache. org / docs / latest / submitting-applications.html В нем говорится: «Распространенной стратегией развертывания является отправка вашего приложения со шлюза, который физически совмещен с вашими рабочими машинами (например, главный узел в автономном кластере EC2). В этой настройке подходит режим клиента. В режиме клиента драйвер запускается непосредственно в процессе spark-submit, который действует как клиент для кластера. Входные и выходные данные приложения прикрепляются к консоли. Таким образом, этот режим особенно подходит для приложений, которые используют REPL (например, оболочку Spark ).
В качестве альтернативы, если ваше приложение отправлено с машины, удаленной от рабочих машин (например, локально на вашем ноутбуке), обычно используется кластерный режим, чтобы минимизировать сетевую задержку между драйверами и исполнителями. Обратите внимание, что режим кластера в настоящее время не поддерживается для кластеров Mesos или приложений Python ».
А как насчет HADR?
- В кластерном режиме YARN перезапускает драйвер, не убивая исполнителей.
- В клиентском режиме YARN автоматически убивает всех исполнителей, если ваш драйвер убит.
Похожие вопросы
Связанные вопросы
Новые вопросы
apache-spark
Apache Spark - это механизм распределенной обработки данных с открытым исходным кодом, написанный на Scala, предоставляющий пользователям унифицированный API и распределенные наборы данных как для пакетной, так и для потоковой обработки. Варианты использования Apache Spark часто связаны с машинным / глубоким обучением и обработкой графиков.