在我们的hadoop群集中,我的Pig UDF无法抱怨
[main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1069: Problem resolving class version numbers for class <classname>
我看了writing a udf in pig kind of like tutorial并且问题接缝很清楚,但不幸的是我无法解决它。我的清单不包含版本(这是必要的吗?)和javap报告主要版本52,代表java 1.8,虽然我用1.7编译它。那我怎么解决这个问题呢?
答案 0 :(得分:4)
我的清单不包含版本(这是必要的吗?)
版本清单条目与此无关。类加载器不关注版本清单条目。
和javap报告主要版本52,代表java 1.8,
这是相关的事实。
虽然我用1.7编译了它。
这一切都归结为您编译代码的方式,当您说您使用Java 1.7编译时,我认为您是错误的。
我为什么这么说?因为Java 1.7 java编译器不能创建带有Java 1.8版本号的“.class”文件。它根本不理解Java 8语法扩展,以及类文件格式的相应增强。
那我怎么解决这个问题呢?
解决此问题的方法是仔细查看构建过程,并找出使用Java 1.8编译器编译违规类的方式和原因。因为毫无疑问,这就是发生的事情。
如果您是手动构建(例如,通过从命令行运行“javac”和“jar”,或者单击IDE中的按钮),那么现在是了解Maven,Ant等构建工具的好时机。摇篮。
<强>后续强>
那不是真的。我的设置证明了这一点,但我想我发现了这个问题:.settings / org.eclipse.jdt.core.prefs包含几个1.8。条目。这可能是因为在项目创建时我有1.8。安装。
实际上,它并没有“证明”任何东西......
这告诉我的是,您可能正在编译Eclipse Java编译器,而不是JDK中的Java编译器。
事实上,您的Eclipse编译器正在(或者正在)编译Java 1.8目标...因为这就是您的Eclipse设置所说的Eclipse Java编译器应该做的事情。如果您使用Eclipse编译器编译代码,则JDK或JRE安装的版本不会确定类文件版本号。
再一次,我强烈建议您学习使用Maven,Ant或Gradle,以便构建过程更具可重复性并且更不容易出错。
答案 1 :(得分:0)
我认为Stephen C&#39; s是最常见的答案。
在我的特殊情况下,问题是,项目特定的编译器合规性设置是错误的,因为我在创建项目时在本地使用了JDK 1.8,并且在我收到集群上的错误后安装了1.7。
该选项非常隐藏,可在此处找到:
Window > Preferences > Java > Compiler > "Configure project specific settings" > [projectname] > "Compiler compliance level"