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

当我尝试使用此命令在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,但它没有解决问题。

尝试设置HADOOP_CLASSPATH环境变量

 export HADOOP_CLASSPATH=$JAVA_HOME/lib/tools.jar 

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

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

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