Отправка Spark 2.4.0 в режиме кластера - зачем нужен сервер отправки REST? - PullRequest
0 голосов
/ 19 марта 2019

У меня есть автономный spark 2.4.0 кластер, в котором мне нужно развернуть приложение, передавая некоторые дополнительные параметры Java (как для драйвера, так и для исполнителей).Для этого я использую spark.driver.extraJavaOptions и spark.executor.extraJavaOptions, описанные здесь .Он отлично работает в режиме клиента, однако в кластерном режиме возникают проблемы - переменные не передаются драйверу (для исполнителей это все еще нормально).Я сталкивался с подобными проблемами и для spark.driver.extraClassPath, поэтому я думаю, что проблема более общая.

В любом случае, мне удалось найти решение для этого:

  1. Нам нужноотправить с использованием сервера отправки REST (обычно работающего на порту 6066, то есть spark: // localhost: 6066)
  2. Чтобы сделать это возможным, нам нужно явно включить отправку REST с использованием свойства spark.master.rest.enabled (с версии 2.4.0 это falseпо умолчанию true в более старых выпусках - см. PR )

Вопросы:

  1. Мне не удалось найти в документации, что мына самом деле нужно развернуть через REST при использовании режима кластера, чтобы опция spark.driver.extraJavaOptions (и аналогичная) работала должным образом. Официальный документ не упоминает об этом.Задокументировано ли это где-нибудь еще, или я упускаю что-то очевидное?

  2. Я полагаю, отправка в режиме кластера - довольно распространенный случай использования.Если для правильной работы требуется использование сервера отправки REST (пожалуйста, исправьте меня, если я ошибаюсь), почему он был отключен по умолчанию?

  3. Когда я пытаюсь выполнить отправку обычным способом (порт 7077)) с spark.master.rest.enabled установленным в true, я получаю следующую информацию в журналах:

    Предупреждение: мастер конечных точек: // localhost: 7077 не был сервером REST.Вместо этого устаревший шлюз представления.

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

Когда я пытаюсь выполнить развертывание в режиме клиента через REST, всегда происходит сбой с ошибкой StandaloneAppClient$ClientEndpoint:87 - Failed to connect to master localhost:6066 Означает ли это, что мы всегда должны переключать порт при изменении режима развертывания?Какой смысл, почему у нас не может быть одного способа развернуть наше приложение?

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

Похоже, что это ошибка, сообщенная в ИСКРА Jira

PR с исправлением был поднят, надеюсь, скоро будет объединен

0 голосов
/ 20 марта 2019

Я далеко не эмигрант, я также еще не работал с 2.4, но я поделюсь тем, что знаю.

Я не помню, чтобы у меня были проблемы с путем к классу, но это не таксказать много.Я в основном использую остальные API и в режиме кластера.Просто чтобы быть уверенным ... банки начинаются с "local: /", верно?

AFAIK, остальное - это «Spark скрытый API», который может объяснить «не удается найти в документации».

По моему мнению, остальной API не защищен каким-либо образом, который можетбыть причиной того, что это было скрыто?Но я рад слышать, что, по крайней мере, теперь он отключен по умолчанию, я думаю, что он был включен по умолчанию в более ранних версиях.

«Откат к устаревшему шлюзу отправки» звонит в звонок, так что я думаю, что этовсе в порядке (не было проблем с дополнительным путем к классу)

Я не думаю, что rest API поддерживает режим клиента.Как это может?Причал работает на главном, передавая запрос на отправку.Я не вижу, как он теперь может запустить процесс драйвера на вызывающем хосте?

Что касается отсутствующих jar-файлов в classpath, вы пробовали "spark.jars"?

Если все не удается... Попробуйте убер банку: -)

...