码迷,mamicode.com
首页 > 编程语言 > 详细

spark提交jar包时出现unsupported major.minor version 52.0错误的解决方案

时间:2017-09-04 11:54:29      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:方案   资料   java_home   一个   特性   settings   产生   bsp   进入   

一、问题:

    最近在spark集群上做一个项目,打包提交jar包时,出现了unsupported major.minor version 52.0的报错,而在local模式运行却能正常运行!

二、错误原因:

    查阅诸多资料得出的结论就是:项目编译得到的class文件的版本高于运行环境中jre的版本号,高版本JDK编译的class不能在低版本的jvm虚拟机下运行,否则就会报这类错,因此无法运行!49,50,51,52是Java编译器内部的版本号,版本对应信息如下:

  Unsupported major.minor version 52.0 对应于 JDK1.8(JRE1.8) 

  Unsupported major.minor version 51.0 对应于 JDK1.7(JRE1.7) 

  Unsupported major.minor version 50.0 对应于 JDK1.6(JRE1.6) 

  Unsupported major.minor version 49.0 对应于 JDK1.5(JRE1.5) 

 

  因此出现问题的原因就是:编译产生的class文件是jdk1.8版本的,而jvm环境低于1.8,因此报错:

三、解决过程:

    首先我先去产看了一下编译产生的class文件的版本号,进入工程目录的class文件所在文件夹,使用 javap -verbose classname.class命令(classname是编译得到的class名,这里我的是JTool)查看编译版本如下:

    技术分享

  major version: 52,即编译的jdk版本是1,8的,因此必须运行在1.8的jvm中,接下来我又去查看ubuntu的jdk版本:

  用java -version查看jdk版本如下:

    技术分享

  可以看出,ubuntu的java版本也是jdk1.8的,因此应该是可以去正常运行的!考虑到这是在spark集群上运行jar包,我有思考是不是spark配置里面默认使用了低版本的jdk,导致问题的出现,便又去查看了spark的环境配置文件spark-env.sh,如下:

         技术分享

  果然,spark配置文件中的java版本是jdk1.7的,和ubuntu环境配置的java版本不一致,这就导致了问题的出现!只要把spark-env.sh中JAVA_HOME的参数修改为已安装的jdk目录就可以了!

 至此,问题解决!

四、补充:

   众所周知,软件基本都有向下兼容的特性,因此高版本的jdk是可以编译产生低版本的class文件的,在IntelliJ IDEA中的方法如下:
  首先,进入settings

    技术分享

  然后,找到Java Compiler那一项:

    技术分享

  做如下修改:    

技术分享

     这样就可以在jdk1.8的环境下,编译产生1.7的class文件,也就可以在对应低版本的jvm中运行了!

spark提交jar包时出现unsupported major.minor version 52.0错误的解决方案

标签:方案   资料   java_home   一个   特性   settings   产生   bsp   进入   

原文地址:http://www.cnblogs.com/liujStudy/p/7217480.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!