Я запускаю Spark 2.0 в автономном режиме, успешно настроил его для запуска на сервере, а также смог настроить Ipython Kernel PySpark как вариант в Jupyter Notebook. Все работает отлично, но я столкнулся с проблемой, что для каждого ноутбука, который я запускаю, все мои 4 работника назначены на это приложение. Поэтому, если другой человек из моей команды попытается запустить еще один ноутбук с ядром PySpark, он просто не работает, пока я не остановлю первый ноутбук и не освобожу всех сотрудников.Spark 2.0 Автономный режим Ошибка запуска динамического распределения ресурсов
Чтобы решить эту проблему, я стараюсь следовать инструкциям от Spark 2.0 Documentation. Так, на мой $SPARK_HOME/conf/spark-defaults.conf
у меня есть следующие строки:
spark.dynamicAllocation.enabled true
spark.shuffle.service.enabled true
spark.dynamicAllocation.executorIdleTimeout 10
Кроме того, на $SPARK_HOME/conf/spark-env.sh
у меня есть:
export SPARK_WORKER_MEMORY=1g
export SPARK_EXECUTOR_MEMORY=512m
export SPARK_WORKER_INSTANCES=4
export SPARK_WORKER_CORES=1
Но когда я пытаюсь запустить рабочих, используя $SPARK_HOME/sbin/start-slaves.sh
, только первый рабочий успешно запущен. Бревно с первым рабочим в конечном итоге, как это:
16/11/24 13:32:06 INFO Worker: Successfully registered with master spark://cerberus:7077
Но бревно из рабочих 2-4 показать мне эту ошибку:
INFO ExternalShuffleService: Starting shuffle service on port 7337 with useSasl = false 16/11/24 13:32:08 ERROR Inbox: Ignoring error java.net.BindException: Address already in use
Это кажется (мне), что первый рабочий успешно запускается shuffle-service в порту 7337, но рабочие 2-4 «не знают» об этом и пытаются запустить еще одну службу тасования в том же порту.
Проблема возникает и для всех работников (1-4), если я впервые запустил службу тасования (используя $SPARK_HOME/sbin/start-shuffle-service.sh
), а затем попытаюсь запустить всех рабочих ($SPARK_HOME/sbin/start-slaves.sh
).
Есть ли возможность обойти это? Чтобы все рабочие были работоспособны, если есть запущенная служба переадресации и подключиться к ней вместо попытки создать новую услугу?