您的位置:首页 > 编程语言 > Java开发

Hadoop运行jar包jdk版本冲突问题解决

2017-06-04 14:10 591 查看
前言:今天在eclipse上编译jar包放到hadoop上运行的时候出现了版本冲突的问题.

报错内容:

在linux机器上执行如下命令:

hadoop jar XXXXX.jar com.XXX.XXXXXX


出现了如下报错内容:

Exception in thread "main" java.lang.UnsupportedClassVersionError: com/XXX/XXXXXX : 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 java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:270)
at org.apache.hadoop.util.RunJar.run(RunJar.java:214)
at org.apache.hadoop.util.RunJar.main(RunJar.java:136)


出现这个问题是由于eclipse的jdk版本和linux的jdk版本不兼容引起的.

检查jdk版本:

先来看一下linux的jdk版本,在linux上执行命令:

[root@xxx xxxx]# java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)


可以看到linux的jdk版本是1.8.0_131.

再来看一下eclipse的版本. 选择项目右键–>Build Path–>Configure Build Path…,选择Java Build Path,可以看到:



点击”Edit”,可以看到jar包编译的版本是1.8.0_111.



Linux的jdk版本1.8.0_131是高于eclipse的jdk版本1.8.0_111.按照道理来说,jdk版本都是向下兼容的,也就是说高版本的jdk是兼容低版本的.是不是Linux的jdk不起作用呢?好吧,那就重启一下Linux试一下.

重启完毕后再执行命令:

hadoop jar XXXXX.jar com.XXX.XXXXXX


还是报同样的错误.

解决方法:

既然eclipse使用jdk1.8.0_111版本不兼容,那尝试一下修改eclipse的jdk版本到1.7

选择项目右键–>Build Path–>Configure Build Path…,选择Java Build Path,可以看到:



点击”Edit”



这里选择一个1.7的版本,然后点击”Finish”.返回上一级窗口,再点击”Java comliper”,会出现如下图,点击Apply,最后点击”OK”退出.



再次编译导出jar包上传到Linux上.再次执行命令:

[root@xxx xxxxx]# hadoop jar xxxx com.xxx.xxxxxxx
17/05/30 14:00:38 WARN mapreduce.JobResourceUploader: Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this.
17/05/30 14:00:39 INFO input.FileInputFormat: Total input paths to process : 1
17/05/30 14:00:39 INFO mapreduce.JobSubmitter: number of splits:1
17/05/30 14:00:39 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1496121772589_0003
17/05/30 14:00:39 INFO impl.YarnClientImpl: Submitted application application_1496121772589_0003
17/05/30 14:00:40 INFO mapreduce.Job: The url to track the job: http://node3:8088/proxy/application_1496121772589_0003/ 17/05/30 14:00:40 INFO mapreduce.Job: Running job: job_1496121772589_0003
17/05/30 14:00:47 INFO mapreduce.Job: Job job_1496121772589_0003 running in uber mode : false
17/05/30 14:00:47 INFO mapreduce.Job:  map 0% reduce 0%
17/05/30 14:00:54 INFO mapreduce.Job:  map 100% reduce 0%
17/05/30 14:01:01 INFO mapreduce.Job:  map 100% reduce 100%
17/05/30 14:01:02 INFO mapreduce.Job: Job job_1496121772589_0003 completed successfully


可以看到这次没有问题了.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐