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

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

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

zvms9eto

zvms9eto16#

对我来说,是因为我写了 SPARK_DRIVER_MEMORY=10 而不是 SPARK_DRIVER_MEMORY=10gspark-env.sh

rkue9o1l

rkue9o1l17#

如果您试图在没有hadoop二进制文件的情况下运行spark,可能会遇到上述错误。一种解决方案是:
1) 单独下载hadoop。
2) 将hadoop添加到您的路径
3) 将hadoop类路径添加到spark安装中
前两步很简单,最后一步最好在每个spark节点(master和worker)的$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

c0vxltue

c0vxltue18#

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

yruzcnhs

yruzcnhs19#

我也一样 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 例外情况消失,一切顺利。

nzrxty8p

nzrxty8p20#

我在pycharm中运行pyspark也有同样的错误。我通过在pycharm的环境变量中添加javahome解决了这个问题。

9ceoxa92

9ceoxa9221#

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

sshcrbum

sshcrbum22#

在这上面工作了好几个小时。我的问题是Java10的安装。我卸载了它并安装了java8,现在pyspark可以工作了。

5us2dqdw

5us2dqdw23#

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

gc0ot86w

gc0ot86w24#

我将在这里转述我是如何解决的,只是为了将来的参考。
我是如何解决类似的问题的
先决条件:
anaconda已经安装
spark已安装(https://spark.apache.org/downloads.html)
Pypark已安装(https://anaconda.org/conda-forge/pyspark)
步骤(注意:根据您的系统设置文件夹路径)
设置以下环境变量。
spark\u“c:\spark\spark-3.0.1-bin-hadoop2.7”的主页
将hadoop\u home设置为“c:\spark\spark-3.0.1-bin-hadoop2.7”
将pyspark\u driver\u python设置为“jupyter”
将pyspark\u driver\u python\u opts设置为“notebook”
添加“c:\spark\spark-3.0.1-bin-hadoop2.7\bin;”到path系统变量。
更改c下的java installed文件夹:(以前java是在ProgramFiles下安装的,所以我直接在c下重新安装:)
所以我的java\u主页将变成这样的“c:\java\jdk1.8.0\u271”
现在。真管用!

mftmpeh8

mftmpeh825#

我的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启动主机时,会报告此日志的位置)。

j2cgzkjk

j2cgzkjk26#

对于linux(Ubuntu18.04)的java\主页问题,关键是将其指向主文件夹:
将java 8设置为默认值: sudo update-alternatives --config java . 如果未安装jave 8,请通过以下方式安装: sudo apt install openjdk-8-jdk .
JAVA_HOME 环境变量作为主Java8文件夹。位置由上面的第一个命令给出 jre/bin/java . 即: export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/" . 如果在命令行上完成,这将只与当前会话相关(参考:linux上的export命令)。要验证: echo $JAVA_HOME .
为了永久地设置这个值,请在启动ide/jupyter/python解释器之前将上面的粗体行添加到运行的文件中。这可以通过将上面粗体的行添加到 .bashrc . 当以交互方式启动bash时加载此文件ref:.bashrc

相关问题