IntelliJ IDEA 配置运行 Spark(Scala)程序遇到的 Kryo 报错与解决方案全记录

本文记录了我在使用 IntelliJ IDEA(2025.1.1.1 Ultimate)运行 Spark 项目时遇到的一系列问题,尤其是涉及 Kryo 序列化失败、Java 模块访问受限等问题,并详细总结了解决方法,供大数据初学者参考。


🧩 项目背景

  • 开发语言:Scala 2.13
  • 项目管理工具:Maven
  • 大数据组件:Spark 4.0.0
  • 开发环境:Arch Linux + IntelliJ IDEA 2025.1.1.1
  • JDK 版本:Java 17

🚧 遇到的主要问题与错误

在使用 exec-maven-plugin 或 IntelliJ IDEA 点击运行时,出现如下典型报错:

❌ Kryo 报错

Exception in thread “main” java.lang.IllegalArgumentException: Unable to create serializer “***.esotericsoftware.kryo.serializers.FieldSerializer” for class: java.nio.HeapByteBuffer

module java.base does not “opens java.nio” to unnamed module


### ❌ VM 启动失败

Error: Could not create the Java Virtual Machine.
Error: A fatal exception has o***urred. Program will exit.


### ❌ 类找不到

java.lang.ClassNotFoundException: org.example.xt1


---

## 🛠️ 问题分析与解决方案

### ✅ 1. Maven 插件配置错误导致无法传入 JVM 参数

#### 报错示例:

[ERROR] Parameter ‘jvmArgs’ is unknown for plugin ‘exec-maven-plugin’


#### 正确配置方法:

```xml
<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>3.1.0</version>
  <configuration>
    <mainClass>org.example.YourMainClass</mainClass>
    <arguments>
      <argument>--add-opens=java.base/java.nio=ALL-UNNAMED</argument>
      <argument>--add-opens=java.base/java.util=ALL-UNNAMED</argument>
      <argument>--add-opens=java.base/java.lang.invoke=ALL-UNNAMED</argument>
    </arguments>
  </configuration>
</plugin>

✅ 2. IntelliJ IDEA 运行时无法设置 VM options

默认状态:

Run → Edit Configurations 中不显示 VM options。

解决步骤:
  1. 点击右侧窗口上方的 “🛠 Modify options”
  2. 选择 Add VM options
  3. 在新出现的输入框中添加如下参数:
--add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED
  1. 点击 OK / Apply 保存。

✅ 3. Scala 源码路径未配置正确

确保 Scala 源码在以下目录:

src/main/scala/org/example/YourMainClass.scala

如果没有 scala 文件夹,可手动创建,并标记为 Sources Root


✅ 最终效果

添加 VM 参数并调整代码路径后,无论是:

mvn exec:java

还是点击 IntelliJ 的绿色运行按钮,程序均能正常启动。


🧠 总结

本次遇到的问题本质上源于:

  • Java 17 模块限制了反射访问(Kryo 无法访问 java.nio.Buffer
  • Maven 插件配置不当
  • IntelliJ 默认隐藏 VM 配置项
  • Scala 文件路径未设置为源码路径

解决关键在于 添加 VM 启动参数

--add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED

💬 结语

如果你也在用 IntelliJ 开发 Spark(Scala)项目,遇到类似错误,希望这篇笔记能帮你节省排查时间。

如有疑问或建议,欢迎评论交流!一起成为更强的大数据工程师 🚀

转载请说明出处内容投诉
CSS教程网 » IntelliJ IDEA 配置运行 Spark(Scala)程序遇到的 Kryo 报错与解决方案全记录

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买