Служба Spark submit «Драйвер» не может привязаться к ошибке порта

Я использовал следующую команду для запуска искрового Java-примера подсчета слов: -

time spark-submit --deploy-mode cluster --master spark://192.168.0.7:6066 --class org.apache.spark.examples.JavaWordCount /home/pi/Desktop/example/new/target/javaword.jar /books_50.txt 

Когда я запускаю его, выводится следующее: -

Running Spark using the REST application submission protocol.
16/07/18 03:55:41 INFO rest.RestSubmissionClient: Submitting a request to launch an application in spark://192.168.0.7:6066.
16/07/18 03:55:44 INFO rest.RestSubmissionClient: Submission successfully created as driver-20160718035543-0000. Polling submission state...
16/07/18 03:55:44 INFO rest.RestSubmissionClient: Submitting a request for the status of submission driver-20160718035543-0000 in spark://192.168.0.7:6066.
16/07/18 03:55:44 INFO rest.RestSubmissionClient: State of driver driver-20160718035543-0000 is now RUNNING.
16/07/18 03:55:44 INFO rest.RestSubmissionClient: Driver is running on worker worker-20160718041005-192.168.0.12-42405 at 192.168.0.12:42405.
16/07/18 03:55:44 INFO rest.RestSubmissionClient: Server responded with CreateSubmissionResponse:
{
  "action" : "CreateSubmissionResponse",
  "message" : "Driver successfully submitted as driver-20160718035543-0000",
  "serverSparkVersion" : "1.6.2",
  "submissionId" : "driver-20160718035543-0000",
  "success" : true
}

Я проверил журнал конкретного рабочего (192.168.0.12), и он говорит:

Launch Command: "/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/bin/java" "-cp" "/opt/spark/conf/:/opt/spark/lib/spark-assembly-1.6.2-hadoop2.6.0.jar:/opt/spark/lib/datanucleus-api-jdo-3.2.6.jar:/opt/spark/lib/datanucleus-core-3.2.10.jar:/opt/spark/lib/datanucleus-rdbms-3.2.9.jar" "-Xms1024M" "-Xmx1024M" "-Dspark.driver.supervise=false" "-Dspark.app.name=org.apache.spark.examples.JavaWordCount" "-Dspark.submit.deployMode=cluster" "-Dspark.jars=file:/home/pi/Desktop/example/new/target/javaword.jar" "-Dspark.master=spark://192.168.0.7:7077" "-Dspark.executor.memory=10M" "org.apache.spark.deploy.worker.DriverWrapper" "spark://[email protected]:42405" "/opt/spark/work/driver-20160718035543-0000/javaword.jar" "org.apache.spark.examples.JavaWordCount" "/books_50.txt"
========================================

log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
16/07/18 04:10:58 INFO SecurityManager: Changing view acls to: pi
16/07/18 04:10:58 INFO SecurityManager: Changing modify acls to: pi
16/07/18 04:10:58 INFO SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(pi); users with modify permissions: Set(pi)
16/07/18 04:11:00 WARN Utils: Service 'Driver' could not bind on port 0. Attempting port 1.
16/07/18 04:11:00 WARN Utils: Service 'Driver' could not bind on port 0. Attempting port 1.
16/07/18 04:11:00 WARN Utils: Service 'Driver' could not bind on port 0. Attempting port 1.
16/07/18 04:11:00 WARN Utils: Service 'Driver' could not bind on port 0. Attempting port 1.
16/07/18 04:11:00 WARN Utils: Service 'Driver' could not bind on port 0. Attempting port 1.
16/07/18 04:11:00 WARN Utils: Service 'Driver' could not bind on port 0. Attempting port 1.
16/07/18 04:11:00 WARN Utils: Service 'Driver' could not bind on port 0. Attempting port 1.
16/07/18 04:11:00 WARN Utils: Service 'Driver' could not bind on port 0. Attempting port 1.
16/07/18 04:11:00 WARN Utils: Service 'Driver' could not bind on port 0. Attempting port 1.
16/07/18 04:11:00 WARN Utils: Service 'Driver' could not bind on port 0. Attempting port 1.
16/07/18 04:11:00 WARN Utils: Service 'Driver' could not bind on port 0. Attempting port 1.
16/07/18 04:11:00 WARN Utils: Service 'Driver' could not bind on port 0. Attempting port 1.
16/07/18 04:11:00 WARN Utils: Service 'Driver' could not bind on port 0. Attempting port 1.
16/07/18 04:11:00 WARN Utils: Service 'Driver' could not bind on port 0. Attempting port 1.
16/07/18 04:11:00 WARN Utils: Service 'Driver' could not bind on port 0. Attempting port 1.
16/07/18 04:11:00 WARN Utils: Service 'Driver' could not bind on port 0. Attempting port 1.
Exception in thread "main" java.net.BindException: Cannot assign requested address: Service 'Driver' failed after 16 retries! Consider explicitly setting the appropriate port for the service 'Driver' (for example spark.ui.port for SparkUI) to an available port or increasing spark.port.maxRetries.
    at sun.nio.ch.Net.bind0(Native Method)
    at sun.nio.ch.Net.bind(Net.java:433)
    at sun.nio.ch.Net.bind(Net.java:425)
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
    at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:125)
    at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:485)
    at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1089)
    at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:430)
    at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:415)
    at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:903)
    at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:198)
    at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:348)
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:357)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:357)
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:111)
    at java.lang.Thread.run(Thread.java:745)

Мой файл spark-env.sh (для мастера) содержит: -

export SPARK_MASTER_WEBUI_PORT="8080"
export SPARK_MASTER_IP="192.168.0.7"
export SPARK_EXECUTOR_MEMORY="10M"

Мой файл spark-env.sh (для рабочего) содержит: -

export SPARK_WORKER_WEBUI_PORT="8080"
export SPARK_MASTER_IP="192.168.0.7"
export SPARK_EXECUTOR_MEMORY="10M"

Пожалуйста помоги...!!


person itsamineral    schedule 18.07.2016    source источник
comment
где вы когда-нибудь смогли решить этот вопрос? у меня точно такая же проблема со искрой v2.0.0.   -  person yee379    schedule 18.09.2016
comment
Привет, я не смог найти никаких зацепок по этому конкретному вопросу. Поэтому я начал стримить пример Python для подсчета слов. Пожалуйста, дайте мне знать, если вы найдете обходной путь.   -  person itsamineral    schedule 19.09.2016


Ответы (10)


У меня была такая же проблема при попытке запустить оболочку, и я смог заставить ее работать, установив переменную среды SPARK_LOCAL_IP. Вы можете назначить это из командной строки при запуске оболочки:

SPARK_LOCAL_IP=127.0.0.1 ./bin/spark-shell

Для более постоянного решения создайте файл spark-env.sh в каталоге conf вашего корня Spark. Добавьте следующую строку:

SPARK_LOCAL_IP=127.0.0.1

Дайте разрешения на выполнение скрипту, используя chmod +x ./conf/spark-env.sh, и это установит эту переменную среды по умолчанию.

person Simon Guest    schedule 08.12.2016
comment
Выполнение export для SPARK_LOCAL_IP перед запуском скрипта сработало для меня - чтобы быстро проверить, сработает это или нет. - person Chaitra Suresh; 31.10.2017

Я использую Maven/SBT для управления зависимостями, а ядро ​​Spark содержится в файле jar.

Вы можете переопределить SPARK_LOCAL_IP во время выполнения, установив «spark.driver.bindAddress» (здесь, в Scala):

val config = new SparkConf()
config.setMaster("local[*]")
config.setAppName("Test App")
config.set("spark.driver.bindAddress", "127.0.0.1")
val sc = new SparkContext(config)
person David Steinmetz    schedule 05.04.2017

У меня также была эта проблема.

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

Имя моей системы (uname -s) показывает, что моя система называется «sparkmaster». В моем файле /etc/hosts я назначил фиксированный IP-адрес для системы sparkmaster как «192.168.1.70». Были дополнительные фиксированные IP-адреса для sparknode01 и sparknode02 в ... 1,71 и ... 1,72 соответственно.

Из-за некоторых других проблем, которые у меня были, мне нужно было изменить все мои сетевые адаптеры на DHCP. Это означало, что они получали такие адреса, как 192.168.90.123. Адреса DHCP не находились в той же сети, что и диапазон ...1.70, и маршрут не был настроен.

Когда запускается искра, кажется, что она пытается подключиться к хосту, указанному в uname (т.е. sparkmaster в моем случае). Это был IP-адрес 192.168.1.70, но подключиться к нему было невозможно, потому что этот адрес находился в недоступной сети.

Мое решение состояло в том, чтобы изменить один из моих Ethernet-адаптеров обратно на фиксированный статический адрес (например, 192.168.1.70) и вуаля - проблема решена.

Таким образом, проблема заключается в том, что когда spark запускается в «локальном режиме», он пытается подключиться к системе, названной в честь имени вашей системы (а не локального хоста). Я думаю, это имеет смысл, если вы хотите настроить кластер (как это сделал я), но это может привести к приведенному выше запутанному сообщению. Возможно, размещение имени хоста вашей системы в записи 127.0.0.1 в /etc/hosts также может решить эту проблему, но я не пробовал.

person GMc    schedule 30.04.2018
comment
Та же проблема — имя хоста было 45131, которое искра рассматривает как IP. - person user239558; 02.05.2018
comment
LOL, только числовое имя хоста может вызвать всевозможные проблемы. - person GMc; 04.05.2018

Вам нужно ввести имя хоста в файл /etc/hosts. Что-то вроде:

127.0.0.1   localhost "hostname"
person Manav Garg    schedule 18.07.2016
comment
Спасибо за предложение, Манав. Я пробовал добавлять/удалять/редактировать строку в файле hosts, но это ничего не меняет. - person itsamineral; 19.07.2016
comment
Я почти уверен, что это связано с настройками вашей сети, а не с настройкой искры. Я получил ту же ошибку и смог решить ее, добавив запись в файл hosts. Просто чтобы быть уверенным, вам нужно заменить имя хоста в последнем cmd на ваше имя хоста (введите $hostname cmd в вашей оболочке), также без кавычек - person Manav Garg; 19.07.2016
comment
Это основная причина. - person petertc; 17.01.2018

Возможно, это дубликат Spark 1.2. .1 не работает spark-submit в автономном кластерном режиме

Я пробовал те же шаги, но смог запустить задание. Пожалуйста, опубликуйте полный spark-env.sh и spark-defaults, если это возможно.

person Ravi    schedule 18.07.2016

У меня была эта проблема, и это из-за смены реального IP-адреса на мой IP-адрес в /etc/hosts.

person ParisaN    schedule 09.05.2019

Эта проблема связана только с IP-адресом. Сообщения об ошибках в файле журнала не являются информативными. проверьте, выполнив следующие 3 шага:

  1. проверьте свой IP-адрес — можно проверить с помощью команд ifconfig или ip. Если ваша услуга не является государственной услугой. IP-адреса с 192.168 должны быть достаточно хорошими. 127.0.0.1 нельзя использовать, если вы планируете кластер.

  2. проверьте свою переменную окружения SPARK_MASTER_HOST - проверьте, нет ли опечаток в имени переменной или фактическом IP-адресе.

    окружение | группа SPARK_

  3. проверьте, свободен ли порт, который вы планируете использовать для sparkMaster, с помощью команды netstat. Не используйте порт ниже 1024. Например:

    нетстат -а | 9123

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

person vernekap    schedule 28.09.2019

Используйте, как показано ниже, в кадрах данных

val spark=SparkSession.builder.appName("BinarizerExample").master("local[*]").config("spark.driver.bindAddress", "127.0.0.1").getOrCreate()

person Sushruth    schedule 05.02.2020

Первый вариант:-

Следующие шаги могут помочь:

Get your hostname by using "hostname" command.

 xxxxxx.ssssss  (e) base  ~  hostname
 xxxxxx.ssssss.net

Сделайте запись в файле /etc/hosts для вашего имени хоста, если оно отсутствует, следующим образом:

127.0.0.1      xxxxxx.ssssss.net

Второй вариант:-

вы можете установить значение spark.driver.bindAddress в файле spark.conf

spark.driver.bindAddress=127.0.0.1

Спасибо!!

person Devbrat Shukla    schedule 03.04.2021

Я решил эту проблему, изменив подчиненный файл. его spark-2.4.0-bin-hadoop2.7/conf/slave, пожалуйста, проверьте конфигурацию。

person user9162255    schedule 10.04.2019