Spark API Scala程序创建时SparkContext初始化报错求助
Spark 3.5.0 + JDK 19 初始化SparkContext 触发IllegalAccessError 解决方案
问题原因
JDK 9及以上引入的模块化系统限制了内部API的访问。Spark的StorageUtils类需要调用Java内部API sun.nio.ch.DirectBuffer,但JDK的java.base模块默认不会将该包暴露给未命名模块(Spark当前jar包未适配Java模块化),因此触发访问权限错误。
解决方法
1. 添加JVM参数(适用于本地IDE运行或集群提交)
通过JVM参数显式允许Spark访问所需的内部API:
- IDE运行(如IntelliJ):
在Run Configuration的VM Options中添加:--add-exports java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.base/java.nio=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED - spark-submit提交作业:
在提交命令中通过--driver-java-options传入参数:spark-submit --class ReadCSVFile \ --driver-java-options "--add-exports java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.base/java.nio=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED" \ your-application.jar
2. 降级JDK版本
如果不想配置JVM参数,可将JDK版本降级至JDK 8。JDK 8没有模块化机制,不会出现此类权限问题,且Spark 3.5.0完全兼容JDK 8。
内容的提问来源于stack exchange,提问作者Ahed Hamad
相关产品推荐
相关产品推荐

