首页 文章

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

提问于
浏览
33

我正试图在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?

但问题从未得到解答 . 请帮忙!谢谢 .

19 回答

  • 1

    这应该对你有帮助

    一种解决方案是将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 .

  • 0

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

  • 1

    我的iphython笔记本(IPython 3.2.1)在Linux(ubuntu)上遇到了同样的问题 .

    在我的案例中缺少的是在$ PYSPARK_SUBMIT_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_master.sh启动主服务器时会报告此日志的位置) .

  • 1

    花了几个小时尝试了许多不同的解决方案后,我可以确认Java 10 SDK会导致此错误 . 在Mac上,请导航到/ Library / Java / JavaVirtualMachines然后运行此命令以完全卸载Java JDK 10:

    sudo rm -rf jdk-10.jdk/
    

    之后,请下载JDK 8,然后问题就解决了 .

  • 18

    即使我正确地设置了 PYSPARK_SUBMIT_ARGS ,我也得到了相同的 Java gateway process exited......port number 异常 . 我正在运行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 例外消失了,一切都很顺利 .

  • 2

    当我尝试使用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

    将不会 .

    区别在于最后一个(工作)示例中的最后一个 colon ,将 Scala version numberpackage version number 中分离出来 .

  • 0

    在我的情况下,此错误来自之前正常运行的脚本 . 所以我发现这可能是由于我的JAVA更新 . 在我使用java 1.8之前,我不小心更新了java 1.9 . 当我切换回java 1.8时,错误消失了,一切运行正常 . 对于那些因为同样的原因而得到此错误但又不知道如何在ubuntu上切换回旧版本java的人:运行

    sudo update-alternatives --config java
    

    并选择java版本

  • 4

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

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

    我想出了Windows系统中的问题 . Java的安装目录不能在路径中包含空格,例如 C:\Program Files . 我在 C\Java 重新安装了Java . 我将 JAVA_HOME 设置为 C:\Java ,问题就消失了 .

  • 0

    如果在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
    
  • 1

    我在pycharm中运行pyspark时遇到同样的错误 . 我通过在pycharm的环境变量中添加JAVA_HOME解决了这个问题 .

  • 0

    我收到此错误是因为我的磁盘空间不足 .

  • 0

    我有同样的例外:安装java jdk为我工作 .

  • 17

    工作了几个小时 . 我的问题是Java 10安装 . 我卸载它并安装了Java 8,现在Pyspark正常工作 .

  • 1

    我有同样的错误 .

    我的麻烦射击程序是:

    • 查看Spark源代码 .

    • 请按照错误消息进行操作 . 在我的情况下: pyspark/java_gateway.py ,第93行,在 launch_gateway .

    • 检查代码逻辑以找到根本原因然后您将解决它 .

    在我的情况下,问题是PySpark没有权限创建一些临时目录,所以我只用sudo运行我的IDE

  • 1

    对我来说,答案是在'文件' - >'项目结构' - >'模块'(在IntelliJ中)中添加两个“内容根”:

    • YourPath \ spark-2.2.1-bin-hadoop2.7 \ python

    • YourPath \火花2.2.1彬hadoop2.7 \ python的\ LIB \ py4j-0.10.4-src.zip

  • 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 确认 .

    那应该有用 .

  • 0

    确保您的Java目录(在路径中找到)和Python解释器都驻留在没有空格的目录中 . 这些是我的问题的原因 .

  • 1

    如果您尝试在没有hadoop二进制文件的情况下运行spark,则可能会遇到上述错误 . 一种解决方案是:

    1)分开下载hadoop .
    2)在你的PATH中加入hadoop
    3)将hadoop classpath添加到SPARK安装中

    前两个步骤是微不足道的,最后一步可以通过在每个spark节点(master和workers)中的$ 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

相关问题