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

未安装Spark运行简单应用时遇InaccessibleObjectException错误求助

Spark应用启动报错解决方案

问题背景

学习Spark时尝试在未安装Spark的环境下运行输出DataFrame前5行的简单应用,启动时报错,已尝试Snowflake相关方案、StackOverflow方法及重装Java,均未解决。

环境信息

  • IDE:Eclipse IDE for Enterprise Java and Web Developers(含孵化组件),版本2022-09 (4.25.0),构建ID 20220908-1902
  • Java版本:openjdk version "11.0.12" 2021-07-20,OpenJDK Runtime Environment Microsoft-25199 (build 11.0.12+7),OpenJDK 64-Bit Server VM Microsoft-25199 (build 11.0.12+7, mixed mode)

错误日志

Exception in thread "main" java.lang.ExceptionInInitializerError
    at org.apache.spark.unsafe.array.ByteArrayMethods.<clinit>(ByteArrayMethods.java:54)
    at org.apache.spark.internal.config.package$.<init>(package.scala:1095)
    at org.apache.spark.internal.config.package$.<clinit>(package.scala)
    at org.apache.spark.SparkConf$.<init>(SparkConf.scala:654)
    at org.apache.spark.SparkConf$.<clinit>(SparkConf.scala)
    at org.apache.spark.SparkConf.set(SparkConf.scala:94)
    at org.apache.spark.SparkConf.set(SparkConf.scala:83)
    at org.apache.spark.sql.SparkSession$Builder.$anonfun$getOrCreate$1(SparkSession.scala:916)
    at scala.collection.mutable.HashMap.$anonfun$foreach$1(HashMap.scala:149)
    at scala.collection.mutable.HashTable.foreachEntry(HashTable.scala:237)
    at scala.collection.mutable.HashTable.foreachEntry$(HashTable.scala:230)
    at scala.collection.mutable.HashMap.foreachEntry(HashMap.scala:44)
    at scala.collection.mutable.HashMap.foreach(HashMap.scala:149)
    at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:916)
    at net.jgp.books.spark.ch01.lab100_csv_to_dataframe.CsvToDataframeApp.start(CsvToDataframeApp.java:32)
    at net.jgp.books.spark.ch01.lab100_csv_to_dataframe.CsvToDataframeApp.main(CsvToDataframeApp.java:21)
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make private java.nio.DirectByteBuffer(long,int) accessible: module java.base does not "opens java.nio" to unnamed module @35dab4eb
    at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
    at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
    at java.base/java.lang.reflect.Constructor.checkCanSetAccessible(Constructor.java:188)
    at java.base/java.lang.reflect.Constructor.setAccessible(Constructor.java:181)
    at org.apache.spark.unsafe.Platform.<clinit>(Platform.java:56)
    ... 16 more

解决方案

核心原因

Java 9及以上引入的模块系统限制了反射访问权限,Spark代码运行在未命名模块中,而java.base模块未将java.nio包开放给未命名模块,导致反射调用失败。

具体解决步骤

  1. 添加JVM启动参数
    在运行应用时,给JVM添加以下参数以开放模块访问权限:

    --add-opens java.base/java.nio=ALL-UNNAMED
    
  2. 在Eclipse中配置参数

    • 右键项目 → 选择Run As → Run Configurations
    • 在弹出窗口中找到你的Java应用配置,切换到Arguments标签页
    • 在VM arguments输入框中添加上述参数
    • 点击Apply保存配置后重新运行应用

额外检查项

  • 确认Spark版本与Java版本兼容:Spark 3.0及以上支持Java 11,建议使用Spark 3.1+版本
  • 检查项目依赖:确保spark-core、spark-sql等依赖的scope为compile(而非provided),因为未安装Spark环境,需要将依赖打包到应用中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 13:50:21