Java:尝试编译Hadoop程序时找不到com.sun.tools.javac.Main

时间:2014-12-04 16:39:44

标签: java hadoop

当我尝试使用此命令在Hadoop中编译我的程序时

bin/hadoop com.sun.tools.javac.Main WordCounter.java

来自Hadoop文件夹,它说

Error: Could not find or load main class com.sun.tools.javac.Main

我查看了类似的帖子,人们建议检查JAVA_HOME是否正确陈述。所以在etc/hadoop/hadoop-env.sh我添加了这一行

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

然后检查tools.pack是否已在/usr/lib/jvm/java-7-openjdk-amd64/lib中正确解压缩。然后我尝试javac -version给了

javac 1.7.0_65

我尝试重新安装Java,但它没有解决问题。

3 个答案:

答案 0 :(得分:14)

尝试设置 HADOOP_CLASSPATH 环境变量

export HADOOP_CLASSPATH=$JAVA_HOME/lib/tools.jar

答案 1 :(得分:0)

错误意味着您不使用JDK来启动Hadoop。 JRE(纯运行时)和JDK之间的主要区别是Java编译器javac。要查看是否有Java编译器,您需要检查两个位置:javac文件夹中应该有一个$JAVA_HOME/bin,并且必须有一个文件$JAVA_HOME/lib/tools.jar

在您的情况下,第一个(启动编译器的二进制文件)可能会丢失,但您绝对需要tools.jar

你说你有一个tools.pack但我之前没有听说过这个。使用包管理器搜索openjdk,然后在结果列表中查找包含jdk的包。在我的系统上,那将是openjdk-7-jdk。安装此软件包,错误应该消失。

答案 2 :(得分:0)

我不得不将Hadoop降级为2.9.2,并且可以正常工作。

我的环境中也有这些东西:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export PATH=${JAVA_HOME}/bin:${PATH}
export HADOOP_CLASSPATH=${JAVA_HOME}/lib/tools.jar