"Cannot find symbol" Hadoop WordCount 示例中的错误

"Cannot find symbol" error in Hadoop WordCount Example

我正在尝试完成 Data Analytics with Hadoop 一书中给出的 Hadoop MapReduce Word Count 示例,它让我设置了一个 Hadoop 伪分布式开发环境。所以现在我正在尝试 运行 一个字数统计示例。我从 Hadoop Fundamentals 下载了 .java 文件,WordCount 文件夹。书中给出的启动这个过程的代码是:

hostname $ hadoop com.sun.tools.javac.Main WordCount.java

我 运行 收到以下错误:

hadoop@gh0st-VirtualBox:/home/gh0st$ hadoop com.sun.tools.javac.Main Downloads/WordCount/WordCount.java
Downloads/WordCount/WordCount.java:32: error: cannot find symbol
        job.setMapperClass(WordMapper.class);
                           ^
  symbol:   class WordMapper
  location: class WordCount
Downloads/WordCount/WordCount.java:33: error: cannot find symbol
        job.setReducerClass(SumReducer.class);
                            ^
  symbol:   class SumReducer
  location: class WordCount
Note: Downloads/WordCount/WordCount.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
2 errors

WordMapper.java 和 SumReducer.java 文件位于我 运行 从中创建 WordCount.java 文件的同一 WordCount 文件夹中。考虑到我阅读的所有相关内容,我不确定从哪里开始。我的 $JAVA_HOME/usr/lib/jvm/java-7-openjdk-amd64/。我的 $CLASS_PATH$HADOOP_HOME/share/hadoop/common/hadoop-common-2.7.3.jar。我不确定解决此问题还需要哪些其他信息——我会添加任何其他需要的信息。以下链接是我查看并尝试过的:

Hadoop Problems

Compilation Problems

我在 VirtualBox 中使用 Ubuntu 14.04。

所以在深入挖掘之后,我找到了答案。答案在下面link的评论中:Driver Class Compilation Error

我不得不将所有文件编译在一起。新代码如下所示:

hadoop com.sun.tools.javac.Main Downloads/WordCount/WordCount.java Downloads/WordCount/WordMapper.java Downloads/WordCount/SumReducer.java

希望这对某人有所帮助!

这对我有用:

  1. 导出Hadoop classpath:
export CLASSPATH=`hadoop classpath`
  1. 检查路径是否存在:
echo $CLASSPATH
  1. 运行 同时全部:
javac -d . WC_Runner.java WC_Mapper.java WC_Reducer.java