IDEA本地运行Spark3.2.0报IllegalAccessError错误如何解决
问题解决方案
1 首先修复POM依赖版本不匹配问题
你当前的依赖存在严重的版本不一致问题:spark-core、spark-sql使用3.2.0版本对应Scala 2.13,而spark-hive使用2.1.3版本对应Scala 2.11,跨大版本混用会直接引发兼容异常。
修正后的spark-hive依赖如下:
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-hive --> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-hive_2.13</artifactId> <version>3.2.0</version> <!-- 本地运行时可先注释provided scope,避免IDEA找不到依赖 --> <!-- <scope>provided</scope> --> </dependency>
2 解决JDK模块访问限制问题
报错的核心原因是JDK 9及以上版本引入了Java平台模块系统,默认禁止访问sun.nio.ch等内部API,Spark 3.2.0版本默认对高版本JDK的兼容性不足,有两种解决方案可选:
- 方案一(最稳妥):将项目的JDK版本切换为JDK 8,Spark 3.x全系列对JDK 8的兼容性最好,不需要额外配置即可正常运行
- 方案二(保留高版本JDK):给JVM添加启动参数,开放对应内部包的访问权限
如果你使用IntelliJ IDEA运行,操作路径为:点击右上角运行配置 -> 编辑配置 -> 找到对应主类的运行配置 -> 在「VM选项」框中添加如下参数:
如果后续还有其他类似的访问报错,可以按需追加其他导出参数:--add-exports java.base/sun.nio.ch=ALL-UNNAMED--add-exports java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.nio=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED
3 验证生效
修改完成后右键点击pom.xml选择Maven -> 重新加载项目,重新运行主类即可。
内容的提问来源于stack exchange,提问作者Mariusz Kowalewski
相关产品推荐
相关产品推荐

