我试图在macbook air上运行pyspark。当我尝试启动时,我收到错误:
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 gateway process exited before sending the driver its port number?
但问题从未得到解答。请帮忙!感谢。
答案 0 :(得分:19)
这应该可以帮到你
一种解决方案是将pyspark-shell添加到shell环境变量PYSPARK_SUBMIT_ARGS中:
export PYSPARK_SUBMIT_ARGS="--master local[2] pyspark-shell"
python / pyspark / java_gateway.py有一个变化,如果用户设置了PYSPARK_SUBMIT_ARGS变量,则需要PYSPARK_SUBMIT_ARGS包含pyspark-shell。
答案 1 :(得分:18)
一个可能的原因是没有设置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
答案 2 :(得分:4)
Linux(ubuntu)上的iphython笔记本(IPython 3.2.1)存在同样的问题。
在我的案例中缺少的是在$ PYSPARK_SUBMIT_ARGS环境中设置主URL(假设您使用bash):
export PYSPARK_SUBMIT_ARGS="--master spark://<host>:<port>"
e.g。
export PYSPARK_SUBMIT_ARGS="--master spark://192.168.2.40:7077"
您可以将其放入.bashrc文件中。您在spark主服务器的日志中获得了正确的URL(使用/sbin/start_master.sh启动主服务器时会报告此日志的位置)。
答案 3 :(得分:2)
我将在此处重新发布 how I solved it 以供将来参考。
我是如何解决类似问题的
先决条件:
我做的步骤(注意:根据您的系统设置文件夹路径)
<块引用>现在。它有效!
答案 4 :(得分:2)
在花费数小时和数小时尝试许多不同的解决方案之后,我可以确认Java 10 SDK会导致此错误。在Mac上,请导航到/ Library / Java / JavaVirtualMachines然后运行此命令以完全卸载Java JDK 10:
sudo rm -rf jdk-10.jdk/
之后,请下载JDK 8然后问题就解决了。
答案 5 :(得分:1)
即使我正确设置Java gateway process exited......port number
,我也遇到了相同的PYSPARK_SUBMIT_ARGS
异常。我正在运行Spark 1.6并试图让pyspark与IPython4 / Jupyter(OS:ubuntu作为VM guest)一起工作。
虽然我遇到了这个异常,但我注意到生成了一个hs_err _ * .log,它始于:
There is insufficient memory for the Java Runtime Environment to continue. Native memory allocation (malloc) failed to allocate 715849728 bytes for committing reserved memory.
所以我通过VirtualBox设置增加了为我的ubuntu分配的内存,并重新启动了guest ubuntu。然后这个Java gateway
例外消失了,一切都很顺利。
答案 6 :(得分:1)
我有一个相同的例外,我通过设置和重置所有环境变量来尝试所有操作。但是最终问题是在spark会话的appname属性中深入到了空间,即“ SparkSession.builder.appName(“ StreamingDemo”)。getOrCreate()”。从给appname属性的字符串中删除空间后,它立即得到解决。我在Windows 10环境中使用带有eclipse的pyspark 2.7。它为我工作。 随附必需的屏幕截图。
答案 7 :(得分:1)
对于您使用的Java版本,Spark非常挑剔。强烈建议您使用Java 1.8(开源的AdoptOpenJDK 8也可以正常工作)。
安装后,如果使用Mac / Linux,请将JAVA_HOME
设置为bash变量:
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
export PATH=$JAVA_HOME/bin:$PATH
答案 8 :(得分:1)
如果您的计算机中未安装Java,通常会发生这种情况。
转到命令提示符并检查Java版本:
类型:java -version
您应该会得到类似的输出
java version "1.8.0_241"
Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode)
如果没有,请访问orcale并下载jdk。 观看此视频,了解如何下载Java并将其添加到构建路径。
答案 9 :(得分:1)
我在pycharm中运行pyspark时遇到相同的错误。 我通过在pycharm的环境变量中添加JAVA_HOME来解决了这个问题。
答案 10 :(得分:1)
如果此错误消息在Ubuntu上运行pyspark,则通过安装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 :(得分:1)
I figured out the problem in Windows system. The installation directory for Java must not have blanks in the path such as in C:\Program Files
. I re-installed Java in C\Java
. I set JAVA_HOME
to C:\Java
and the problem went away.
答案 12 :(得分:1)
我在使用 PySpark 时遇到了同样的错误,将 JAVA_HOME 设置为 Java 11 对我有用(它最初设置为 16)。我正在使用 MacOS 和 PyCharm。
您可以通过执行 echo $JAVA_HOME
来检查您当前的 Java 版本。
以下是对我有用的内容。在我的 Mac 上,我使用了以下 homebrew 命令,但您可以使用不同的方法来安装所需的 Java 版本,具体取决于您的操作系统。
# Install Java 11 (I believe 8 works too)
$ brew install openjdk@11
# Set JAVA_HOME by assigning the path where your Java is
$ export JAVA_HOME=/usr/local/opt/openjdk@11
注意:如果您使用自制软件安装并需要找到路径的位置,您可以执行 $ brew --prefix openjdk@11
并且它应该返回这样的路径:/usr/local/opt/openjdk@11
此时,我可以从终端运行我的 PySpark 程序 - 但是,在我全局更改 JAVA_HOME 变量之前,我的 IDE (PyCharm) 仍然出现相同的错误。
要更新变量,首先通过在命令行上运行 echo $SHELL
来检查您使用的是 zsh 还是 bash shell。对于 zsh,您将编辑 ~/.zshenv
文件,对于 bash,您将编辑 ~/.bash_profile
。
# open the file
$ vim ~/.zshenv
OR
$ vim ~/.bash_profile
# once inside the file, set the variable with your Java path, then save and close the file
export JAVA_HOME=/usr/local/opt/openjdk@11
# test if it was set successfully
$ echo $JAVA_HOME
/usr/local/opt/openjdk@11
在这一步之后,我也可以通过我的 PyCharm IDE 运行 PySpark。
答案 13 :(得分:1)
有同样的问题,在使用下面的行安装java后解决了这个问题!
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
答案 14 :(得分:1)
在我的情况下,此错误来自之前正常运行的脚本。所以我发现这可能是由于我的JAVA更新。在我使用java 1.8之前,我不小心更新了java 1.9。当我切换回java 1.8时,错误消失了,一切运行正常。 对于那些因为同样的原因而得到此错误但又不知道如何在ubuntu上切换回旧版java的人: 运行
sudo update-alternatives --config java
并选择java版本
答案 15 :(得分:1)
当我尝试使用CSV支持启动IPython并出现语法错误时,我在Cloudera VM中获得了相同的Exception: Java gateway process exited before sending the driver its port number
:
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版本号。
答案 16 :(得分:0)
您可以简单地在终端中运行以下代码。那么,我希望这能解决您的错误。
sudo apt-get install default-jdk
答案 17 :(得分:0)
当我使用 Docker 容器启动 Spark 时,我遇到了同样的问题。原来我为 /tmp 文件夹设置了错误的权限。 如果spark对/tmp没有写权限,也会导致这个问题。
答案 18 :(得分:0)
使用32位jdk-1.8时出现此错误 切换到64位对我有用。
我收到此错误是因为32位Java不能分配超过Spark驱动程序(16G)所需的3G堆内存:
builder = SparkSession.builder \
.appName("Spark NLP") \
.master("local[*]") \
.config("spark.driver.memory", "16G") \
.config("spark.serializer", "org.apache.spark.serializer.KryoSerializer") \
.config("spark.kryoserializer.buffer.max", "1000M") \
.config("spark.driver.maxResultSize", "0")
我测试了使其达到2G,它也可以在32位上工作。
答案 19 :(得分:0)
当尝试使用远程spark.driver.host运行从Airflow触发的pyspark作业时,出现了相同的问题。就我而言,问题的原因是:
异常:Java网关进程在发送驱动程序之前退出 端口号
...
线程“ main”中的异常java.lang.Exception:使用主线程“ yarn”运行时,必须在环境中设置HADOOP_CONF_DIR或YARN_CONF_DIR。
通过添加导出来解决:
export HADOOP_CONF_DIR=/etc/hadoop/conf
并且在pyspark脚本中添加了相同的环境变量:
import os
os.environ["HADOOP_CONF_DIR"] = '/etc/hadoop/conf'
答案 20 :(得分:0)
由于未在计算机上安装JAVA,因此发生了错误。 Spark是在通常在JAVA上运行的scala中开发的。
尝试安装JAVA并执行pyspark语句。 可以
答案 21 :(得分:0)
该错误通常发生在您的系统未安装 java 时。
检查你是否安装了java,打开终端并执行
java --version
始终建议使用 brew install 来安装软件包。
brew install openjdk@11
用于安装 java
既然您已经安装了 java,请根据您使用的 shell 全局设置路径:Z shell 或 bash。
export JAVA_HOME=/usr/local/opt/openjdk@11
下答案 22 :(得分:0)
我使用以下代码修复了此错误。我已经设置了SPARK_HOME。您可以从eproblems website
开始执行以下简单步骤spark_home = os.environ.get('SPARK_HOME', None)
答案 23 :(得分:0)
此错误有很多原因。我的原因是:pyspark的版本与spark不兼容。 pyspark版本:2.4.0,但是spark版本是2.2.0。 它总是导致python在启动spark进程时总是失败。那么spark无法将其端口告知python。因此错误将是“ Pyspark:异常:在发送驱动程序端口号之前退出了Java网关进程 “。
我建议您深入研究源代码以找出发生此错误的真正原因
答案 24 :(得分:0)
对于具有JAVA_HOME问题的Linux(Ubuntu 18.04),关键是将其指向 master 文件夹:
sudo update-alternatives --config java
。如果未安装Jave 8,请通过以下方式安装: sudo apt install openjdk-8-jdk
。JAVA_HOME
环境变量设置为 master java 8文件夹。该位置由上面删除jre/bin/java
的第一个命令给出。即: export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"
。如果在命令行上完成,则此操作仅与当前会话(ref: export command on Linux)有关。要验证: echo $JAVA_HOME
。.bashrc
来实现。交互式启动bash时加载此文件ref: .bashrc 答案 25 :(得分:0)
在我的情况下,这是因为我写了SPARK_DRIVER_MEMORY=10
而不是SPARK_DRIVER_MEMORY=10g
中的spark-env.sh
答案 26 :(得分:0)
我使用Mac OS。我已解决问题!
下面是我的解决方法。
JDK8似乎工作正常。 (https://github.com/jupyter/jupyter/issues/248)
所以我检查了我的JDK / Library / Java / JavaVirtualMachines ,在此路径中我只有 jdk-11.jdk 。
我downloaded 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文件名)
现在可以使用! 希望有帮助:)
答案 27 :(得分:0)
如果您尝试在没有hadoop二进制文件的情况下运行spark,则可能会遇到上述错误。一种解决方案是:
1)单独下载hadoop。
2)将hadoop添加到您的PATH
3)在您的SPARK安装中添加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
答案 28 :(得分:0)
确保Java目录(在路径中找到)和Python解释器都位于目录中,且目录中没有空格。这些是造成我问题的原因。
答案 29 :(得分:0)
这是一个旧线程,但是我正在为使用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
来确认。
那应该起作用。
答案 30 :(得分:0)
对我来说,答案是在“文件”->“项目结构”->“模块”(在IntelliJ中)添加两个“内容根”:
答案 31 :(得分:0)
我有同样的错误。
我的故障排除程序是:
pyspark/java_gateway.py
中第launch_gateway
行的第93行。在我的情况下,问题是PySpark没有创建临时目录的权限,因此我只能使用sudo运行IDE
答案 32 :(得分:0)
上班时间。我的问题是Java 10安装。我卸载它并安装了Java 8,现在Pyspark正常工作。
答案 33 :(得分:0)
我有同样的例外:安装java jdk为我工作。
答案 34 :(得分:0)
我收到此错误是因为磁盘空间不足。