You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行spark-submit命令报Java模块访问异常问题求助

问题原因分析

该报错的根本原因是Java版本与当前使用的Apache Spark版本的兼容性冲突:

  • 从Java 9开始引入了JPMS(Java平台模块化系统),默认禁止了对JDK内部API的反射访问,你遇到的java.lang.reflect.InaccessibleObjectException就是Spark的底层组件尝试通过反射访问java.nio包下的内部构造方法时,被Java的模块化安全机制拦截导致的。
  • 你当前使用的Java版本为9及以上版本,而你安装的Spark版本没有配置对应的JVM适配参数,或者版本本身不支持高版本Java。
解决方案

方案1:更换适配的Java版本(最稳定,推荐)

绝大多数学习场景使用的Spark 2.x、Spark 3.0~3.2版本的官方推荐运行环境为Java 8,操作步骤:

  1. 下载并安装Oracle JDK 8 或者OpenJDK 8
  2. 修改系统环境变量JAVA_HOME指向JDK 8的安装路径,将%JAVA_HOME%\bin添加到系统Path的最靠前位置
  3. 新开cmd窗口执行java -version确认版本为1.8.x后,重新运行spark-submit ratings-counter.py即可

方案2:添加JVM启动参数适配高版本Java(适合不想更换Java版本的场景)

如果需要保留当前高版本Java,可在运行spark-submit时添加对应的JVM开放参数,命令如下:

spark-submit --conf "spark.driver.extraJavaOptions=--add-opens java.base/java.nio=ALL-UNNAMED --add-opens java.base/sun.nio.ch=ALL-UNNAMED" --conf "spark.executor.extraJavaOptions=--add-opens java.base/java.nio=ALL-UNNAMED --add-opens java.base/sun.nio.ch=ALL-UNNAMED" ratings-counter.py

如果后续运行还出现其他模块反射报错,可以继续追加对应的--add-opens参数即可。
如果想永久生效,可将上述两个配置参数添加到Spark安装目录下conf/spark-defaults.conf文件中,不需要每次运行都加参数。

内容的提问来源于stack exchange,提问作者collapseCorpse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 23:36:06