2011-12-13 9 views
2

hadoop에서 약간의 작업을 시작했습니다. 설치가 제대로되어 있습니다. 지금은 단일 노드/독립형 클러스터를 수행하고 있습니다. 위에서 언급 한대로 샘플 작업을 실행하려고합니다.ClassNotFoundException, Hadoop의 예제 작업을 실행하는 중

지금까지 프로그램이 올바르게 컴파일되었고, jar가 생성되었으며, manifest가 성공적으로 추가되었습니다. 그러나 내가이 일을하려고 할 때 나는이 오류를 얻는다.

Exception in thread "main" java.lang.ClassNotFoundException: org.myorg.WordCount 
at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:247) 
at org.apache.hadoop.util.RunJar.main(RunJar.java:149) 

나는 링크에서 언급 한 것과 똑같은 프로그램을 붙여 넣었습니다. 하지만이 오류가 발생했습니다. 이것은 제가 명중 한 커맨드 라인입니다.

[[email protected] hadoop]$ bin/hadoop jar /home/shantanu/hadoop/src/examples/wordcount.jar org.myorg.WordCount /tmp/Hadoop_Jobs/ /tmp/Hadoop_Results 

많은 기사를 읽었지만 이에 대한 설명을 찾을 수 없습니다. 도움을 받으십시오.

답변

6

wordcount.jarorg.myorg.WordCount 클래스가 포함되어 있습니까?

패키지 이름을 수정하지 않으셨습니까?

+0

? 어떻게? – Shades88

+0

정교하게 주시겠습니까? 나는 자바에서도 새롭다. 업데이트로'package org.myorg;'문을 제거했습니다. 이제는 하나의 클래스입니다. 아직도 그것은 "스레드에서 예외"메인 "java.lang.ClassNotFoundException : WordCount'를 제공합니다. 도와주세요 !! – Shades88

+0

그게 문제입니다. 패키지 이름을 제거해서는 안되며 명령 줄에서 패키지 이름없이 참조해야합니다. –

9

나는 내 클래스 파일에 어떤 항아리 알고 하둡을 얻을 수있는 샘플 애플리케이션이 추가하는 데 필요한 것을 발견했다.

나는이 하둡 여부에 대한 새로운 있는지 확실하지 않습니다
diff --git a/src/org/myorg/WordCount.java b/src/org/myorg/WordCount.java 
index 912311a..8cc1b93 100644 
--- a/src/org/myorg/WordCount.java 
+++ b/src/org/myorg/WordCount.java 
@@ -43,7 +43,8 @@ public class WordCount { 
    public static void main(String[] args) throws Exception { 
    Configuration conf = new Configuration(); 

    Job job = new Job(conf, "wordcount"); 
+ job.setJarByClass(WordCount.class); 

    job.setOutputKeyClass(Text.class); 
    job.setOutputValueClass(IntWritable.class); 

을, setJarByClass는 그 jar 파일에 포함 된 단일 클래스를 기반으로 전체 jar를 사용하도록 hadoop에 지시합니다. 항아리는 여전히 당신의 classpath에 있어야합니다. 이것은 내가 실행 한 명령입니다 :

hadoop jar wordcount.jar org.myorg.WordCount /usr/$USER/wordcount/input /usr/$USER/wordcount/output 

을 그리고 이전에이 명령을 사용하여 HDFS에 샘플 파일을 복사 한 것 :

hadoop dfs -copyFromLocal input/file01 /usr/$USER/wordcount/input/file01 
hadoop dfs -copyFromLocal input/file02 /usr/$USER/wordcount/input/file02 
hadoop dfs -ls /usr/$USER/wordcount/input 

입력/FILE01 :

Hello World Bye World 

및 입력/파일 02 :

Hello Hadoop Goodbye Hadoop 

나는 일할 수 있었던 것에 대한 지침을 github repo에 올렸다.

+0

감사합니다. hadoop wiki http://wiki.apache.org/hadoop/WordCount를 업데이트해야합니다. 나는 구글이 위키 링크와 다음 사람을위한이 대답을 찾을 것이라고 믿을 것이다. –

+0

정말 고마워, 그것은 나를 위해 작동합니다. – Fernando

관련 문제