복붙노트

[HADOOP] hadoop의 -libjars 문제

HADOOP

hadoop의 -libjars 문제

Hadoop에서 MapReduce 작업을 실행하려고하는데 오류가 발생하고 무엇이 잘못 될지 잘 모르겠습니다. 내 매퍼가 요구하는 라이브러리 항아리를 파싱해야합니다.

터미널에서 다음을 실행합니다.

hadoop @ 우분투 : / usr / local / hadoop $ bin / hadoop jar /home/hadoop/vardtst.jar -libjars /home/hadoop/clui.jar -libjars /home/hadoop/model.jar gutenberg ou101

나는 다음 예외를 얻고있다 :

URL : URLClassLoader.java : 202

java.security.AccessController.doPrivileged (네이티브 메소드)

java.net.URLClassLoader.findClass (URLClassLoader.java:190)

java.lang.ClassLoader.loadClass (ClassLoader.java:306)

java.lang.ClassLoader.loadClass (ClassLoader.java:247)에서

java.lang.Class.forName0 (네이티브 메서드)

java.lang.Class.forName (Class.java:247)에서

org.apache.hadoop.util.RunJar.main (RunJar.java:149)

제발 도와주세요 .. 고마워요.

해결법

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

    1.또한 미묘하지만 중요한 점에 주목할 가치가 있습니다. 분산 맵 실행중인 JVM에 대한 추가 JAR을 지정하는 방법은 작업을 줄이고 JVM 실행 작업 클라이언트는 매우 다릅니다.

    또한 미묘하지만 중요한 점에 주목할 가치가 있습니다. 분산 맵 실행중인 JVM에 대한 추가 JAR을 지정하는 방법은 작업을 줄이고 JVM 실행 작업 클라이언트는 매우 다릅니다.

    참조 : http://grepalex.com/2013/02/25/hadoop-libjars/

    잘못된 -libjars 동작의 또 다른 원인은 사용자 정의 Job 클래스의 잘못된 구현 및 초기화에있을 수 있습니다.

    참조 : http://kickstarthadoop.blogspot.ca/2012/05/libjars-not-working-in-custom-mapreduce.html

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

    2.Hadoop jar 명령으로 -LIBJARS를 지정할 때. 먼저 아래와 같이 드라이버 클래스를 편집해야합니다.

    Hadoop jar 명령으로 -LIBJARS를 지정할 때. 먼저 아래와 같이 드라이버 클래스를 편집해야합니다.

        public class myDriverClass extends Configured implements Tool {
    
          public static void main(String[] args) throws Exception {
             int res = ToolRunner.run(new Configuration(), new myDriverClass(), args);
             System.exit(res);
          }
    
          public int run(String[] args) throws Exception
          {
    
            // Configuration processed by ToolRunner 
            Configuration conf = getConf();
            Job job = new Job(conf, "My Job");
    
            ...
            ...
    
            return job.waitForCompletion(true) ? 0 : 1;
        }
    }
    

    이제 아래와 같이 "hadoop jar"명령을 편집하십시오 :

    이제 어떻게 될지 이해하십시오. 기본적으로 TOOL 인터페이스를 구현하여 새로운 명령 행 인수를 처리하고 있습니다. ToolRunner는 Tool 인터페이스를 구현하는 클래스를 실행하는 데 사용됩니다. GenericOptionsParser와 함께 작동하여 generic hadoop 명령 줄 인수를 구문 분석하고 도구 구성을 수정합니다.

    우리의 Main () 내에서 ToolRunner.run (새로운 Configuration (), 새로운 myDriverClass (), args)을 호출합니다. - 주어진 generic 인자로 파싱 한 후 Tool.run (String [])에 의해 주어진 Tool을 실행합니다. 지정된 Configuration를 사용하는지, null의 경우는 구축해, 변경된 버젼의 conf로 Tool의 설정을 설정합니다.

    이제 run 메소드 내에서 getConf ()를 호출하면 수정 된 버전의 Configuration이 생성됩니다. 따라서 코드에 아래 줄이 있는지 확인하십시오. 다른 모든 것을 구현하고 여전히 Configuration conf = new Configuration ()을 사용하면 아무 것도 작동하지 않습니다.

  3. ==============================

    3.대답을 찾았습니다. 명령에서 "main"클래스 이름에 빠져서 오류가 발생했습니다.

    대답을 찾았습니다. 명령에서 "main"클래스 이름에 빠져서 오류가 발생했습니다.

    올바른 실행 방법은 다음과 같습니다. hadoop @ 우분투 : / usr / local / hadoop $ bin / hadoop jar /home/hadoop/vardtst.jar VardTest -libjars /home/hadoop/clui.jar,/home/hadoop/model.jar gutenberg ou101

    여기서 VardTest는 main () 메서드를 포함하는 클래스입니다.

    감사

  4. from https://stackoverflow.com/questions/6890087/problem-with-libjars-in-hadoop by cc-by-sa and MIT license