
This tutorial demonstrates the Java gateway process exited before sending the driver its port number
error in Java.
Java Gateway Process Exited Before Sending the Driver Its Port Number
PySpark
is used to write Spark
applications using Python APIs and provides a shell for interactively analyzing the data in a distributed environment.
While running the PySpark
application in PySpark Shell
, spark-submit
, or even from spyder
the error Pyspark: Exception: Java gateway process exited before sending the driver its port number
can occur.
If you want to run PySpark
on your Windows, Mac, or Linux, you must install Java on your machine because PySpark
is usually considered to work as a Python framework. The reason for this error to occur is that either you haven’t set the JAVA_HOME
or PYSPARK_SUBMIT_ARGS
.
Here are the solutions to solve the Pyspark: Exception: Java gateway process exited before sending the driver its port number
error.
Install Open JDK or Oracle JDK
You must wonder why you need Java to run PySpark
. It is because the Spark
is basically written in Scala
, but later the industry adopted its API, so the PySpark
was released for Python using the Py4J
, as Py4J
is a Java Library that is why Java is required to run PySpark
.
Py4J
is integrated into PySpark
, allowing Python to interface with JVM objects.
We can use the following command to install the OpenJDK.
# Installing Open JDK
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-11-jdk
# Installing Oracle JDK
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
Once the JDK is installed, you need to set the JAVA_HOME
path and follow the steps below.
-
Find your JDK path; if Java is installed, the path will be
/usr/lib/jvm/java-1.x.x-openjdk
. -
Now run the following command to set the
JAVA_HOME
path.export JAVA_HOME=/usr/lib/jvm/java-1.x.x-openjdk
-
The command will set the
JAVA_HOME
path to verify runecho $JAVA_HOME
, showing the Java installation path.
The above commands are for the Linux environments for Windows. The installers can be downloaded from here:
- OpenJDK
- Oracle
To set the JAVA_HOME
at Windows, follow the steps below.
-
Search
Environment Variables
in the Windows search bar. -
Open
Edit the system environment variables
. -
Click the
Environment Variables
button to open environment variables. -
In the system variables, click
New
. -
The name will be
JAVA_HOME
. -
The value will be the installation path, for example,
C:Program FilesJavajdk-17.0.2
. -
After putting the name and value, click
OK
andApply changes
.
Set PYSPARK_SUBMIT_ARGS
Most of the time, the error Pyspark: Exception: Java gateway process exited before sending the driver its port number
occurs when the PYSPARK_SUBMIT_ARGS
is not set. Use the following command to set the PYSPARK_SUBMIT_ARGS
.
export PYSPARK_SUBMIT_ARGS="--master local[3] pyspark-shell"
The above command will set the PYSPARK_SUBMIT_ARGS
using the master
. Following both solutions will solve the problem.
Problem: While running PySpark application through spark-submit, Spyder or even from PySpark shell I am getting Pyspark: Exception: Java gateway process exited before sending the driver its port number.
In order to run PySpark (Spark with Python) you would need to have Java installed on your Mac, Linux or Windows, without Java installation & not having JAVA_HOME
environment variable set with Java installation path or not having PYSPARK_SUBMIT_ARGS
, you would get Exception: Java gateway process exited before sending the driver its port number.
Set PYSPARK_SUBMIT_ARGS
Set PYSPARK_SUBMIT_ARGS with master, this resolves Exception: Java gateway process exited before sending the driver its port number.
export PYSPARK_SUBMIT_ARGS="--master local[3] pyspark-shell"
vi ~/.bashrc
, add the above line and reload the bashrc file using source ~/.bashrc
Incase if issue still doesn’t resolve, check your Java installation and JAVA_HOME
environment variable.
Install Open JDK
Why you need Java to run PySpark?
Spark basically written in Scala and later on due to its industry adaptation it’s API PySpark released for Python using Py4J. Py4J
is a Java library that is integrated within PySpark and allows python to dynamically interface with JVM objects, hence to run PySpark you also need Java to be installed along with Python, and Apache Spark.
Use below commands to install OpenJDK or Oracle JDK on Linux Ubuntu.
# To Install Open JDK
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-11-jdk
# To Install Oracke JDK varsion 8
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
Set JAVA_HOME Environment Variable
Now export JAVA_HOME with the java installation directory.
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
vi ~/.bashrc
, add the above line and reload the bashrc file using source ~/.bashrc
Happy Learning
Related Articles
- PySpark “ImportError: No module named py4j.java_gateway” Error
- How to Import PySpark in Python Script
- PySpark install on Windows
- PySpark NOT isin() or IS NOT IN Operator
- PySpark alias() Column & DataFrame Examples
- Fonctions filter where en PySpark | Conditions Multiples
NNK
SparkByExamples.com is a Big Data and Spark examples community page, all examples are simple and easy to understand and well tested in our development environment Read more ..
Я пытаюсь запустить pyspark на моем macbook воздухе. Когда я пытаюсь запустить его, я получаю сообщение об ошибке:
Exception: Java gateway process exited before sending the driver its port number
когда sc = SparkContext() вызывается при запуске. Я попытался выполнить следующие команды:
./bin/pyspark
./bin/spark-shell
export PYSPARK_SUBMIT_ARGS="--master local[2] pyspark-shell"
безрезультатно. Я также посмотрел здесь:
Spark + Python — Процесс Java-шлюза завершился перед отправкой драйвера его номера порта?
но на этот вопрос никогда не было ответа. Пожалуйста помоги! Спасибо.
Ответ 1
это поможет вам
Одно из решений добавляет pyspark-shell к переменной среды оболочки PYSPARK_SUBMIT_ARGS:
export PYSPARK_SUBMIT_ARGS="--master local[2] pyspark-shell"
Существует изменение в python/pyspark/java_gateway.py, которое требует, чтобы PYSPARK_SUBMIT_ARGS включал pyspark-shell, если переменная PYSPARK_SUBMIT_ARGS задана пользователем.
Ответ 2
Одна из возможных причин: JAVA_HOME не установлен, потому что java не установлен.
Я столкнулся с той же проблемой. В нем говорится:
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/spark/launcher/Main : Unsupported major.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:643)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:296)
at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:406)
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/opt/spark/python/pyspark/conf.py", line 104, in __init__
SparkContext._ensure_initialized()
File "/opt/spark/python/pyspark/context.py", line 243, in _ensure_initialized
SparkContext._gateway = gateway or launch_gateway()
File "/opt/spark/python/pyspark/java_gateway.py", line 94, in launch_gateway
raise Exception("Java gateway process exited before sending the driver its port number")
Exception: Java gateway process exited before sending the driver its port number
при sc = pyspark.SparkConf()
. Я решил это, запустив
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
который находится в https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-get-on-ubuntu-16-04
Ответ 3
Имел ту же проблему с моей iphython ноутбуком (IPython 3.2.1) в Linux (ubuntu).
В моем случае отсутствовал основной URL в среде $PYSPARK_SUBMIT_ARGS (при условии, что вы используете bash):
export PYSPARK_SUBMIT_ARGS="--master spark://<host>:<port>"
например.
export PYSPARK_SUBMIT_ARGS="--master spark://192.168.2.40:7077"
Вы можете поместить это в свой .bashrc файл. Вы получаете правильный URL-адрес в журнале для источника искры (местоположение этого журнала сообщается при запуске мастера с/sbin/start_master.sh).
Ответ 4
Потратив часы и часы на множество различных решений, я могу подтвердить, что Java 10 SDK вызывает эту ошибку. На Mac, пожалуйста, перейдите в /Library/Java/JavaVirtualMachines, затем запустите эту команду, чтобы полностью удалить Java JDK 10:
sudo rm -rf jdk-10.jdk/
После этого загрузите JDK 8, тогда проблема будет решена.
Ответ 5
Я получил ту же ошибку Java gateway process exited......port number
, хотя я правильно установил PYSPARK_SUBMIT_ARGS
. Я запускаю Spark 1.6 и пытаюсь заставить pyspark работать с IPython4/Jupyter (ОС: ubuntu в качестве гостевой системы VM).
Пока я получил это исключение, я заметил, что был создан hs_err _ *. журнал, и он начинался с:
There is insufficient memory for the Java Runtime Environment to continue. Native memory allocation (malloc) failed to allocate 715849728 bytes for committing reserved memory.
Итак, я увеличил память, выделенную для моего ubuntu через настройку VirtualBox и перезапустил гостевой ubuntu. Затем это исключение Java gateway
исчезает, и все работает нормально.
Ответ 6
Я получил тот же Exception: Java gateway process exited before sending the driver its port number
в Cloudera VM при попытке запустить IPython с поддержкой CSV с синтаксической ошибкой:
PYSPARK_DRIVER_PYTHON=ipython pyspark --packages com.databricks:spark-csv_2.10.1.4.0
выдает ошибку, а:
PYSPARK_DRIVER_PYTHON=ipython pyspark --packages com.databricks:spark-csv_2.10:1.4.0
не будет.
Разница заключается в последнем двоеточие в последнем (рабочем) примере, разделяя Scala номер версии из версии пакета > .
Ответ 7
В моем случае эта ошибка возникла для script, который раньше работал нормально. Поэтому я понял, что это может быть связано с моим обновлением JAVA. До того, как я использовал java 1.8, но я случайно обновился до java 1.9. Когда я переключился на java 1.8, ошибка исчезла, и все работает нормально.
Для тех, кто получает эту ошибку по той же причине, но не знает, как переключиться на более раннюю версию java на ubuntu:
пробег
sudo update-alternatives --config java
и сделайте выбор для java-версии
Ответ 8
Была ли такая же проблема после установки java с использованием нижеподписавшихся проблем решена проблема!
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
Ответ 9
Я понял проблему в системе Windows. В каталоге установки для Java не должно быть пробелов на пути, например в C:Program Files
. Я переустановил Java в CJava
. Я установил JAVA_HOME
в C:Java
и проблема исчезла.
Ответ 10
Если это сообщение об ошибке, запущенном pyspark на Ubuntu, избавилось от него, установив openjdk-8-jdk
from pyspark import SparkConf, SparkContext
sc = SparkContext(conf=SparkConf().setAppName("MyApp").setMaster("local"))
^^^ error
Установите Open JDK 8:
apt-get install openjdk-8-jdk-headless -qq
Ответ 11
У меня такая же ошибка при запуске pyspark в pycharm. Я решил проблему, добавив JAVA_HOME в переменные окружения pycharm.
Ответ 12
У меня было то же исключение, и я попробовал все, устанавливая и сбрасывая все переменные окружения. Но проблема, в конце концов, была детализирована до конца в свойстве appname свойства сеанса spark, то есть «SparkSession.builder.appName(» StreamingDemo «). GetOrCreate()». Сразу после удаления пробела из строки, заданной свойству appname, это было решено. Я использовал pyspark 2.7 с eclipse в среде windows 10. Это сработало для меня. Прилагаются обязательные скриншоты.
Ответ 13
Я получил эту ошибку, потому что у меня мало места на диске.
Ответ 14
У меня было то же исключение: для меня работала java jdk.
Ответ 15
Рабочие часы на этом. Моя проблема заключалась в установке Java 10. Я удалил его и установил Java 8, и теперь Pyspark работает.
Ответ 16
У меня такая же ошибка.
Способы устранения проблем:
- Проверьте исходный код искры.
- Следуйте за сообщением об ошибке. В моем случае:
pyspark/java_gateway.py
, строка 93, вlaunch_gateway
. - Проверьте логику кода, чтобы найти основную причину, после чего вы ее разрешите.
В моем случае проблема заключается в том, что PySpark не имеет права создавать временную директорию, поэтому я просто запускаю свою среду IDE с помощью sudo
Ответ 17
Для меня ответ состоял в том, чтобы добавить два «Content Roots» в «Файл» → «Структура проекта» → «Модули» (в IntelliJ):
- YourPathискровым 2.2.1-бен-hadoop2.7питон
- YourPathискровым 2.2.1-бен-hadoop2.7питонLibpy4j-0.10.4-src.zip
Ответ 18
Это старый поток, но я добавляю свое решение для тех, кто использует mac.
Проблема была в JAVA_HOME
. Вы должны включить это в свой .bash_profile
.
Проверьте свою java -version
. Если вы загрузили последнюю версию Java, но она не отображается как последняя версия, вы знаете, что этот путь неверен. Обычно путь по умолчанию — export JAVA_HOME=/usr/bin/java
.
Поэтому попробуйте изменить путь к: /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java
Кроме того, вы также можете загрузить последнюю версию JDK. https://www.oracle.com/technetwork/java/javase/downloads/index.html, и это автоматически заменит usr/bin/java
на последнюю версию. Вы можете подтвердить это, снова выполнив java -version
.
Тогда это должно сработать.
Ответ 19
Убедитесь, что как ваш каталог Java (как указано в вашем пути), так и ваш интерпретатор Python находятся в каталогах без пробелов в них. Это было причиной моей проблемы.
Ответ 20
Если вы пытаетесь запустить spark без двоичных файлов hadoop, вы можете столкнуться с вышеупомянутой ошибкой. Одним из решений является:
1) скачать hadoop отдельно.
2) добавить hadoop в ваш путь
3) добавьте classpath hadoop к вашей установке SPARK
Первые два шага тривиальны, последний шаг лучше всего сделать, добавив следующее в файл $ SPARK_HOME/conf/spark-env.sh в каждом узле искры (основной и рабочий)
### in conf/spark-env.sh ###
export SPARK_DIST_CLASSPATH=$(hadoop classpath)
для получения дополнительной информации также проверьте: https://spark.apache.org/docs/latest/hadoop-provided.html
Ответ 21
Я использую Mac OS. Я исправил проблему!
Ниже как я это исправил.
JDK8, кажется, работает нормально. (https://github.com/jupyter/jupyter/issues/248)
Итак, я проверил мой JDK /Library/Java/JavaVirtualMachines, у меня только jdk-11.jdk по этому пути.
Я скачал JDK8 (я перешел по ссылке). Который:
brew tap caskroom/versions
brew cask install java8
После этого я добавил
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home
export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"
в файл ~/.bash_profile. (Вы должны проверить свое имя файла jdk1.8)
Это работает сейчас! Надеюсь это поможет
Ответ 22
В моем случае это было потому, что я написал SPARK_DRIVER_MEMORY=10
вместо SPARK_DRIVER_MEMORY=10g
в spark-env.sh
Ответ 23
Для Linux (Ubuntu 18.04) с проблемой JAVA_HOME ключом является указание на главную папку:
- Установите Java 8 по умолчанию с помощью:
sudo update-alternatives --config java
. Если Jave 8 не установлен, установите:sudo apt install openjdk-8-jdk
. - Установите переменную среды
JAVA_HOME
в качестве главной папки java 8. Расположение задается первой командой выше, удаляющейjre/bin/java
. А именно:export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"
. Если это сделано в командной строке, это будет актуально только для текущего сеанса (ref: команда export в Linux). Для проверки:echo $JAVA_HOME
. - Чтобы установить этот параметр постоянно, добавьте жирную строку выше в файл, который запускается перед запуском интерпретатора IDE/Jupyter/python. Это может быть добавлено жирной линией выше к
.bashrc
. Этот файл загружается при интерактивном запуске bash ref:.bashrc
Ответ 24
Есть много причин для этой ошибки. Моя причина в том, что версия pyspark несовместима с spark. версия pyspark: 2.4.0, но версия spark — 2.2.0. это всегда приводит к тому, что python всегда терпит неудачу при запуске процесса искры тогда spark не может сообщить свои порты python. поэтому ошибка будет «Pyspark: Исключение: процесс шлюза Java завершился до отправки драйверу его номера порта».
Я предлагаю вам погрузиться в исходный код, чтобы узнать реальные причины, когда эта ошибка происходит
Ответ 25
Я исправляю эту ошибку, используя приведенный ниже код. Я настроил SPARK_HOME, хотя. Вы можете следовать этим простым шагам с сайта eproblems
spark_home = os.environ.get('SPARK_HOME', None)