我正在开发一个hadoop项目,它部署在测试和生产环境中。虽然在测试环境中一切正常,但在生产环境中相同的代码/构建失败,错误如下:
线程“main”java.lang.unsupportedclassversionerror:com/package/vo/myclassname:unsupported major.minor version 51.0 at java.lang.classloader.defineclass1(本机方法)at java.lang.classloader.defineclasscond(classloader)。java:631)在java.lang.classloader.defineclass(classloader。java:615)在java.security.secureclassloader.defineclass(secureclassloader。java:141)在java.net.urlclassloader.defineclass(urlclassloader。java:283)在java.net.urlclassloader.access$000(urlclassloader。java:58)在java.net.urlclassloader$1.run(urlclassloader。java:197)位于java.security.accesscontroller.doprivileged(本机方法)java.net.urlclassloader.findclass(urlclassloader。java:190)在java.lang.classloader.loadclass(classloader。java:306)在sun.misc.launcher$appclassloader.loadclass(launcher。java:301)在java.lang.classloader.loadclass(classloader。java:247)在java.lang.class.forname0(本机方法)在java.lang.class.forname(类。java:247)在sun.reflect.generics.factory.corereflectionfactory.makenamedtype(corereflectionfactory。java:95)在sun.reflect.generics.visitor.reifier.visitclasstypesignature(reifier。java:107)在sun.reflect.generics.tree.classtypesignature.accept(classtypesignature。java:31)在sun.reflect.generics.visitor.reifier.reifytypearguments(reifier。java:50)在sun.reflect.generics.visitor.reifier.visitclasstypesignature(reifier。java:120)在sun.reflect.generics.tree.classtypesignature.accept(classtypesignature。java:31)在sun.reflect.generics.repository.fieldrepository.getgenerictype(fieldrepository。java:67)在java.lang.reflect.field.getgenerictype(field。java:223)在com.google.gson.internal.bind.reflectTypeAdapterFactory.getboundfields(reflectTypeAdapterFactory)。java:117)在com.google.gson.internal.bind.reflectypeadapterfactory.create(reflectypeadapterfactory。java:72)在com.google.gson.gson.getadapter(gson。java:356)在com.google.gson.gson.fromjson(gson。java:802)在com.google.gson.gson.fromjson(gson。java:768)在com.google.gson.gson.fromjson(gson。java:717)在com.google.gson.gson.fromjson(gson。java:689)
我理解这应该是由于编译类时使用的java版本与运行该类时使用的java版本之间的版本不匹配。
但我检查了一下,发现我的测试和生产环境都使用jre 7,我相信51版应该与之兼容。
测试环境
]$ java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)
生产环境
]$ java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)
测试环境中使用的hadoop版本:hadoop 2.6.0.2.2.9.0-3393生产环境中使用的hadoop版本:hadoop 2.4.0.2.1.15.3-7
上面的类是在shell脚本中使用下面的命令运行的,这就是发生错误的地方。
**java -cp $ALL_JARS com.package.hello.hadoop.udf.GetCount**
其中,所有的jar都是以“:”分隔的jar文件列表,其中一个包含上面的getcount类,另一个包含显示错误的类:com/package/vo/myclassname
我可以知道这里可能出了什么问题吗?而且只有在与测试环境具有相同java版本的生产环境中才会出问题吗
暂无答案!
目前还没有任何答案,快来回答吧!