Документ 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?

53
blue-sky 2 Мар 2015 в 13:27

3 ответа

Лучший ответ

Нет, когда режим развертывания равен client, программа драйвера не обязательно является главным узлом. Вы можете запустить spark-submit на своем ноутбуке, а программа драйверов будет работать на вашем ноутбуке.

Напротив, когда режим развертывания равен cluster, тогда диспетчер кластера (главный узел) используется для поиска подчиненного устройства, имеющего достаточно доступных ресурсов для выполнения программы драйвера. В результате программа драйвера будет работать на одном из подчиненных узлов. Поскольку его выполнение делегировано, вы не можете получить результат от программы драйвера, он должен сохранять свои результаты в файле, базе данных и т. Д.

  • Клиентский режим
    • Хотите получить результат работы (динамический анализ)
    • Легче для разработки / отладки
    • Контролируйте, где выполняется ваша программа драйвера.
    • Всегда работающее приложение: откройте средство запуска заданий Spark как службу REST или веб-интерфейс.
  • Кластерный режим
    • Проще выделить ресурсы (пусть решает хозяин): запустить и забыть.
    • Следите за своей программой драйвера из главного веб-интерфейса, как и другие рабочие.
    • Остановиться в конце: одно задание выполнено, выделенные ресурсы освобождены.
97
Set 8 Мар 2017 в 18:39

Думаю, это может помочь вам понять. В документе https: //spark.apache. org / docs / latest / submitting-applications.html В нем говорится: «Распространенной стратегией развертывания является отправка вашего приложения со шлюза, который физически совмещен с вашими рабочими машинами (например, главный узел в автономном кластере EC2). В этой настройке подходит режим клиента. В режиме клиента драйвер запускается непосредственно в процессе spark-submit, который действует как клиент для кластера. Входные и выходные данные приложения прикрепляются к консоли. Таким образом, этот режим особенно подходит для приложений, которые используют REPL (например, оболочку Spark ).

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

7
ruoshui1126 27 Апр 2015 в 12:49

А как насчет HADR?

  • В кластерном режиме YARN перезапускает драйвер, не убивая исполнителей.
  • В клиентском режиме YARN автоматически убивает всех исполнителей, если ваш драйвер убит.
0
dorukayhan 8 Июл 2016 в 02:23