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

Spark程序运行抛出java.lang.IllegalAccessError错误如何解决?

Spark代码运行报错:IllegalAccessError 解决方案

问题代码

package RDD_Programing

import org.apache.spark.sql.SparkSession

object RDD_Programing {
  def main (args:Array[String]) : Unit = {
    val spark=SparkSession.builder().master(master = "local")
      .appName(name = "rdd programing").getOrCreate()

    val  sc=spark.sparkContext
    sc.setLogLevel("OFF")

    val input_path="input/readme/txt"
    val output_path=""

    val rdd1= sc.textFile(input_path)
    val rdd2= rdd1.flatMap(_.split(""))
    val rdd3= rdd2.map(x=>(x,x.length))
    val rdd4= rdd3.filter{case (x,y) => y >=6}

  rdd4.collect().foreach(f=>{
    println(f)
  })
  }
}

报错信息

Exception in thread "main" java.lang.IllegalAccessError: class org.apache.spark.storage.StorageUtils$ (in unnamed module @0x4c2bb6e0) 无法访问类 sun.nio.ch.DirectBuffer (in module java.base),因为模块 java.base 未将 sun.nio.ch 导出到未命名模块 @0x4c2bb6e0
    at org.apache.spark.storage.StorageUtils$.<init>(StorageUtils.scala:213)
    at org.apache.spark.storage.StorageUtils$.<clinit>(StorageUtils.scala)
    at org.apache.spark.storage.BlockManagerMasterEndpoint.<init>(BlockManagerMasterEndpoint.scala:114)
    at org.apache.spark.SparkEnv$.$anonfun$create$9(SparkEnv.scala:353)
    at org.apache.spark.SparkEnv$.registerOrLookupEndpoint$1(SparkEnv.scala:290)
    at org.apache.spark.SparkEnv$.create(SparkEnv.scala:339)
    at org.apache.spark.SparkEnv$.createDriverEnv(SparkEnv.scala:194)
    at org.apache.spark.SparkContext.createSparkEnv(SparkContext.scala:279)
    at org.apache.spark.SparkContext.<init>(SparkContext.scala:464)
    at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2704)
    at org.apache.spark.sql.SparkSession$Builder.$anonfun$getOrCreate$2(SparkSession.scala:953)
    at scala.Option.getOrElse(Option.scala:189)
    at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:947)
    at RDD_Programing.RDD_Programing$.main(RDD_Programing.scala:8)
    at RDD_Programing.RDD_Programing.main(RDD_Programing.scala)

解决方法

  • 切换到Java 8环境:Spark早期版本(如2.x、3.0.x)对Java 9+的模块化支持不完善,Java 8是Spark官方推荐的兼容版本,切换后可直接解决该权限问题。
  • 保留Java 9+并添加JVM参数:在程序启动时添加JVM参数,开放sun.nio.ch包的访问权限
    • IDEA运行:在Run Configuration的VM Options中加入 --add-exports java.base/sun.nio.ch=ALL-UNNAMED
    • SBT构建:在build.sbt中配置 javaOptions += "--add-exports java.base/sun.nio.ch=ALL-UNNAMED"
    • Maven构建:在pom.xml的maven-compiler-plugin或maven-surefire-plugin中添加相应JVM参数
  • 升级Spark版本:将Spark升级到3.1及以上版本,这些版本已经适配了Java 9+的模块化机制,无需额外配置即可解决该问题。

内容的提问来源于stack exchange,提问作者Muhammad Faishal A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 08:15:34