복붙노트

[HADOOP] 하둡 : 이상한 ClassNotFoundException가

HADOOP

하둡 : 이상한 ClassNotFoundException가

나는면 ClassNotFound 예외를 얻고있다. 주장 클래스는 존재하지 않는 발견되지 수 있지만, 클래스 이름은 작업을 줄일 내지도에 대한 입력 파일 목록의 경로로 설정됩니다.

INFO  server Running: /usr/lib/hadoop/bin/hadoop --config /var/run/cloudera-scm-agent/process/155-hue/JOBSUBD/hadoop-conf jar tmp.jar /user/hduser/datasets/ /user/hduser/tmp/job_20/ mongodb://slave15/db_8.job_20

Exception in thread "main" java.lang.ClassNotFoundException: /user/hduser/datasets/

at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.apache.hadoop.util.RunJar.main(Runjar.java:190)

우리는 / 사용자 / hduser / 데이터 세트를 볼 수 있듯이 / 입력 파일의 경로입니다. 이유는 ClassNotFoundException가 같은이 오류는 무엇입니까? 왜 클래스로 볼 수 있는가?

난 내 자신의 오류를 발견했습니다. 나는 패키지 구조를 가지고있다. 내 패키지 정보를 지정해야

/usr/lib/hadoop/bin/hadoop 
    --config /var/run/cloudera-scm-agent/process/155-hue/JOBSUBD/hadoop-conf 
    jar tmp.jar org.myorg.tmp /user/hduser/datasets/ 
    /user/hduser/tmp/job_20/ mongodb://slave15/db_8.job_20

내 도구에서 자바 인수로 패키지를주는 옵션이 없습니다. 그래서 더 포장이없는해야합니다. 이 입력 파일 경로 전에 인수가 누락되어 있기 때문에 그러나 나는 다음과 같은 오류를있다.

내 클래스는 루트에 tmp.jar에 직접 있습니다. 나는 더 org.myorg 등을 의미하지 ...

해결책:

jar cmf [manifest_file] [jar_name.jar] -C [folder_of_classes] [path_for_jar_file]

그것은 단지 아카이브에서 생성 된 매니페스트 파일로 manifest_file의 내용을 병합합니다. manifest_file에 다음 줄을 포함 메인 클래스 : [Name_Of_Class]

해결법

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

    1.여부 당신은 여전히 ​​그것을 주 포함하는 클래스의 이름을 줄 필요가 패키지의 계층 구조를 (그리고 존재하지 않는 경우, 당신은 뭔가 잘못 했어).

    여부 당신은 여전히 ​​그것을 주 포함하는 클래스의 이름을 줄 필요가 패키지의 계층 구조를 (그리고 존재하지 않는 경우, 당신은 뭔가 잘못 했어).

    예를 들어, 워드 프로세서는 메인 클래스가 org.myorg.WordCount입니다 예를 들어 있습니다. 단어 수는 기본 패키지에 경우에도 jar 파일이 매니페스트의 메인 클래스를 포함하지 않는 경우, 지정해야합니다 :

    bin/hadoop jar /usr/joe/wordcount.jar WordCount /usr/joe/wordcount/input /usr/joe/wordcount/output
    

    난 당신이 또한 어떤 항아리와 같은 매니페스트의 주요 클래스를 지정할 수 있습니다 가정 것; 클래스 인수는 그 같은 문서에서 선택 사항으로 표시됩니다.

  2. from https://stackoverflow.com/questions/10976846/hadoop-strange-classnotfoundexception by cc-by-sa and MIT license