mt8*_*t88 38 python java macos apache-spark pyspark
我正试图在macbook air上运行pyspark.当我尝试启动它时,我收到错误:
Exception: Java gateway process exited before sending the driver its port number
Run Code Online (Sandbox Code Playgroud)
当sc =启动时调用SparkContext().我试过运行以下命令:
./bin/pyspark
./bin/spark-shell
export PYSPARK_SUBMIT_ARGS="--master local[2] pyspark-shell"
Run Code Online (Sandbox Code Playgroud)
无济于事.我也看过这里:
Spark + Python - 在向驱动程序发送端口号之前退出Java网关进程?
但问题从未得到解答.请帮忙!谢谢.
小智 22
这应该对你有帮助
一种解决方案是将pyspark-shell添加到shell环境变量PYSPARK_SUBMIT_ARGS中:
export PYSPARK_SUBMIT_ARGS="--master local[2] pyspark-shell"
Run Code Online (Sandbox Code Playgroud)
python/pyspark/java_gateway.py有一个变化,如果用户设置了PYSPARK_SUBMIT_ARGS变量,则需要PYSPARK_SUBMIT_ARGS包含pyspark-shell.
Old*_*nda 18
一个可能的原因是没有设置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
Run Code Online (Sandbox Code Playgroud)
在sc = pyspark.SparkConf().我通过跑步解决了它
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
Run Code Online (Sandbox Code Playgroud)
来自https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-get-on-ubuntu-16-04
use*_*737 13
在 Ubuntu 上运行 pyspark 时出现此错误消息,通过安装openjdk-8-jdk软件包摆脱了它
from pyspark import SparkConf, SparkContext
sc = SparkContext(conf=SparkConf().setAppName("MyApp").setMaster("local"))
^^^ error
Run Code Online (Sandbox Code Playgroud)
安装 Open JDK 8:
apt-get install openjdk-8-jdk-headless -qq
Run Code Online (Sandbox Code Playgroud)
在 Mac OS 上相同,我在终端中输入:
$ java -version
No Java runtime present, requesting install.
Run Code Online (Sandbox Code Playgroud)
我被提示从Oracle 的下载站点安装 Java ,选择 MacOS 安装程序,单击jdk-13.0.2_osx-x64_bin.dmg并检查 Java 已安装
$ java -version
java version "13.0.2" 2020-01-14
Run Code Online (Sandbox Code Playgroud)
编辑要安装 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]
Run Code Online (Sandbox Code Playgroud)
请注意,您可能需要设置环境变量PYSPARK_PYTHON,PYSPARK_DRIVER_PYTHON并且它们必须与用于运行 pyspark(驱动程序)的 Python(或 IPython)的 Python 版本相同。
shi*_*ihs 12
我使用Mac操作系统。我解决了问题!
下面是我修复它的方法。
JDK8 看起来运行良好。(https://github.com/jupyter/jupyter/issues/248)
所以我检查了我的 JDK /Library/Java/JavaVirtualMachines,这个路径中只有jdk-11.jdk。
我下载了 JDK8(我点击了链接)。这是:
brew tap caskroom/versions
brew cask install java8
Run Code Online (Sandbox Code Playgroud)
在此之后,我添加了
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home
export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"
Run Code Online (Sandbox Code Playgroud)
到~/.bash_profile文件。(你应该检查你的jdk1.8文件名)
现在可以了!希望这有帮助:)
我在使用 PySpark 时遇到了同样的错误,并将 JAVA_HOME 设置为 Java 11 对我有用(最初设置为 16)。我正在使用 MacOS 和 PyCharm。您可以通过执行以下操作来检查当前的 Java 版本echo $JAVA_HOME。
以下是对我有用的。在我的 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
Run Code Online (Sandbox Code Playgroud)
注意:如果您使用自制程序安装并需要查找路径的位置,您可以$ brew --prefix openjdk@11这样做,它应该返回如下路径:/usr/local/opt/openjdk@11
此时,我可以从终端运行我的 PySpark 程序 - 但是,我的 IDE (PyCharm) 仍然出现相同的错误,直到我全局更改 JAVA_HOME 变量。
要更新变量,请首先通过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
Run Code Online (Sandbox Code Playgroud)
完成此步骤后,我也可以通过 PyCharm IDE 运行 PySpark。
小智 6
这里有很多有价值的提示,但是没有一个能完全解决我的问题,所以我将展示对我在Windows上的Anaconda Jupyter Notebook中工作的过程:
where conda.exewhere python文件目录的路径,然后使用 Windows 环境变量工具将其添加到 Path 变量中。还添加变量JAVA_HOME及其SPARK_HOME相应的路径。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"
使用 . 从笔记本安装 findspark !pip install findspark。
运行import findspark并findspark.init()
运行from 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
小智 5
我的iphython笔记本(IPython 3.2.1)在Linux(ubuntu)上遇到了相同的问题。
在我的情况下,缺少的是在$ PYSPARK_SUBMIT_ARGS环境中设置主URL,如下所示(假设您使用bash):
export PYSPARK_SUBMIT_ARGS="--master spark://<host>:<port>"
Run Code Online (Sandbox Code Playgroud)
例如
export PYSPARK_SUBMIT_ARGS="--master spark://192.168.2.40:7077"
Run Code Online (Sandbox Code Playgroud)
您可以将其放入.bashrc文件中。您在Spark主数据库的日志中获得了正确的URL(使用/sbin/start_master.sh启动主数据库时,将报告此日志的位置)。
在花费数小时尝试许多不同的解决方案后,我可以确认 Java 10 SDK 导致了此错误。在 Mac 上,请导航到 /Library/Java/JavaVirtualMachines 然后运行此命令以完全卸载 Java JDK 10:
sudo rm -rf jdk-10.jdk/
Run Code Online (Sandbox Code Playgroud)
之后,请下载JDK 8,问题将得到解决。
小智 5
Spark 对您使用的 Java 版本非常挑剔。强烈建议您使用 Java 1.8(开源的 AdoptOpenJDK 8 也很好用)。安装后,JAVA_HOME如果您使用 Mac/Linux,请设置 bash 变量:
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
export PATH=$JAVA_HOME/bin:$PATH
我将在这里重新发布我是如何解决它的,以供将来参考。
我如何解决我的类似问题
先决条件:
我做的步骤(注意:根据您的系统设置文件夹路径)
- 设置以下环境变量。
- 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'
现在。有用 !
| 归档时间: |
|
| 查看次数: |
60856 次 |
| 最近记录: |