java - 编译Hadoop示例程序时找不到主类

标签 java hadoop digital-ocean word-count

大家好,我是 Hadoop 的新手,几天前才开始学习。我只是按照 Digital Ocean 的指示转到 setup a Hadoop cluster .之后,我尝试了一个简单的示例程序,名为 WordCount,来自 Hadoop docs。 .

我的 hadoop 版本是 2.5.1,与教程中使用的版本相同,并且在 Ubuntu Precise 上运行。我确保我已经按照教程所说的那样进行了正确的设置。这是我的 ~/.bashrc 内容的结尾。

        ...
#HADOOP VARIABLES START
export JAVA_HOME=/usr/lib/jvm/java-7-oracle
export HADOOP_INSTALL=/usr/local/hadoop
export PATH=$PATH:$HADOOP_INSTALL/bin
export PATH=$PATH:$HADOOP_INSTALL/sbin
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_HOME=$HADOOP_INSTALL
export HADOOP_HDFS_HOME=$HADOOP_INSTALL
export YARN_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib"
export HADOOP_PREFIX=/usr/local/hadoop
#HADOOP VARIABLES END

此外,我检查了我的 java home 配置,结果如下所示

sudo update-alternatives --config java
There are 3 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java   1061      auto mode
  1            /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java   1061      manual mode
  2            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1051      manual mode
* 3            /usr/lib/jvm/java-7-oracle/jre/bin/java          1         manual mode

所以我将 bashrc 和 hadoop-env.sh 文件中的所有 JAVA_HOME 值都更改为 /usr/lib/jvm/java-7-oracle 。我还要确保 Dfs 和 Yarn 都已启动。

但是,当我使用此命令编译 WordCount.java 时

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

一切都不如我所愿。我收到了这个错误。请注意,我使用的是 Hadoop 命令而不是 bin/hadoop,因为该命令是在 bashrc 文件中定义的,因此可以正常工作。

Error: Could not find or load main class com.sun.tools.javac.Main

此错误的可能原因是什么以及如何摆脱它?我认为这可能是 java 类路径问题,但我仍然无法弄清楚细节。我得到的关于这个问题的每个解决方法都是关于执行 javajavac 命令,而不是 hadoop 命令。

我只想先让示例程序运行,然后再开始了解它的工作原理。任何帮助,将不胜感激。谢谢..

最佳答案

Apache Hadoop tutorial假设环境变量设置如下:

export JAVA_HOME=/usr/java/default
export PATH=$JAVA_HOME/bin:$PATH
export HADOOP_CLASSPATH=$JAVA_HOME/lib/tools.jar

也许是 Digital Ocean hadoop tutorial ,我也遵循了,应该建议将后两个变量添加到 ~/.bashrc 中,这样它最终看起来像这样:

#HADOOP VARIABLES START
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
export HADOOP_CLASSPATH=$JAVA_HOME/lib/tools.jar
export HADOOP_INSTALL=/usr/local/hadoop
export PATH=$PATH:$HADOOP_INSTALL/bin
export PATH=$PATH:$HADOOP_INSTALL/sbin
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_HOME=$HADOOP_INSTALL
export HADOOP_HDFS_HOME=$HADOOP_INSTALL
export YARN_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib"
#HADOOP VARIABLES END

它适用于我的安装。查看输出中列出的新编译类文件:

之前:

ubuntu@mail:/usr/local/hadoop$ ls
bin  include  lib      LICENSE.txt  NOTICE.txt  README.txt  share              WordCount.java
etc  input    libexec  logs         output      sbin        WordCount_classes

之后:

ubuntu@mail:/usr/local/hadoop$ bin/hadoop com.sun.tools.javac.Main WordCount.java
ubuntu@mail:/usr/local/hadoop$ ls
bin      input    LICENSE.txt  output      share              WordCount$IntSumReducer.class
etc      lib      logs         README.txt  WordCount.class    WordCount.java
include  libexec  NOTICE.txt   sbin        WordCount_classes  WordCount$TokenizerMapper.class

另一个有用的资源是:

http://ubuntuforums.org/archive/index.php/t-634996.html Append the following lines to the opened .bashrc file, save it and close: export JAVA_HOME="/usr/lib/jvm/java-6-sun-1.6.0.22" export PATH=$PATH:$JAVA_HOME/bin issue the following command in the terminal: source $HOME/.bashrc

please refer this blog post for more info (http://sureshatt.blogspot.com/2011/01/easiest-way-to-install-java-in-ubuntu.html)

关于java - 编译Hadoop示例程序时找不到主类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26793847/

相关文章:

java - 使用 VisualVM 通过防火墙连接到远程 jstatd 实例

java - 创建 "good"SecureRandom 的最佳方法是什么?

hadoop - 使用 Hive-2.0.1(Derby 支持)配置 HA 集群显示冗余数据库名称?

postgresql - PG::ConnectionBad Postgres 集群宕机

ssl - 我无法在我的网站中添加Comodo SSl,请您指导我

java - Hibernate 5 在 glassfish 3.1 服务器中显示错误

java - 拦截org.springframework.cache.interceptor.CacheInterceptor#invoke的spring aop

hadoop - Hadoop是否在映射和reduce步骤之间使用HBase作为 “auxiliar”?

docker - 使用数据初始化 Cloudera Hive Docker 容器

tomcat - digital Oceans的CentOS服务器无法启动tomcat