Spark 错误 - 不支持的类文件主版本

2025-03-19 08:56:00
admin
原创
53
摘要:问题描述:我正在尝试在 Mac 上安装 Spark。我使用 home-brew 安装了 spark 2.4.0 和 Scala。我在 anaconda 环境中安装了 PySpark,并使用 PyCharm 进行开发。我已将其导出到我的 bash 配置文件:export SPARK_VERSION=`ls /u...

问题描述:

我正在尝试在 Mac 上安装 Spark。我使用 home-brew 安装了 spark 2.4.0 和 Scala。我在 anaconda 环境中安装了 PySpark,并使用 PyCharm 进行开发。我已将其导出到我的 bash 配置文件:

export SPARK_VERSION=`ls /usr/local/Cellar/apache-spark/ | sort | tail -1`
export SPARK_HOME="/usr/local/Cellar/apache-spark/$SPARK_VERSION/libexec"
export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH
export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.9-src.zip:$PYTHONPATH

但我无法让它工作。

我怀疑这是由于读取回溯时 Java 版本所致。如果能帮助修复此问题,我将不胜感激。如果我能提供任何除回溯之外有用的信息,请发表评论。

我收到以下错误:

Traceback (most recent call last):
  File "<input>", line 4, in <module>
  File "/anaconda3/envs/coda/lib/python3.6/site-packages/pyspark/rdd.py", line 816, in collect
    sock_info = self.ctx._jvm.PythonRDD.collectAndServe(self._jrdd.rdd())
  File "/anaconda3/envs/coda/lib/python3.6/site-packages/py4j/java_gateway.py", line 1257, in __call__
    answer, self.gateway_client, self.target_id, self.name)
  File "/anaconda3/envs/coda/lib/python3.6/site-packages/py4j/protocol.py", line 328, in get_return_value
    format(target_id, ".", name), value)
py4j.protocol.Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe.
: java.lang.IllegalArgumentException: Unsupported class file major version 55

解决方案 1:

编辑Spark 3.0 支持 Java 11,因此你需要升级

Spark 可在 Java 8/11、Scala 2.12、Python 2.7+/3.4+ 和 R 3.1+ 上运行。自 Spark 3.0.0 起,不再支持 8u92 之前的 Java 8



原始答案

在 Spark 支持 Java 11 或更高版本(希望在最新文档中提及)之前,您必须添加一个标志来将您的 Java 版本设置为 Java 8。

从 Spark 2.4.x 开始

Spark 可在Java 8、Python 2.7+/3.4+ 和 R 3.1+ 上运行。对于 Scala API,Spark 2.4.4 使用 Scala 2.12。您需要使用兼容的 Scala 版本 (2.12.x)

在 Mac/Unix 上,请参阅asdf-java以安装不同的 Java

在 Mac 上,我可以在我.bashrc

export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)

在 Windows 上,请查看 Chocolately,但实际上只需使用 WSL2 或 Docker 即可运行 Spark。


您也可以设置此项,spark-env.sh而不是为整个配置文件设置变量。

当然,这意味着你除了现有的 Java 11之外,还需要安装 Java 8

解决方案 2:

使用 Java 11 运行 Jupyter Notebook 和 Spark 时遇到了这个问题。我按照以下步骤安装并配置了 Java 8。

安装Java 8:

$ sudo apt install openjdk-8-jdk

由于我已经安装了 Java 11,因此我使用以下命令将默认 Java 设置为版本 8:

$ sudo update-alternatives --config java

选择 Java 8,然后确认您的更改:

$ java -version

输出应类似于:

openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-2ubuntu0.18.04.1-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

我现在能够在 Jupyter Notebook 中成功运行 Spark。上述步骤基于以下指南:https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-on-ubuntu-18-04

解决方案 3:

我发现在脚本开头通过findsparkjava8以及os添加spark 位置是最简单的解决方案:

import findspark
import os
spark_location='/opt/spark-2.4.3/' # Set your own
java8_location= '/usr/lib/jvm/java-8-openjdk-amd64' # Set your own
os.environ['JAVA_HOME'] = java8_location
findspark.init(spark_home=spark_location) 

解决方案 4:

这里的问题在于 PySpark 的某些功能需要 Java 8。Spark 2.2.1 在 Java 9 及更高版本上存在问题。建议的解决方案是安装 Java 8。

您可以专门安装 java-8,并将其设置为您的默认 java,然后重试。

要安装 Java 8,

sudo apt install openjdk-8-jdk

要更改默认 Java 版本,请按照以下步骤操作。您可以使用命令

 update-java-alternatives --list

列出所有可用的 Java 版本。

通过运行以下命令设置默认值:

sudo update-alternatives --config java

选择您想要的 Java 版本。在提供的列表中提供准确的数字。然后检查您的 Java 版本java -version,它应该已更新。同时设置 JAVA_HOME 变量。

要设置 JAVA_HOME,您必须找到特定的 Java 版本和文件夹。请关注此SO 讨论,以全面了解如何设置 java home 变量。由于我们将使用 java 8,因此我们的文件夹路径是/usr/lib/jvm/java-8-openjdk-amd64/。只需转到/usr/lib/jvm文件夹并查看可用的文件夹是什么。使用ls -l查看文件夹及其软链接,因为这些文件夹可以是某些 java 版本的快捷方式。然后转到您的主目录cd ~并编辑 bashrc 文件

cd ~
gedit .bashrc

然后将以下几行添加到文件,保存并退出。

## SETTING JAVA HOME
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin

之后,为了使您的操作生效,source ~/.bashrc 在终端中输入并运行

解决方案 5:

在 Windows(Windows 10)上,您可以通过安装 jdk-8u201-windows-x64.exe 并将系统环境变量重置为正确版本的 JAVA JDK 来解决此问题:

JAVA_HOME->C:\Program Files\Java\jdk1.8.0_201。

不要忘记重新启动终端,否则环境变量的重置将不会生效。

解决方案 6:

我只是想在这里发表一下我的看法,因为这将为使用PyCharm(尤其是运行配置)的人节省几个小时的时间。通过修改 JAVA_HOME 和 PATH 环境变量(就像这里大多数人推荐的那样)将您的.bashrc.bash_profile指向 Java 8 后,您会注意到,当您使用 PyCharm 的运行配置运行 Spark 时,它仍然不会选择正确的 Java。看起来 PyCharm 存在一些问题(我在 Mac Catalina 中使用 PyCharm Professional 2020.2)。此外,当您使用 PyCharm 的终端运行它时,它运行良好。这证实了 PyCharm 出了问题。为了让 PyC​​harm 的运行配置选择新的 JAVA,我必须在运行配置中专门添加 JAVA_HOME 环境变量,如下所示-
在此处输入图片描述

并且成功了!

另一个可行的选择是检查运行配置窗口Include system environment variables option中的(见上图)并重新启动 PyCharmEnvironment Variables

解决方案 7:

对于 Debian 10“buster”用户,该软件包中提供了 Java 8 JRE nvidia-openjdk-8-jre

使用安装

sudo apt install nvidia-openjdk-8-jre

JAVA_HOME然后在运行时设置pyspark,例如:

JAVA_HOME=/usr/lib/jvm/nvidia-java-8-openjdk-amd64/ pyspark

解决方案 8:

我在 Windows 中遇到了同样的问题,并且我已将 JAVA_HOME 添加到环境变量路径中:

JAVA_HOME:C:\Program Files\Java\jdk-11.0.1

解决方案 9:

你好,实际上,为了确保你设置了正确的 SPARK_HOME PATH,你可以使用这个 python 脚本来找到它:https://github.com/apache/spark/blob/master/python/pyspark/find_spark_home.py

python3 find_spark_home.py 

/usr/local/lib/python3.7/site-packages/pyspark

在我的 Mac 上,在终端上:

vim ~/.bashrc

并添加路径:

export JAVA_HOME=/Library/java/JavaVirtualMachines/adoptopenjdk-8.jdk/contents/Home/

export SPARK_HOME=/usr/local/lib/python3.7/site-packages/pyspark

export PYSPARK_PYTHON=/usr/local/bin/python3

最后应用更改

source ~/.bashrc

解决方案 10:

出现此问题的原因是您在 JAVA_HOME 环境变量中设置的 Java 版本。

旧 JAVA 路径:/usr/lib/jvm/java-1.11.0-openjdk-amd64

解决方案:将 JAVA_HOME 设置为 /usr/lib/jvm/java-8-openjdk-amd64

它会起作用的!!!

请注意我的错误是:

文件“/home/tms/myInstallDir/spark-2.4.5-bin-hadoop2.7/python/pyspark/rdd.py”,第 816 行,在 collect sock_info = self.ctx._jvm.PythonRDD.collectAndServe(self._jrdd.rdd()) 文件“/home/tms/myInstallDir/spark-2.4.5-bin-hadoop2.7/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py”,第 1257 行,在call
文件“/home/tms/myInstallDir/spark-2.4.5-bin-hadoop2.7/python/pyspark/sql/utils.py”,第 79 行,在 deco 中引发 IllegalArgumentException(s.split(': ', 1)[1], stackTrace) pyspark.sql.utils.IllegalArgumentException:u'不支持的类文件主版本 55'

解决方案 11:

在 macOS 上:使用以下命令在笔记本电脑上安装 Java8:

brew tap AdoptOpenJDK/openjdk
brew cask install adoptopenjdk8
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2482  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1533  
  PLM(产品生命周期管理)项目对于企业优化产品研发流程、提升产品质量以及增强市场竞争力具有至关重要的意义。然而,在项目推进过程中,范围蔓延是一个常见且棘手的问题,它可能导致项目进度延迟、成本超支以及质量下降等一系列不良后果。因此,有效避免PLM项目范围蔓延成为项目成功的关键因素之一。以下将详细阐述三大管控策略,助力企业...
plm系统   0  
  PLM(产品生命周期管理)项目管理在企业产品研发与管理过程中扮演着至关重要的角色。随着市场竞争的加剧和产品复杂度的提升,PLM项目面临着诸多风险。准确量化风险优先级并采取有效措施应对,是确保项目成功的关键。五维评估矩阵作为一种有效的风险评估工具,能帮助项目管理者全面、系统地评估风险,为决策提供有力支持。五维评估矩阵概述...
免费plm软件   0  
  引言PLM(产品生命周期管理)开发流程对于企业产品的全生命周期管控至关重要。它涵盖了从产品概念设计到退役的各个阶段,直接影响着产品质量、开发周期以及企业的市场竞争力。在当今快速发展的科技环境下,客户对产品质量的要求日益提高,市场竞争也愈发激烈,这就使得优化PLM开发流程成为企业的必然选择。缺陷管理工具和六西格玛方法作为...
plm产品全生命周期管理   0  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用