Hadoop WordCount 错误

Hadoop WordCount error

我正在关注在此 link

中找到的文档

https://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html#Usage

当我尝试为 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

我不确定错误背后的原因,或者我是否缺少另一个关键配置?

这在那个循环中没有意义...也没有首先检查变量的存在

if [ "$HADOOP_CLASSPATH" ]; then
  export HADOOP_CLASSPATH="$JAVA_HOME/lib/tools.jar"
else

您需要设置 HADOOP_CLASSPATH="$JAVA_HOME/lib/tools.jar",如文档所述,才能找到 class。而且 class 仅在 JDK

中可用

但是,您可以只使用 运行 javac 命令来编译代码。不确定为什么文档让您调用它 class。

How to compile a Hadoop program

$ javac -classpath ${HADOOP_CLASSPATH} -d WordCount/ WordCount.java

To create jar:

$ jar -cvf WordCount.jar -C WordCount/ .

To run:

$ hadoop jar WordCount.jar WordCount input/ output

建议请使用Maven/Gradle创建正确的JAR文件,并使用IDE编写代码。

P.S。没有多少人真正编写纯 MapReduce