Pyspark: Exception: Java gateway process exited before sending the driver its port number
我正试图在macbook air上运行pyspark。 当我尝试启动它时,我收到错误:
1 | Exception: Java gateway process exited before sending the driver its port number |
当sc =启动时调用SparkContext()。 我试过运行以下命令:
1 2 3 | ./bin/pyspark ./bin/spark-shell export PYSPARK_SUBMIT_ARGS="--master local[2] pyspark-shell" |
无济于事。 我也看过这里:
Spark + Python - 在向驱动程序发送端口号之前退出Java网关进程?
但问题从未得到解答。 请帮忙! 谢谢。
这应该对你有帮助
一种解决方案是将pyspark-shell添加到shell环境变量PYSPARK_SUBMIT_ARGS中:
1 | export PYSPARK_SUBMIT_ARGS="--master local[2] pyspark-shell" |
python / pyspark / java_gateway.py有一个变化,如果用户设置了PYSPARK_SUBMIT_ARGS变量,则需要PYSPARK_SUBMIT_ARGS包含pyspark-shell。
一个可能的原因是没有设置JAVA_HOME,因为没有安装java。
我遇到了同样的问题。它说
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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 |
在
1 2 3 | 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
我的iphython笔记本(IPython 3.2.1)在Linux(ubuntu)上遇到了同样的问题。
在我的案例中缺少的是在$ PYSPARK_SUBMIT_ARGS环境中设置主URL(假设您使用bash):
1 | export PYSPARK_SUBMIT_ARGS="--master spark://<host>:<port>" |
例如
1 | export PYSPARK_SUBMIT_ARGS="--master spark://192.168.2.40:7077" |
您可以将其放入.bashrc文件中。您在spark主服务器的日志中获得了正确的URL(使用/sbin/start_master.sh启动主服务器时会报告此日志的位置)。
如果在Ubuntu上运行pyspark这条错误消息,请通过安装
1 2 3 | from pyspark import SparkConf, SparkContext sc = SparkContext(conf=SparkConf().setAppName("MyApp").setMaster("local")) ^^^ error |
安装Open JDK 8:
1 | apt-get install openjdk-8-jdk-headless -qq |
花了几个小时尝试了许多不同的解决方案后,我可以确认Java 10 SDK会导致此错误。在Mac上,请导航到/ Library / Java / JavaVirtualMachines然后运行此命令以完全卸载Java JDK 10:
1 | sudo rm -rf jdk-10.jdk/ |
之后,请下载JDK 8,然后问题就解决了。
即使我正确设置
当我遇到这个异常时,我注意到生成了一个hs_err _ * .log并且它以:
所以我通过VirtualBox设置增加了为我的ubuntu分配的内存,并重新启动了guest ubuntu。然后这个
当我尝试使用CSV支持启动IPython并出现语法错误时,我在Cloudera VM中获得了相同的
将抛出错误,同时:
<5233>
将不会。
区别在于最后一个(工作)示例中的最后一个冒号,从包版本号中分离Scala版本号。
在我的情况下,此错误来自之前正常运行的脚本。所以我发现这可能是由于我的JAVA更新。在我使用java 1.8之前,我不小心更新了java 1.9。当我切换回java 1.8时,错误消失了,一切运行正常。
对于那些因为同样的原因而得到此错误但又不知道如何在ubuntu上切换回旧版java的人:
跑
1 | sudo update-alternatives --config java |
并选择java版本
有同样的问题,安装java使用下面的行解决了问题!
1 2 3 | sudo add-apt-repository ppa:webupd8team/java sudo apt-get update sudo apt-get install oracle-java8-installer |
我想出了Windows系统中的问题。 Java的安装目录不能在路径中包含空格,例如
我在pycharm中运行pyspark时遇到同样的错误。
我通过在pycharm的环境变量中添加JAVA_HOME解决了这个问题。
我有同样的例外,我通过设置和重置所有环境变量来尝试所有内容。但最后问题是在spark会话的appname属性中向下钻取空间,即"SparkSession.builder.appName("StreamingDemo")。getOrCreate()"。从给予appname属性的字符串中删除空格后,它立即得到解决。我在windows 10环境中使用了带有eclipse的pyspark 2.7。它对我有用。
随附的是必需的屏幕截图。
我使用下面的代码修复了这个错误。我已经设置了SPARK_HOME。您可以从eproblems网站关注这个简单的步骤
1 | spark_home = os.environ.get('SPARK_HOME', None) |
对我来说,答案是在'文件' - >'项目结构' - >'模块'(在IntelliJ中)中添加两个"内容根":
这是一个旧线程,但我正在为那些使用mac的人添加我的解决方案。
问题出在
检查
因此,请尝试将路径更改为:
或者,您也可以下载最新的JDK。
https://www.oracle.com/technetwork/java/javase/downloads/index.html这将自动将
那应该有用。
确保您的Java目录(在路径中找到)和Python解释器都驻留在没有空格的目录中。这些是我的问题的原因。
工作了几个小时。我的问题是Java 10安装。我卸载它并安装了Java 8,现在Pyspark正常工作。
我有同样的例外:安装java jdk为我工作。
如果您尝试在没有hadoop二进制文件的情况下运行spark,则可能会遇到上述错误。一种解决方案是:
1)分开下载hadoop。
2)在你的PATH中加入hadoop
3)将hadoop classpath添加到SPARK安装中
前两个步骤是微不足道的,最后一步可以通过在每个spark节点(master和workers)中的$ SPARK_HOME / conf / spark-env.sh中添加以下内容来做到最好
1 2 3 | ### in conf/spark-env.sh ### export SPARK_DIST_CLASSPATH=$(hadoop classpath) |
有关更多信息,请查看:https://spark.apache.org/docs/latest/hadoop-provided.html
我用的是Mac OS。我解决了这个问题!
以下是我修复它的方法。
JDK8似乎工作正常。 (https://github.com/jupyter/jupyter/issues/248)
所以我检查了我的JDK / Library / Java / JavaVirtualMachines,我在这条路径中只有jdk-11.jdk。
我下载了JDK8(我按照链接)。
这是:
1 2 | brew tap caskroom/versions brew cask install java8 |
在此之后,我补充道
1 2 | 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文件。 (你sholud检查你的jdk1.8文件名)
它现在有效!
希望这有帮助:)
在我的情况下,这是因为我在
我收到此错误是因为我的磁盘空间不足。
对于带有JAVA_HOME问题的Linux(Ubuntu 18.04),关键是将其指向主文件夹:
这个错误有很多原因。我的理由是:pyspark的版本与spark不兼容。
pyspark版本:2.4.0,但spark版本是2.2.0。
它始终会导致python在启动spark进程时始终失败。然后spark无法告诉它的端口是python。所以错误将是"Pyspark:例外:在向驱动程序发送端口号之前退出Java网关进程
"。
我建议你深入了解源代码,找出发生此错误的真正原因
我有同样的错误。
我的麻烦射击程序是:
在我的情况下,问题是PySpark没有权限创建一些临时目录,所以我只用sudo运行我的IDE