一、问题:

    最近在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中运行了!

最新文章

  1. halcon运行版设置
  2. 1.Android入门学习
  3. jquery基础总结
  4. 【Java 基础篇】【第一课】HelloWorld
  5. 检测openOffice关闭 自动重启
  6. [网络配置相关]——ifconfig命令、ip命令、route命令
  7. 【Todo】Kerberos、OpenSSL、OAuth2.0等一系列验证权限安全相关学习
  8. hdu1213 How Many Tables
  9. JavaWeb 学习的第一阶段总结
  10. 2328: [HNOI2011]赛车游戏 - BZOJ
  11. (转) Data structures
  12. a web-based music player(GO + html5)
  13. SecureCRT - 使用方法和技巧
  14. 程序员必知的Python陷阱与缺陷列表
  15. jmeter问题
  16. mysql 文件操作 表
  17. bootstrap-year-calendar全年日历插件
  18. day 7 -10 集合,文本、文件操作,函数
  19. HDU 4632 Palindrome subsequence (区间DP)
  20. Nodejs之mssql模块的封装

热门文章

  1. 如何改变vim中的光标形状 : 在插入状态下显示为 beam?而在 其他 状态下 为 block?
  2. C# 利用反射动态给模型Model 赋值
  3. mysql基础篇(上篇)
  4. Pandas 基础(16) - Holidays
  5. golang相关书签
  6. package.json bin的作用
  7. Echart使用笔记
  8. 简单的python购物车
  9. 客户端与服务器之间通信收不到信息——readLine()
  10. 【二分查找】 跳石头NOIP2015提高组 D2T1