gpt4 book ai didi

java - 如何使 hadoop 使用与 `javac` 相同的 Java 运行时版本?

转载 作者:行者123 更新时间:2023-12-02 05:24:49 25 4
gpt4 key购买 nike

我尝试看看hadoop自己的命令是否可以运行一个由javac直接编译的mapreduce应用程序(来自Hadoop的MapReduce官方文档)而不是hadoop自己的命令。

我编译了一个由javac直接编译的MapReduce应用程序

$ javac -classpath "$(~/programs/hadoop/hadoop-3.1.2/bin/hadoop classpath)" -d target/classes/myapp/ src/main/java/myapp/WordCount.java

并创建一个jar文件

$ jar -cvf WordCount.jar -C target/classes/myapp/ .

为什么我用hadoop自带的命令无法运行jar文件?

$ export HADOOP_CLASSPATH=$JAVA_HOME/lib/tools.jar
$ rm -r ./output/
$ ~/programs/hadoop/hadoop-3.1.2/bin/hadoop jar WordCount.jar WordCount ./input/ ./output/
Exception in thread "main" java.lang.UnsupportedClassVersionError: WordCount has been compiled by a more recent version of the Java Runtime (class file version 54.0), this version of the Java Runtime only recognizes class file versions up to 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.apache.hadoop.util.RunJar.run(RunJar.java:311)
at org.apache.hadoop.util.RunJar.main(RunJar.java:232)

如何使 hadoop jar 使用与 javac 相同的 Java 运行时版本?

谢谢。

最佳答案

您使用比运行的 hadoop 更新版本的 Java(看起来像 Java SE 10?)来编译它。要么:

  1. 使用 -target 标志将 Java 程序编译为旧版本的 java。 IE。 -目标1.8
  2. 让 hadoop 使用与您编译程序相同的 Java 运行时。应该有一个 hadoop-env.sh 文件,由 hadoop 调用来设置 JAVA_HOME。

在您的 HADOOP_HOME/conf 目录下,请更新 hadoop-env.sh 文件。它具有导出JAVA_HOME的入口。

在此文件中设置适当的 JAVA_HOME 应该可以解决您的问题。

关于java - 如何使 hadoop 使用与 `javac` 相同的 Java 运行时版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56240623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com