java.lang.UnsupportedClassVersionError: Unsupported major.minor version 52.0

1 报错问题

具体报错日志截图如下:
在这里插入图片描述
核心日志提示:

Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/spark/network/sasl/SecretKeyHolder : Unsupported major.minor version 52.0
	at java.lang.ClassLoader.defineClass1(Native Method)

2 问题定位

初步分析该错误是由于jdk版本问题导致, 项目中使用jar包是jdk 1.8版本进行编译,考虑检查所在TDH集群环境jdk版本是否不一致导致。

3 集群环境说明

10.20.37.125 tdh-01 // 节点1
10.20.37.126 tdh-02 // 节点2
10.20.37.127 tdh-03 // 节点3
10.21.3.257  bdata  // 服务器

4 思路分析

jdk版本不兼容,所在集群环境是TDH环境,模式为Spark on Yarn模式,Yarn资源是容器化的,spark任务是提交到node-manager容器里执行,所以需要在yarn对应路径配置JAVA_HOME路径。

5 解决方案

5.1 检查集群对应节点及服务器是否安装jdk及其版本

[root@tdh-01 ~]# 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)
[root@tdh-01 ~]# 
[root@tdh-01 ~]# find / -name '*jdk1.8*'
/var/log/yarn1/jdk1.8.0_191-amd64
/usr/java/jdk1.8.0_191-amd64

特别注意:该路径必须配置的是yarn容器里已经挂载的路径“/var/log/yarn1/jdk1.8.0_191-amd64”,否则访问不到!!!

5.2 确认jdk挂载路径是否为yarn对应路径
由步骤5.1可知,该节点已安装jdk,其版本为“jdk1.8.0_191-amd64”,但是存在两个路径,一个是默认安装路径“/usr/java/jdk1.8.0_191-amd64”,一个是yarn容器里已经挂载的路径“/var/log/yarn1/jdk1.8.0_191-amd64”,因此可以确认正确挂载路径为““/var/log/yarn1/jdk1.8.0_191-amd64”

5.3 在spark-defaults.conf文件里配置以下两个参数**
1) 查找spark-defaults.conf文件

[root@bdata conf]# pwd
/opt/bigdata/env/spark_env/conf
[root@bdata conf]# ll
total 92
-rwxrwxrwx. 1 root root 4579 Jan  6 11:28 core-site.xml
-rwxrwxrwx. 1 1000 1000  996 Oct 29  2019 docker.properties.template
-rwxrwxrwx. 1 1000 1000 1105 Oct 29  2019 fairscheduler.xml.template
-rwxrwxrwx. 1 root root 5242 Jan  6 10:15 hdfs-site.xml
-rwxrwxrwx. 1 root root 8203 Jan  6 12:42 hive-site.xml
-rwxrwxrwx. 1 root root 2025 Jan  4 09:53 log4j.properties
-rwxrwxrwx. 1 1000 1000 2025 Oct 29  2019 log4j.properties.template
-rwxrwxrwx. 1 1000 1000 7801 Oct 29  2019 metrics.properties.template
-rwxrwxrwx. 1 root root   22 Jan  6 15:18 slaves
-rwxrwxrwx. 1 1000 1000  865 Oct 29  2019 slaves.template
-rwxr-xr-x. 1 root root 1422 Jan  6 17:35 spark-defaults.conf
-rwxrwxrwx. 1 1000 1000 1292 Oct 29  2019 spark-defaults.conf.template
-rwxrwxrwx. 1 root root 4500 Jan  6 14:11 spark-env.sh
-rwxrwxrwx. 1 1000 1000 4221 Oct 29  2019 spark-env.sh.template
-rwxrwxrwx. 1 root root 6679 Jan  6 11:45 yarn-site.xml

2)添加spark默认参数

[root@bdata conf]# vim spark-defaults.conf

添加以下两个参数:

spark.yarn.appMasterEnv.JAVA_HOME /var/log/yarn1/jdk1.8.0_191-amd64
spark.executorEnv.JAVA_HOME /var/log/yarn1/jdk1.8.0_191-amd64

6 回顾总结

通过以上方式顺利解决报错问题,期间也踩了不少坑,比如以为TDH环境和CDH环境一样,默认jdk安装路径“/usr/java/jdk1.8.0_191-amd64”就是 spark on yarn模式下对应的jdk路径,实际上在spark-defaults.conf中添加默认路径后依然报同样错误。
所以需要了解YARN底层原理,必须配置的是yarn容器里已经挂载的路径, 如“/var/log/yarn1/jdk1.8.0_191-amd64”,然后执行成功。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值