作者:看具戴_370 | 来源:互联网 | 2023-08-31 13:31
如果Spark执行报错Unsupported major.minor version 52.0,一般是因为YARN所在的机器配置的JDK是1.7的,而高版本的Spark(从2.2.0起)需要运行在Java 8以上。
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/spark/network/sasl/SecretKeyHolder : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2570)
at java.lang.Class.getMethod0(Class.java:2813)
at java.lang.Class.getMethod(Class.java:1663)
at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)
如果不想对YARN的JDK版本进行改动,那么可以在Spark指定自己的JDK版本,不影响YARN和其他集群组件。Spark提交任务时添加两个配置项即可,同时确保YARN集群的所有节点都安装了JDK1.8到相同路径(下载JDK的tar.gz包,解压到相同路径)。
--conf "spark.executorEnv.JAVA_HOME=/usr/java/jdk1.8.0_181"
--conf "spark.yarn.appMasterEnv.JAVA_HOME=/usr/java/jdk1.8.0_181"
现在用spark-submit时,加上这两个配置项。
spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster --conf "spark.executorEnv.JAVA_HOME=/usr/java/jdk1.8.0_181" --conf "spark.yarn.appMasterEnv.JAVA_HOME=/usr/java/jdk1.8.0_181" /opt/spark-2.4.0-bin-hadoop2.6/examples/jars/spark-examples_2.11-2.4.0.jar 10
如果想要全局生效,可以配置到spark-defaults.conf文件里,之后在使用spark-submit时就不需要指定这两个配置项了。
cd /opt/spark-2.4.0-bin-hadoop2.6/conf
vi spark-defaults.conf
spark.master=yarn
spark.submit.deployMode=client
spark.executorEnv.JAVA_HOME=/usr/java/jdk1.8.0_181
spark.yarn.appMasterEnv.JAVA_HOME=/usr/java/jdk1.8.0_181
spark.driver.host=192.168.X.X
现在spark-submit语句可以更简洁。
spark-submit --class org.apache.spark.examples.SparkPi /opt/spark-2.4.0-bin-hadoop2.6/examples/jars/spark-examples_2.11-2.4.0.jar 10
欢迎关注我的微信公众号“九万里大数据”,原创技术文章第一时间推送。欢迎访问原创技术博客网站 jwldata.com[1],排版更清晰,阅读更爽快。
引用链接
[1]
jwldata.com: https://www.jwldata.com