복붙노트

[HADOOP] 왜 hadoop이 내 Map 클래스를 인식하지 못합니까?

HADOOP

왜 hadoop이 내 Map 클래스를 인식하지 못합니까?

hadoop 2.2.0에서 PDFWordCount map-reduce 프로그램을 실행하려고하는데이 오류가 발생합니다.

13/12/25 23:37:26 INFO mapreduce.Job: Task Id : attempt_1388041362368_0003_m_000009_2, Status : FAILED
Error: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class PDFWordCount$MyMap not found
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1720)
    at org.apache.hadoop.mapreduce.task.JobContextImpl.getMapperClass(JobContextImpl.java:186)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:721)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:339)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:162)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:157)
Caused by: java.lang.ClassNotFoundException: Class PDFWordCount$MyMap not found
    at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:1626)
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1718)
    ... 8 more

내지도 클래스를 알 수 없다고합니다. 나는 3 개의 VM에 namenod와 2 개의 datanode가있는 클러스터를 가지고있다.

내 주요 기능은 다음과 같습니다.

public static void main(String[] args) throws Exception {
    Configuration conf = new Configuration();
    @SuppressWarnings("deprecation")
    Job job = new Job(conf, "wordcount");

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

    job.setMapperClass(MyMap.class);
    job.setReducerClass(MyReduce.class);

    job.setInputFormatClass(PDFInputFormat.class);
    job.setOutputFormatClass(TextOutputFormat.class);

    FileInputFormat.addInputPath(job, new Path(args[0]));
    FileOutputFormat.setOutputPath(job, new Path(args[1]));

    job.setJarByClass(PDFWordCount.class);
    job.waitForCompletion(true);
  }

이 명령을 사용하여 항아리를 실행할 경우 :

yarn jar myjar.jar PDFWordCount /in /out

그것은 출력 경로로 걸리며 job.setJarByClass (PDFWordCount.class); 당신이 위에서 보는 것처럼 내 주요 기능.

필자는이 주요 기능과 똑같은 주요 기능을 가진 간단한 WordCount 프로젝트를 실행했으며이를 실행하기 위해 원사 병 wc.jar MyWordCount / in2 / out2를 사용했으며 완벽하게 실행됩니다.

나는 무엇이 문제인지 이해할 수 없다!

업데이트 : 나는이 프로젝트에서 필자가 성공적으로 사용한 프로젝트로 이동하려고 시도했다. 패키지를 만들고 pdfwordcount 프로젝트의 관련 파일을이 패키지에 복사하고 프로젝트를 내 보냈습니다. (내 메인은 PDFInputFormat을 사용하도록 변경되지 않았으므로 새로운 패키지로 이동하는 것 외에는 아무것도하지 않았습니다.) 작동하지 않았습니다. 다른 프로젝트에서 파일을 삭제했지만 작동하지 않았습니다. 자바 파일을 기본 패키지로 옮겼지만 작동하지 않았습니다!

뭐가 문제 야?!

해결법

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

    1.실제로 문제가 무엇인지 이해할 수는 없지만이 문제를 극복 할 방법을 찾았습니다.

    실제로 문제가 무엇인지 이해할 수는 없지만이 문제를 극복 할 방법을 찾았습니다.

    Eclipse에서 Java 프로젝트를 jar 파일로 내보내려는 경우 두 가지 옵션이 있습니다.

    나는 그 차이점이 무엇인지 정확히 알지 못한다. 두 번째 옵션을 선택하는 데 사용했지만 첫 번째 옵션을 선택하면이 명령을 사용하여 작업을 실행할 수 있습니다.

    yarn jar pdf.jar /in /out
    
  2. from https://stackoverflow.com/questions/20781120/why-hadoop-does-not-recognize-my-map-class by cc-by-sa and MIT license