我正在尝试在我的 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?
但这个问题从未得到回答。请帮忙!谢谢。
一个可能的原因是未设置 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
这应该可以帮助你
一种解决方案是将 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。
在 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's download site 安装 Java,选择 MacOS 安装程序,单击 jdk-13.0.2_osx-x64_bin.dmg
,然后检查 Java 是否已安装
$ java -version
java version "13.0.2" 2020-01-14
编辑要安装 JDK 8,您需要转到 https://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 版本。
我使用 Mac 操作系统。我解决了这个问题!
以下是我修复它的方法。
JDK8 似乎工作正常。 (https://github.com/jupyter/jupyter/issues/248)
所以我检查了我的 JDK /Library/Java/JavaVirtualMachines,我在这个路径中只有 jdk-11.jdk。
我downloaded 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_profile 文件。 (你应该检查你的 jdk1.8 文件名)
现在可以了!希望这有帮助:)
export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"
,并且在 Github github.com/jupyter/jupyter/issues/248#issuecomment-926782387 上有一个扩展的讨论。是的,链接是 Jupyter,但它是关于 PySpark 的问题。将第一个分配添加到 JAVA_HOME 没有任何作用。
我将在此处重新发布 how I solved it 以供将来参考。
我如何解决我的类似问题
先决条件:
anaconda 已安装 Spark 已安装 (https://spark.apache.org/downloads.html) pyspark 已安装 (https://anaconda.org/conda-forge/pyspark)
我做的步骤(注意:根据您的系统设置文件夹路径)
设置以下环境变量。 SPARK_HOME 为 'C:\spark\spark-3.0.1-bin-hadoop2.7' 将 HADOOP_HOME 设置为 'C:\spark\spark-3.0.1-bin-hadoop2.7' 将 PYSPARK_DRIVER_PYTHON 设置为 'jupyter' 将 PYSPARK_DRIVER_PYTHON_OPTS 设置为'笔记本' 添加 'C:\spark\spark-3.0.1-bin-hadoop2.7\bin;'到 PATH 系统变量。把java安装的文件夹直接改到C下:(之前java是安装在Program files下的,所以我直接重新安装在C下:)这样我的JAVA_HOME就会变成这样'C:\java\jdk1.8.0_271'
现在。有用 !
我在 Linux (ubuntu) 上的 iphython notebook (IPython 3.2.1) 也有同样的问题。
在我的案例中缺少的是在 $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 master 的正确 URL(当您使用 /sbin/start_master.sh 启动 master 时,会报告此日志的位置)。
import os; os.environ['PYSPARK_SUBMIT_ARGS'] = "--master ..."
设置环境变量
/sbin/
(我在 Windows 上)? @BallpointBen 感谢添加,但与以前相同的错误。
在花费数小时尝试许多不同的解决方案后,我可以确认 Java 10 SDK 会导致此错误。在 Mac 上,请导航到 /Library/Java/JavaVirtualMachines 然后运行此命令以完全卸载 Java JDK 10:
sudo rm -rf jdk-10.jdk/
之后,请下载 JDK 8 即可解决问题。
我在使用 PySpark 时遇到了同样的错误,将 JAVA_HOME 设置为 Java 11 对我有用(最初设置为 16)。我正在使用 MacOS 和 PyCharm。您可以通过执行 echo $JAVA_HOME
检查您当前的 Java 版本。
以下是对我有用的。在我的 Mac 上,我使用了以下自制命令,但您可以使用不同的方法来安装所需的 Java 版本,具体取决于您的操作系统。
# Install Java 11 (I believe 8 works too)
$ brew install openjdk@11
# Set JAVA_HOME by assigning the path where your Java is
$ export JAVA_HOME=/usr/local/opt/openjdk@11
注意:如果您使用自制软件安装并且需要查找路径的位置,您可以执行 $ brew --prefix openjdk@11
,它应该返回如下路径:/usr/local/opt/openjdk@11
此时,我可以从终端运行我的 PySpark 程序 - 但是,在我全局更改 JAVA_HOME 变量之前,我的 IDE (PyCharm) 仍然有同样的错误。
要更新变量,首先通过在命令行上运行 echo $SHELL
来检查您使用的是 zsh 还是 bash shell。对于 zsh,您将编辑 ~/.zshenv
文件,对于 bash,您将编辑 ~/.bash_profile
。
# open the file
$ vim ~/.zshenv
OR
$ vim ~/.bash_profile
# once inside the file, set the variable with your Java path, then save and close the file
export JAVA_HOME=/usr/local/opt/openjdk@11
# test if it was set successfully
$ echo $JAVA_HOME
/usr/local/opt/openjdk@11
在这一步之后,我也可以通过我的 PyCharm IDE 运行 PySpark。
Spark 对您使用的 Java 版本非常挑剔。强烈建议您使用 Java 1.8(开源的 AdoptOpenJDK 8 也很好用)。安装后,如果您使用 Mac/Linux,请将 JAVA_HOME
设置为您的 bash 变量:
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
export PATH=$JAVA_HOME/bin:$PATH
即使我正确设置了 PYSPARK_SUBMIT_ARGS
,我也得到了相同的 Java gateway process exited......port number
异常。我正在运行 Spark 1.6 并试图让 pyspark 与 IPython4/Jupyter 一起工作(操作系统:ubuntu 作为 VM 来宾)。
当我遇到这个异常时,我注意到生成了一个 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 Setting 增加了为我的 ubuntu 分配的内存并重新启动了来宾 ubuntu。然后这个 Java gateway
异常消失,一切正常。
尝试使用 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
将不会。
不同之处在于最后一个(工作)示例中的最后一个冒号,将 Scala 版本号与包版本号分开。
在我的情况下,这个错误来自之前运行良好的脚本。所以我想这可能是由于我的 JAVA 更新。在我使用 java 1.8 之前,我不小心更新到了 java 1.9。当我切换回 java 1.8 时,错误消失了,一切运行正常。对于那些因为同样的原因得到这个错误但不知道如何在 ubuntu 上切换回旧 Java 版本的人:运行
sudo update-alternatives --config java
并选择java版本
我在Windows系统中发现了问题。 Java 的安装目录路径中不能有空格,例如 C:\Program Files
。我在 C\Java
中重新安装了 Java。我将 JAVA_HOME
设置为 C:\Java
,问题就消失了。
如果您尝试在没有 hadoop 二进制文件的情况下运行 spark,您可能会遇到上述错误。一种解决方案是:
1)单独下载hadoop。 2) 将 hadoop 添加到您的 PATH 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
我收到此错误是因为我的磁盘空间不足。
有同样的问题,在使用下面的行安装java后解决了这个问题!
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
我有同样的错误。
我的故障排除程序是:
查看 Spark 源代码。按照错误消息进行操作。在我的例子中:pyspark/java_gateway.py,第 93 行,在 launch_gateway 中。检查代码逻辑以找到根本原因,然后您将解决它。
在我的情况下,问题是 PySpark 无权创建一些临时目录,所以我只是用 sudo 运行我的 IDE
我在 pycharm 中运行 pyspark 时遇到同样的错误。我通过在 pycharm 的环境变量中添加 JAVA_HOME 解决了这个问题。
https://i.stack.imgur.com/ztNog.png
https://i.stack.imgur.com/FJkqD.png
对于具有 JAVA_HOME 问题的 Linux (Ubuntu 18.04),关键是将其指向主文件夹:
通过以下方式将 Java 8 设置为默认值:sudo update-alternatives --config java。如果未安装 Jave 8,请通过以下方式安装:sudo apt install openjdk-8-jdk。将 JAVA_HOME 环境变量设置为主 java 8 文件夹。该位置由上面删除 jre/bin/java 的第一个命令给出。即:export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"。如果在命令行上完成,这将仅与当前会话相关(参考:Linux 上的导出命令)。验证:echo $JAVA_HOME。为了永久设置此设置,请将上面的粗体行添加到启动 IDE/Jupyter/python 解释器之前运行的文件中。这可以通过将上面的粗体行添加到 .bashrc 来实现。当 bash 以交互方式启动时加载此文件参考:.bashrc
由于机器上未安装 JAVA,因此发生错误。 Spark 是在 scala 中开发的,通常在 JAVA 上运行。
尝试安装 JAVA 并执行 pyspark 语句。它会起作用
如果您的机器上没有安装 java,这通常会发生。
转到命令提示符并检查您的 java 版本:类型: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 并将其添加到构建路径的视频。
https://www.youtube.com/watch?v=f7rT0h1Q5Wo
在花了很多时间解决这个问题之后,我能够解决这个问题。我拥有 MacOs Catalina,在 Anaconda 环境中使用 Pycharm。
Spark 目前仅支持 Java8。如果通过命令行安装Java,默认会安装最新的Java10+,会带来各种麻烦。要解决此问题,请按照以下步骤操作 -
1. Make sure you have Homebrew, else install Homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
2. Install X-code
xcode-select –-install
3. Install Java8 through the official website (not through terminal)
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
4. Install Apache-Spark
brew install apache-spark
5. Install Pyspark and Findspark (if you have anaconda)
conda install -c conda-forge findspark
conda install -c conda-forge/label/gcc7 findspark
conda install -c conda-forge pyspark
中提琴!这应该让您运行 PySpark 没有任何问题
步骤1
从终端检查 java 版本。
java -version
如果您看到 bash: java: command not found
,则表示您的系统中没有安装 java。
第2步
使用以下命令安装 Java,
sudo apt-get install default-jdk
步骤:3
不检查java版本,你会看到版本已经下载。
java -version
结果:
openjdk version "11.0.11" 2021-04-20
OpenJDK Runtime Environment (build 11.0.11+9-Ubuntu-0ubuntu2.20.04)
OpenJDK 64-Bit Server VM (build 11.0.11+9-Ubuntu-0ubuntu2.20.04, mixed mode, sharing)
第4步
现在运行 pyspark 代码,你将永远不会看到这样的错误。
这里有很多有价值的提示,但是,没有一个能完全解决我的问题,所以我将展示在 Windows 上的 Anaconda Jupyter Notebook 中对我有用的过程:
在没有空格的目录中下载并安装 java 和 pyspark。
[可能不需要] 在 anaconda 提示符下,键入 where conda 和 where python 并使用 Windows 环境变量工具将 .exe 文件目录的路径添加到您的 Path 变量中。在那里添加变量 JAVA_HOME 和 SPARK_HOME 及其相应的路径。
即使这样做,我也必须在 Notebook 中手动设置这些变量以及 PYSPARK_SUBMIT_ARGS(使用您自己的 SPARK_HOME 和 JAVA_HOME 路径):
import os
os.environ["SPARK_HOME"] = r"C:\Spark\spark-3.2.0-bin-hadoop3.2"
os.environ["PYSPARK_SUBMIT_ARGS"] = "--master local[3] pyspark-shell"
os.environ["JAVA_HOME"] = r"C:\Java\jre1.8.0_311"
使用 !pip install findspark 从笔记本安装 findspark。
运行 import findspark 和 findspark.init()
从 pyspark.sql 运行 import SparkSession 和 spark = SparkSession.builder.getOrCreate()
一些有用的链接:
https://towardsdatascience.com/installing-apache-pyspark-on-windows-10-f5f0c506bea1
https://www.datacamp.com/community/tutorials/installing-anaconda-windows
我遇到了这个问题,实际上不是因为 JAVE_HOME 设置。我假设您使用的是 Windows,并使用 Anaconda 作为您的 Python 工具。请检查您是否可以使用命令提示符。由于 cmd 崩溃,我无法运行 spark。修复此问题后,spark 可以在我的电脑上正常工作。
为此工作了几个小时。我的问题是安装 Java 10。我卸载了它并安装了 Java 8,现在 Pyspark 可以工作了。
对我来说,答案是在“文件”->“项目结构”->“模块”(在 IntelliJ 中)中添加两个“内容根”:
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
这是一个旧线程,但我正在为那些使用 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
来确认这一点。
那么这应该工作。
确保您的 Java 目录(在您的路径中找到)和您的 Python 解释器都位于其中没有空格的目录中。这些是我的问题的原因。