2013-02-09 140 views
-1

我已經使用Java/NetBeans實現了pagerank算法,並且我已經構建了用於在hadoop中執行它的.jar文件。在hadoop中執行.jar文件時出現Java版本錯誤

雖然試圖執行它我想出了這個錯誤:

Exception in thread "main" java.lang.UnsupportedClassVersionError: Pagerank : Unsupported major.minor version 51.0 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:615) 
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) 
at java.net.URLClassLoader.access$000(URLClassLoader.java:58) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:197) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:295) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:247) 
at org.apache.hadoop.util.RunJar.main(RunJar.java:149) 

隨着一點點的搜索,我發現,有可能是Java版本的兼容性問題。 現在我使用Java 1.6的hadoop 1.04版本。我將NetBeans項目更改爲使用相同的版本。

關於我包含在我的項目中的一些.jar庫,所有這些庫都從我的hadoop安裝檔案文件中取出,除此之外我必須從MavenRepository(http://mvnrepository.com/artifact/org.apache.hadoop/hadoop-core)手動下載一個文件(hadoop-core)。我下載了我使用的Hadoop版本的1.0.4版本。

儘管如此,事情似乎與我相當兼容,但我又一次使用Hadoop,希望能對此問題有所瞭解。

+3

似乎有些東西是爲Java 7編譯的。http://stackoverflow.com/q/10382929/422353 – madth3 2013-02-09 01:34:27

回答

0

爲什麼不在主機中編譯源文件並將它們打包到Jar中。您可以運行以下命令:

  1. 將所有Java文件複製到一個目錄。
  2. mkdir classes
  3. javac -classpath <path_to_hadoop_library_jars_separated_by_colon_if_more_than_one> -d classes *.java
  4. jar -cvf myjar.jar -C classes/ .

現在嘗試運行這個JAR。讓我們看看它是否有效。