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

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

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

htzpubme

htzpubme1#

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

bwntbbo3

bwntbbo32#

我的ipython笔记本(ipython3.2.1)在linux(ubuntu)上也有同样的问题。
我的例子中缺少的是在$pyspark\u submit\u args环境中设置主url,如下所示(假设您使用bash):

export PYSPARK_SUBMIT_ARGS="--master spark://<host>:<port>"

例如

export PYSPARK_SUBMIT_ARGS="--master spark://192.168.2.40:7077"

您可以将其放入.bashrc文件中。您在spark主机的日志中获得了正确的url(当您使用/sbin/start\u master.sh启动主机时,会报告此日志的位置)。

kyvafyod

kyvafyod3#

我也有同样的错误。
我的故障排除程序是:
查看spark源代码。
遵循错误消息。就我而言: pyspark/java_gateway.py ,第93行,in launch_gateway .
检查代码逻辑以找到根本原因,然后您将解决它。
在我的例子中,问题是pyspark没有创建临时目录的权限,所以我只是用sudo运行ide

zphenhs4

zphenhs44#

在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版本。

2ledvvac

2ledvvac5#

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

xmjla07d

xmjla07d6#

如果您的机器中没有安装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

mbjcgjjk

mbjcgjjk7#

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

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

ckx4rj1h8#

这应该对你有帮助
一种解决方案是将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。

x759pob2

x759pob29#

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

sudo rm -rf jdk-10.jdk/

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

62o28rlo

62o28rlo10#

我使用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文件名)
现在可以了!希望对您有所帮助:)

0wi1tuuw

0wi1tuuw11#

我也一样 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版本号与包版本号分开。

whlutmcx

whlutmcx12#

一个可能的原因是没有设置javahome,因为没有安装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

gev0vcfq

gev0vcfq13#

我也一样 Java gateway process exited......port number 即使我设置了 PYSPARK_SUBMIT_ARGS 适当地。我正在运行spark1.6并试图让pyspark与ipython4/jupyter(os:ubuntu作为vm客户机)一起工作。
当我遇到这个异常时,我注意到生成了一个hs\u 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 例外情况消失,一切顺利。

oalqel3c

oalqel3c14#

这个错误有很多原因。我的理由是:

33qvvth1

33qvvth115#

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

相关问题