spark提交jar包时出现unsupported major.minor version 52.0错误的解决方案
一、问题:
最近在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中运行了!
最新文章
- halcon运行版设置
- 1.Android入门学习
- jquery基础总结
- 【Java 基础篇】【第一课】HelloWorld
- 检测openOffice关闭 自动重启
- [网络配置相关]——ifconfig命令、ip命令、route命令
- 【Todo】Kerberos、OpenSSL、OAuth2.0等一系列验证权限安全相关学习
- hdu1213 How Many Tables
- JavaWeb 学习的第一阶段总结
- 2328: [HNOI2011]赛车游戏 - BZOJ
- (转) Data structures
- a web-based music player(GO + html5)
- SecureCRT - 使用方法和技巧
- 程序员必知的Python陷阱与缺陷列表
- jmeter问题
- mysql 文件操作 表
- bootstrap-year-calendar全年日历插件
- day 7 -10 集合,文本、文件操作,函数
- HDU 4632 Palindrome subsequence (区间DP)
- Nodejs之mssql模块的封装