我正在关注此链接中的文档
当我尝试编译WordCount.java并创建一个jar时,我收到以下错误
bin/hadoop com.sun.tools.javac.Main WordCount.java
Error: Could not find or load main class com.sun.tools.javac.Main
我已经在hadoop-env.sh文件中验证了我的$ JAVA_HOME和$ HADOOP_CLASSPATH,并且还验证了我是否有jdk
以下是hadoop-env.sh
export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/"
.......
.........
for f in $HADOOP_HOME/contrib/capacity-scheduler/*.jar; do
if [ "$HADOOP_CLASSPATH" ]; then
export HADOOP_CLASSPATH="$JAVA_HOME/lib/tools.jar"
else
export HADOOP_CLASSPATH=$f
fi
我不确定错误背后的原因或我是否缺少其他关键配置?
答案 0 :(得分:2)
这在循环中没有意义......也没有先检查变量是否存在
if [ "$HADOOP_CLASSPATH" ]; then
export HADOOP_CLASSPATH="$JAVA_HOME/lib/tools.jar"
else
您需要设置HADOOP_CLASSPATH="$JAVA_HOME/lib/tools.jar"
,正如文档中所说的可以找到该类。该类仅在JDK中可用
但是,你可以运行javac
命令来编译代码。不知道为什么文档让你调用那个类。
How to compile a Hadoop program
$ javac -classpath ${HADOOP_CLASSPATH} -d WordCount/ WordCount.java
创建jar:
$ jar -cvf WordCount.jar -C WordCount/ .
运行:
$ hadoop jar WordCount.jar WordCount input/ output
建议请使用Maven / Gradle创建正确的JAR文件,并使用IDE编写代码。
<子> P.S。实际上没有多少人写过普通的MapReduce