Spark java.lang.UnsupportedClassVersionError: xxxxxx: Unsupported major.minor version 52.0 解决方案

在运行Spark程序时,出现如下错误:

Exception in thread "main" java.lang.UnsupportedClassVersionError: com/company/bi/spark/UserInfoToHbase : 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 java.lang.ClassLoader.loadClass(ClassLoader.java:358)
	at org.apache.spark.deploy.yarn.ApplicationMaster.startUserApplication(ApplicationMaster.scala:639)
	at org.apache.spark.deploy.yarn.ApplicationMaster.runDriver(ApplicationMaster.scala:392)
	at org.apache.spark.deploy.yarn.ApplicationMaster.run(ApplicationMaster.scala:252)
	at org.apache.spark.deploy.yarn.ApplicationMaster$$anonfun$main$1.apply$mcV$sp(ApplicationMaster.scala:774)
	at org.apache.spark.deploy.SparkHadoopUtil$$anon$1.run(SparkHadoopUtil.scala:67)
	at org.apache.spark.deploy.SparkHadoopUtil$$anon$1.run(SparkHadoopUtil.scala:66)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.security.auth.Subject.doAs(Subject.java:415)
	at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1920)
	at org.apache.spark.deploy.SparkHadoopUtil.runAsSparkUser(SparkHadoopUtil.scala:66)
	at org.apache.spark.deploy.yarn.ApplicationMaster$.main(ApplicationMaster.scala:772)
	at org.apache.spark.deploy.yarn.ApplicationMaster.main(ApplicationMaster.scala)

当看到Unsupported major.minor version 52.0错误信息时,就可以确定是由于JDK版本低于1.8导致的。即编译时使用了JDK1.8,但是运行环境中的JDK版本低于1.8导致的。

我检查了集群中所有的主机,

[[email protected] spark_job_file]# java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

发现所有的主机的JDK都是1.8。

经过检查,发现部分主机的环境变量中没有JAVA_HOME,于是有了以下两个方案:

方案1:由于我的运行模式为cluster,我在spark2-submit中添加了两个配置项,

--conf "spark.executorEnv.JAVA_HOME=/usr/java/jdk1.8.0_191-amd64" 
--conf "spark.yarn.appMasterEnv.JAVA_HOME=/usr/java/jdk1.8.0_191-amd64"

强制指定了JDK的路径,但是这有个前提就是spark所有节点的上的java_home必须一致,为了保证这一点,在安装JDK的时候可以使用 rpm包安装,这样默认路径就是一致的。

方案2:给所有的主机都配上JAVA_HOME,并指定到JDK1.8的安装路径

你可能感兴趣的:(大数据,Spark)