pyspark:异常:java网关进程在向驱动程序发送端口号之前退出

vwkv1x7d  于 2021-07-09  发布在  Spark
关注(0)|答案(26)|浏览(601)

我想在我的MacBookAir上运行Pypark。当我试着启动它时,我得到一个错误:

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网关进程在向驱动程序发送端口号之前退出了吗?
但这个问题一直没有答案。请帮帮我!谢谢。

gywdnpxw

gywdnpxw1#

确保java目录(如路径中所示)和python解释器都位于没有空格的目录中。这就是我问题的原因。

rdlzhqv9

rdlzhqv92#

在花了数小时尝试了许多不同的解决方案之后,我可以确认Java10SDK导致了这个错误。在mac上,请导航到/library/java/javavirtualmachines,然后运行此命令以完全卸载java jdk 10:

sudo rm -rf jdk-10.jdk/

之后,请下载jdk8,问题就解决了。

lpwwtiir

lpwwtiir3#

如果您的机器中没有安装java,通常会发生这种情况。
转到命令提示符并检查java:type的版本: 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并将其添加到buildpath。
https://www.youtube.com/watch?v=f7rt0h1q5wo

zqry0prt

zqry0prt4#

我也遇到了同样的异常,我通过设置和重置所有环境变量来尝试一切。但问题最终深入到了spark会话的appname属性中的空格处,即“sparksession.builder.appname(“streamingdemo”).getorcreate()”。从appname属性的字符串中删除空格后,它立即得到了解析。它对我有用。附上必需的屏幕截图。

9gm1akwq

9gm1akwq5#

这应该对你有帮助
一种解决方案是将pyspark shell添加到shell环境变量pyspark\u submit\u args中:

export PYSPARK_SUBMIT_ARGS="--master local[2] pyspark-shell"

python/pyspark/java\u gateway.py中有一个更改,如果用户设置了pyspark\u submit\u args变量,则需要pyspark\u submit\u args包含pyspark shell。

r3i60tvu

r3i60tvu6#

对我来说,答案是在“file”->“project structure”->“modules”(在intellij中)中添加两个“content root”:
yourpath\spark-2.2.1-bin-hadoop2.7\python
yourpath\spark-2.2.1-bin-hadoop2.7\python\lib\py4j-0.10.4-src.zip

pzfprimi

pzfprimi7#

在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

在macos上

同样在mac os上,我输入了一个终端:

$ java -version
No Java runtime present, requesting install.

我被提示从oracle的下载站点安装java,选择macos安装程序,点击 jdk-13.0.2_osx-x64_bin.dmg 然后检查java是否安装了

$ java -version
java version "13.0.2" 2020-01-14

编辑以安装您需要转到的jdk 8https://www.oracle.com/java/technologies/javase-jdk8-downloads.html (需要登录)
在那之后,我可以用pyspark创建一个spark上下文。

检查是否有效

在python中:

from pyspark import SparkContext 
sc = SparkContext.getOrCreate() 

# check that it really works by running a job

# example from http://spark.apache.org/docs/latest/rdd-programming-guide.html#parallelized-collections

data = range(10000) 
distData = sc.parallelize(data)
distData.filter(lambda x: not x&1).take(10)

# Out: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

请注意,您可能需要设置环境变量 PYSPARK_PYTHON 以及 PYSPARK_DRIVER_PYTHON 它们必须是与运行pyspark(驱动程序)所用的python(或ipython)相同的python版本。

qyzbxkaa

qyzbxkaa8#

我得到这个错误是因为我的磁盘空间不足。

nvbavucw

nvbavucw9#

我也一样 Exception: Java gateway process exited before sending the driver its port number 在cloudera vm中,尝试使用csv支持启动ipython时出现语法错误: 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版本号与包版本号分开。

wko9yo5t

wko9yo5t10#

我使用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\u配置文件(您需要检查您的jdk1.8文件名)
现在可以了!希望对您有所帮助:)

67up9zun

67up9zun11#

这是一个老线程,但我添加了我的解决方案,为那些谁使用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 再一次。
那就行了。

ej83mcc0

ej83mcc012#

我在windows系统中解决了这个问题。java的安装目录的路径中不能有空格,例如 C:\Program Files . 我在中重新安装了java C\Java . 我准备好了 JAVA_HOMEC:\Java 问题就消失了。

vfwfrxfs

vfwfrxfs13#

spark对您使用的java版本非常挑剔。强烈建议您使用Java1.8(开源的OpenJDK8也很好用)。安装后,设置 JAVA_HOME 对于bash变量,如果使用mac/linux:
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8) export PATH=$JAVA_HOME/bin:$PATH

nfeuvbwi

nfeuvbwi14#

在我的例子中,这个错误出现在以前运行良好的脚本中。所以我想这可能是因为我的java更新。在使用Java1.8之前,我不小心更新到了Java1.9。当我切换回Java1.8时,错误消失了,一切正常。对于那些因为同样的原因出现这个错误但不知道如何在ubuntu上切换回旧版本java的人:run

sudo update-alternatives --config java

选择java版本

qpgpyjmq

qpgpyjmq15#

同样的问题,安装java后使用下面的行解决了问题!

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

相关问题