在Hadoop上运行自己的代码时,ClassNotFoundException

在Hadoop上运行自己的代码时,ClassNotFoundException,hadoop,mapreduce,Hadoop,Mapreduce,我已经成功运行了hadoop示例grep、wordcount。。。然而,我发现要运行自己的代码有些困难… 这就是我所做的 我从examples jar复制了grep代码,并对其进行了自己的更改。我使用javac命令编译它;我可以在我指定的文件夹中看到层次结构“org/apache/hadoop/examples/filename.class” 然后我把它(文件夹)装进一个罐子里;它现在是org/apache/。。。。。 现在,当我运行命令“bin/hadoop jar folder.jar fi

我已经成功运行了hadoop示例grep、wordcount。。。然而,我发现要运行自己的代码有些困难…
这就是我所做的

我从examples jar复制了grep代码,并对其进行了自己的更改。我使用javac命令编译它;我可以在我指定的文件夹中看到层次结构“org/apache/hadoop/examples/filename.class”

然后我把它(文件夹)装进一个罐子里;它现在是org/apache/。。。。。 现在,当我运行命令“bin/hadoop jar folder.jar filename input-output” 我不断发现这个错误:

Exception in thread "main" java.lang.ClassNotFoundException:.... 

有什么想法吗?或指导?

检查您是否使用完全限定的类名grep运行命令:

hadoop jar folder.jar org.apache.hadoop.examples.Grep ..other_args..

为了实现这一点,我必须在conf/hadoop-env.sh和我的类路径中添加以下内容:

  • 导出JAVA_HOME=/usr/JAVA/latest
  • 导出HADOOP_HOME=/usr/lib/HADOOP
  • 导出HADOOP\u MAPRED\u HOME=/usr/lib/HADOOP mapreduce
  • 导出HADOOP\u COMMON\u HOME=$HADOOP\u HOME
  • 导出HADOOP\u HDFS\u HOME=/usr/lib/HADOOP HDFS
  • 导出HADOOP_纱线_HOME=/usr/lib/HADOOP纱线
  • 导出HADOOP\u CONF\u DIR=$HADOOP\u HOME/etc/HADOOP
  • 导出纱线配置目录=$HADOOP配置目录
  • 导出HADOOP_类路径=$HADOOP_类路径:$HADOOP_映射_HOME:$HADOOP_HDFS_HOME:$HADOOP_纱线_HOME:$HADOOP_HOME:$HADOOP_CONF_DIR:$YARN_CONF_DIR:$JSVC_HOME

当我执行jar-tvf folder.jar命令时,您能发布完整的堆栈跟踪和jar文件内容列表(jar-tvf folder.jar)吗?我得到了这一行“3503 Tue Mar 27 19:29:30 GST 2012 org/apache/hadoop/examples/Grep.class”,这是跟踪:线程“main”中的异常java.lang.ClassNotFoundException:grep在java.net.URLClassLoader$1.run(URLClassLoader.java:366)在java.net.URLClassLoader$1.run(URLClassLoader.java:355)在java.security.AccessController.doPrivileged(本机方法)在java.net.URLClassLoader.findClass(URLClassLoader.java:354)在java.lang.ClassLoader.loader.loader.java:423在java.lang.ClassLoader.loadClass(ClassLoader.java:356)和java.lang.Class.forName0(本机方法)以及org.apache.hadoop.util.RunJar.main(RunJar.java:149)和java.lang.Class.forName(Class.java:264)的java.lang.ClassLoader.loadClass(ClassLoader.java:356)中,编辑您的帖子并将这些添加内容粘贴到问题本身中,使阅读/格式化etcMuch变得更容易,这很有效;我可以问一下为什么我必须指定整个类名吗?在hadoop就绪的示例中,我们不需要这样做?可能是hadoop示例jar有一个可执行jar(清单中指定的主类),它解释第一个参数并委托给相应的类-您需要查看源代码以确认