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

Kud*_*aev 11 java hadoop

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

bin/hadoop com.sun.tools.javac.Main WordCounter.java
Run Code Online (Sandbox Code Playgroud)

它说,来自Hadoop文件夹

Error: Could not find or load main class com.sun.tools.javac.Main
Run Code Online (Sandbox Code Playgroud)

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

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
Run Code Online (Sandbox Code Playgroud)

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

javac 1.7.0_65
Run Code Online (Sandbox Code Playgroud)

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

pon*_*kin 14

尝试设置HADOOP_CLASSPATH环境变量

export HADOOP_CLASSPATH=$JAVA_HOME/lib/tools.jar
Run Code Online (Sandbox Code Playgroud)


Aar*_*lla 0

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

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

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