Подключение к удаленному мастеру на автономном искровом

Я запускаю Spark в автономном режиме на моем удаленном сервере, выполнив следующие шаги:

  • cp spark-env.sh.template spark-env.sh
  • добавить к spark-env.sh SPARK_MASTER_HOST=IP_OF_MY_REMOTE_SERVER
  • и выполните следующие команды для автономного режима: sbin/start-master.sh sbin/start-slave.sh spark://IP_OF_MY_REMOTE_SERVER:7077

И я пытаюсь подключиться к удаленному хозяину:

val spark = SparkSession.builder()
  .appName("SparkSample")
  .master("spark://IP_OF_MY_REMOTE_SERVER:7077")
  .getOrCreate()

И я получаю следующие ошибки:

ERROR SparkContext: Error initializing SparkContext.
java.net.BindException: Cannot assign requested address: Service 'sparkDriver' failed after 16 retries!

и предупреждения:

    WARN Utils: Service 'sparkMaster' could not bind on port 7077. Attempting port 7078.
.....
    WARN Utils: Service 'sparkMaster' could not bind on port 7092. Attempting port 7092.

Ответ 1

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

Альтернатива:

1) Livy - теперь проект Apache! http://livy.io или http://livy.incubator.apache.org/

2) Сервер Spark Job - https://github.com/spark-jobserver/spark-jobserver

Подобный Q & A: удаленно отсылает задания на Spark EC2

Если вы настаиваете на подключении без библиотек, таких как Livy, тогда открывайте порты, чтобы обеспечить связь. Сеть Spark comm docs: http://spark.apache.org/docs/latest/security.html#configuring-ports-for-network-security

Поскольку вы не используете YARN (для вашего автономного дизайна), предыдущая ссылка на удаленную отправку YARN может быть неактуальной.

Ответ 2

Документация Spark гласит

spark.driver.port

(random)    Port for the driver to listen on. This is used for communicating with the executors and the standalone Master.

spark.port.maxRetries

16  Maximum number of retries when binding to a port before giving up. When a port is given a specific value (non 0), each subsequent retry will increment the port used in the previous attempt by 1 before retrying. This essentially allows it to try a range of ports from the start port specified to port + maxRetries.

Вам необходимо убедиться, что Spark Master запущен на удаленном хосте на порту 7077. Также брандмауэр должен разрешать подключения к нему.

и

Кроме того, вам необходимо скопировать файл core-site.xml из вашего кластера в HADOOP_CONF_DIR, чтобы служба Spark могла считывать настройки хаоса, такие как IP-адрес вашего мастера. Прочитайте здесь для более...

Надеюсь, что это поможет!

Ответ 3

Исправляемый сервер задач кажется очень заманчивым, но имеет некоторые проблемы. Я бы рекомендовал "скрытую" искру REST api! Это не задокументировано, но это супер легко и гораздо удобнее, В отличие от сервера заданий, который требует обслуживания (еще одна вещь, о которой вам нужно беспокоиться и устранять неполадки - и у нее есть проблемы) Также у вас есть отличная библиотека для этого - https://github.com/ywilkof/spark-jobs-rest-client