AWS EMR运行spark-shell与spark-submit出现Unrecognized VM option错误如何排查
AWS EMR Spark JVM参数报错排查方案
你遇到的报错内容如下:
Unrecognized VM option 'CMSClassUnloaadingEnabled' Did you mean '(+/-)CMSClassUnloadingEnabled'? Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit.
该报错本质是JVM启动时加载了无法识别的参数,按以下步骤逐一排查即可:
1 排查参数拼写错误
- 报错提示的参数
CMSClassUnloaadingEnabled存在拼写错误,正确参数名为CMSClassUnloadingEnabled,多写了一个字母a。 - 排查范围包括:
- 当前操作节点的环境变量:
SPARK_OPTS、SPARK_DAEMON_JAVA_OPTS、JAVA_OPTS - Spark配置文件:
spark-defaults.conf中的spark.driver.extraJavaOptions、spark.executor.extraJavaOptions项 - 提交任务时手动加的
--conf参数指定的JVM配置
- 当前操作节点的环境变量:
2 排查JDK版本兼容性问题
- 确认参数拼写无误的前提下,该报错由JDK版本不兼容导致:CMS垃圾回收器在JDK9被标记为废弃,JDK14及以上版本完全移除所有CMS相关参数,配置后会直接报错无法启动JVM。
- 排查方法:在集群节点执行
java -version查看当前JDK版本,AWS EMR 6.x部分版本默认使用JDK11,EMR7.x默认使用JDK17,均已不支持CMS相关参数。 - 对应解决方法:
- 如需保留原有CMS配置,将集群JDK版本切换为JDK8即可正常运行
- 如需使用高版本JDK,删除所有CMS相关JVM参数,替换为G1、ZGC等高版本JDK支持的回收器参数即可
3 排查集群全局配置注入
- 若上述两个位置都没有找到相关参数,检查EMR集群的bootstrap启动脚本、控制台软件配置项中的全局自定义参数,是否有强制注入的CMS相关JVM配置,这类全局注入的参数会覆盖本地的Spark默认配置。
内容的提问来源于stack exchange,提问作者Learn Hadoop
相关产品推荐
相关产品推荐

