복붙노트

[HADOOP] Hadoop의 예제 작업을 실행하는 동안 ClassNotFoundException

HADOOP

Hadoop의 예제 작업을 실행하는 동안 ClassNotFoundException

나는 hadoop에서 조금 시작했습니다. 제대로 설정되어 실행 중입니다. 지금은 단일 노드 / 독립형 클러스터를 수행하고 있습니다. http://hadoop.apache.org/common/docs/r0.18.3/mapred_tutorial.html에 언급 된대로 샘플 작업을 실행하려고합니다.

지금까지 프로그램이 올바르게 컴파일되고 jar가 생성되었으며 매니페스트가 성공적으로 추가되었습니다. 그러나 작업을 실행하려고하면이 오류가 발생합니다.

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)

링크에서 언급 한 것과 동일한 프로그램을 복사하여 붙여 넣었습니다. 그러나이 오류가 발생했습니다. 이것은 내가 명중 한 명령 줄입니다.

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

수많은 기사를 봤지만 이에 대한 설명을 찾을 수 없습니다. 도와주세요.

해결법

  1. ==============================

    1.wordcount.jar에 org.myorg.WordCount 클래스가 포함되어 있습니까?

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

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

  2. ==============================

    2.클래스 파일이 어떤 jar인지 알기 위해 hadoop을 얻기 위해 이것을 샘플 앱에 추가해야한다는 것을 알았습니다.

    클래스 파일이 어떤 jar인지 알기 위해 hadoop을 얻기 위해 이것을 샘플 앱에 추가해야한다는 것을 알았습니다.

    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);
    

    이것이 hadoop에 새로운 것인지 아닌지는 확실하지 않지만 setJarByClass는 hadoop에게 해당 jar 파일에 포함 된 단일 클래스를 기반으로 전체 jar을 사용하도록 지시합니다. 항아리는 여전히 클래스 경로에 있어야합니다. 이것이 내가 실행 한 명령입니다.

    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
    

    여기서 input / file01 :

    Hello World Bye World
    

    및 입력 / 파일 02 :

    Hello Hadoop Goodbye Hadoop
    

    나는 내가 일할 수 있었던 것에 대한 지침과 함께 github 저장소를 작성했다.

  3. from https://stackoverflow.com/questions/8488554/classnotfoundexception-while-running-example-job-of-hadoop by cc-by-sa and MIT license