如果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.0at 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/confvi spark-defaults.confspark.master=yarnspark.submit.deployMode=clientspark.executorEnv.JAVA_HOME=/usr/java/jdk1.8.0_181spark.yarn.appMasterEnv.JAVA_HOME=/usr/java/jdk1.8.0_181spark.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
文章转载自九万里大数据,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




