복붙노트

[HADOOP] 직업 부름의 차이점

HADOOP

직업 부름의 차이점

main () 및 ToolRunner.run ()에서 mapreduce 작업을 호출하는 것의 차이점은 무엇입니까? 메인 클래스가 MapReduce가 Configured implements Tool을 확장한다고 말하면 메인 메소드에서 작업을 단순하게 실행하려면 가질 수없는 추가 권한은 무엇입니까? 감사.

해결법

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

    1.추가 권한은 없지만 명령 행 옵션은 GenericOptionsParser를 통해 실행됩니다. GenericOptionsParser를 사용하면 특정 구성 속성을 추출하고 그로부터 Configuration 객체를 구성 할 수 있습니다.

    추가 권한은 없지만 명령 행 옵션은 GenericOptionsParser를 통해 실행됩니다. GenericOptionsParser를 사용하면 특정 구성 속성을 추출하고 그로부터 Configuration 객체를 구성 할 수 있습니다.

    http://hadoop.apache.org/common/docs/r0.20.2/api/org/apache/hadoop/util/GenericOptionsParser.html

    기본적으로 일부 옵션을 직접 구문 분석하는 대신 (목록에서 인수 색인을 사용하여) 명령 행에서 구성 특성을 명시 적으로 구성 할 수 있습니다.

    hadoop jar myJar.jar com.Main prop1value prop2value
    
    public static void main(String args[]) {
        Configuration conf = new Configuration();
        conf.set("prop1", args[0]);
        conf.set("prop2", args[1]);
    
        conf.get("prop1"); // will resolve to "prop1Value"
        conf.get("prop2"); // will resolve to "prop2Value"
    }
    

    ToolRunner로 훨씬 더 응축됩니다.

    hadoop jar myJar.jar com.Main -Dprop1=prop1value -Dprop2=prop2value
    
    public int run(String args[]) {
        Configuration conf = getConf();
    
        conf.get("prop1"); // will resolve to "prop1Value"
        conf.get("prop2"); // will resolve to "prop2Value"
    }
    

    그래도 경고 메시지가 나타납니다. Configuration 메소드 getConf ()를 사용할 때 먼저 Job 객체를 생성 한 다음 Configuration을 가져옵니다 - Job 생성자는 전달 된 Configruation 객체의 복사본을 만듭니다. 따라서 전달 된 참조를 변경하면 당신은 그 변화를 보지 못합니다.

    public int run(String args[]) {
        Configuration conf = getConf();
    
        conf.set("prop3", "blah");
    
        Job job = new Job(conf); // job will have a deep copy of conf
    
        conf.set("prop4", "dummy"); // here we're amending the original conf
    
        job.getConfiguration().get("prop4"); // will resolve to null
    }
    
  2. ==============================

    2.ToolRunner.run ()을 사용하면 모든 hadoop 애플리케이션이 hadoop에서 지원하는 표준 명령 행 옵션을 처리 할 수 ​​있습니다. ToolRunner는 내부적으로 GenericOptionsParser를 사용합니다. 요약하면, 명령 행에서 제공되는 hadoop 특정 옵션은 구문 분석되어 응용 프로그램의 Configuration 객체로 설정됩니다. 단순히 main ()을 사용하면 자동으로 실행되지 않습니다.

    ToolRunner.run ()을 사용하면 모든 hadoop 애플리케이션이 hadoop에서 지원하는 표준 명령 행 옵션을 처리 할 수 ​​있습니다. ToolRunner는 내부적으로 GenericOptionsParser를 사용합니다. 요약하면, 명령 행에서 제공되는 hadoop 특정 옵션은 구문 분석되어 응용 프로그램의 Configuration 객체로 설정됩니다. 단순히 main ()을 사용하면 자동으로 실행되지 않습니다.

    예 : 당신이 말하는 경우:

    % hadoop MyHadoopApp -D mapred.reduce.tasks=3
    

    그런 다음 ToolRunner.run (new MyHadoopApp (), args)은 자동으로 구성 매개 변수 mapred.reduce.tasks를 3으로 설정합니다.

    우리가 얻을 수있는 추가 권한은 없습니다. 일반적으로 사람들은 hadoop 작업에서 단순히 main ()을 사용하지 않습니다. ToolRunner.run ()을 사용하는 것이 일반적인 방법입니다.

  3. from https://stackoverflow.com/questions/9859652/difference-in-calling-the-job by cc-by-sa and MIT license