복붙노트

[HADOOP] 매퍼 클래스를 찾을 수 없음

HADOOP

매퍼 클래스를 찾을 수 없음

가끔 내 MR 업무가 MyMapper 클래스를 찾을 수 없다는 불평을하기도합니다. 그리고 나는 job.setJarByClass (MyMapper.class); 내 jar 파일에서로드하도록 지시합니다.

cloudera @ cloudera-vm : / tmp / translator $ hadoop jar MapReduceJobs.jar 번역기 / 입력 / Portuguese.txt 번역기 / 출력 13/06/13 03:36:57 WARN mapred.JobClient : 작업 jar 파일이 설정되지 않았습니다. 사용자 클래스를 찾을 수 없습니다. JobConf (Class) 또는 JobConf # setJar (String)을 참조하십시오. 13/06/13 03:36:57 INFO input.FileInputFormat : 처리 할 총 입력 경로 : 1 13/06/13 03:36:57 INFO mapred.JobClient : 실행중인 작업 : job_201305100422_0043 13/06/13 03:36:58 INFO mapred.JobClient : map 0 % reduce 0 % 13/06/13 03:37:03 INFO mapred.JobClient : 작업 ID : 시도 _201305100422_0043_m_000000_0, 상태 : FAILED java.lang.RuntimeException : java.lang.ClassNotFoundException : com.mapreduce.variousformats.keyvaluetextinputformat.MyMapper     org.apache.hadoop.conf.Configuration.getClass (Configuration.java:996)에서     org.apache.hadoop.mapreduce.JobContext.getMapperClass (JobContext.java:212)     org.apache.hadoop.mapred.MapTask.runNewMapper (MapTask.java:601)

질문 : 왜 그렇게됩니까? 왜 내 항아리 파일에서로드하는지 항상 알려주지 않습니다. 이러한 종류의 문제를 해결하기위한 모범 사례가 있습니까? 또한 일부 제 3 자 라이브러리를 사용하는 경우 또한 그들을 위해 이렇게해야합니다.

해결법

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

    1.다음 예제와 같이 작업을 제출하면 HADOOP_CLASSPATH 및 -libjars에 종속성을 모두 추가해야합니다.

    다음 예제와 같이 작업을 제출하면 HADOOP_CLASSPATH 및 -libjars에 종속성을 모두 추가해야합니다.

    다음을 사용하여 현재 및 lib 디렉토리와 같은 모든 jar 종속성을 추가하십시오.

    export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:`echo *.jar`:`echo lib/*.jar | sed 's/ /:/g'`
    

    hadoop jar를 통해 작업을 시작할 때 -libjars를 사용하여 종속성의 항아리를 전달해야 할 필요가 있다는 것을 명심하십시오. 나는 다음과 같이 사용한다 :

    hadoop jar <jar> <class> -libjars `echo ./lib/*.jar | sed 's/ /,/g'` [args...]
    

    참고 : sed 명령에는 다른 구분 문자가 필요합니다. HADOOP_CLASSPATH는 다음과 같이 구분됩니다. -libjars는 분리되어 있어야합니다.

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

    2.예, job.setJarByClass가 필요합니다. 그래서 그 hadoop 귀하의 병을 작업 추적기에 복사합니다. job.setJarByClass를 호출하지 않으면 hadoop은 jar 파일이 작업 추적기의 클래스 경로에 있다고 생각하므로 jar 파일을 복사하지 않습니다.

    예, job.setJarByClass가 필요합니다. 그래서 그 hadoop 귀하의 병을 작업 추적기에 복사합니다. job.setJarByClass를 호출하지 않으면 hadoop은 jar 파일이 작업 추적기의 클래스 경로에 있다고 생각하므로 jar 파일을 복사하지 않습니다.

  3. from https://stackoverflow.com/questions/17104281/mapper-class-not-found by cc-by-sa and MIT license