在Linux系统jdk17环境下启动flink1.17,输入start-cluster.sh,输入jps,flink相关进程不启动,
查看日志报错:
Caused by: java.lang.IllegalAccessErrorCaused by: java.lang.IllegalAccessError: class org.apache.flink.util.NetUtils (in unnamed module @0x10b48321) cannot access class sun.net.util.IPAddressUtil (in module java.base) because module java.base does not export sun.net.util to unnamed module @0x10b48321
经过文心一言的指点(虽然是文心一言指出解决方法,但我问了好多遍、换着问法才终于问出来了。。),这是 Java 模块系统中的一个常见问题。在 Java 9 及更高版本中,模块系统引入了新的模块化概念,这意味着某些包和类不再默认可见。在你的错误信息中,
sun.net.util.IPAddressUtil
位于
java.base
模块中,并且没有导出给其他模块。
Apache Flink 在其内部使用了
sun.net.util.IPAddressUtil
,但由于 Java 模块系统的限制,它无法访问这个类。
解决这个问题的方法是更改 Java 运行时环境,使其对 Flink 运行时环境暴露
sun.net.util.IPAddressUtil
。可以通过以下步骤来实现:
1、添加 JVM 参数:在启动 Flink 应用程序时,添加
--add-exports
JVM 参数来暴露
sun.net.util
包。例如:
java --add-exports java.base/sun.net.util=ALL-UNNAMED
(这个我加在了start-cluster.sh文件里,但是不起作用。。)
2、更改 Flink 配置:如果使用的是 Flink 的集群模式,在
flink-conf.yaml
文件中添加以下配置:
env.java.opts: --add-exports java.base/sun.net.util=ALL-UNNAMED
flink可以正常运行了!!
通过这个方法终于把困扰我多天的问题解决了。。
版权归原作者 fragment~ 所有, 如有侵权,请联系我们删除。