복붙노트

[HADOOP] 클래스 패스 내의 디폴트의 hadoop jar를 오버라이드 (override)합니다.

HADOOP

클래스 패스 내의 디폴트의 hadoop jar를 오버라이드 (override)합니다.

나는 hadoop에 대한 선례로 사용자 클래스 경로를 사용하는 많은 표현을 보았다. 종종 m / r 작업이 hadoop이 우연히 이미 이전 버전 (예 : jackson의 json 파서 또는 commons http 등)을 사용하는 라이브러리의 특정 버전을 필요로하는 경우에 완료됩니다.

어쨌든 : 나는 보았다 :

mapreduce.task.classpath.user.precedence
mapreduce.task.classpath.first
mapreduce.job.user.classpath.first

mappers 및 reducers가 내 사용자 정의 hadoop_classpath jars를 put하기위한 클래스 경로를 갖도록하기 위해 이러한 매개 변수 중 하나는 내 작업 구성에서 올바른 설정입니다. hadoop 기본 종속성 항아리보다 먼저?

그건 그렇고, 이것은이 질문과 관련이 있습니다. 내가 최근에 발견 한 Dynamodb requestHandler acception은 jar 충돌로 인한 것입니다.

해결법

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

    1.따라서, 0.20.203을 사용 중이라고 가정하면, TaskRunner.java 코드에서 다음과 같이 처리됩니다.

    따라서, 0.20.203을 사용 중이라고 가정하면, TaskRunner.java 코드에서 다음과 같이 처리됩니다.

    hadoop의 다른 버전에서는 TaskRunner.java 클래스가 "semi hidden config"인 후에 config 속성의 이름을 확인하는 것이 가장 좋습니다.

    static final String MAPREDUCE_USER_CLASSPATH_FIRST =
            "mapreduce.user.classpath.first"; //a semi-hidden config
    
  2. ==============================

    2.최신 Hadoop 버전 (2.2 이상) 에서처럼 다음을 설정해야합니다.

    최신 Hadoop 버전 (2.2 이상) 에서처럼 다음을 설정해야합니다.

        conf.setBoolean(MRJobConfig.MAPREDUCE_JOB_USER_CLASSPATH_FIRST, true);
    
  3. ==============================

    3.이러한 설정은 매퍼 또는 감속기 작업에서만 외부 항아리 클래스를 참조하는 데 사용됩니다. 그러나, 예를 들어 사용자 정의 된 InputFormat과 같이이를 사용하면 클래스를로드 할 수 없습니다. MR2의 모든 곳에서 작동하는지 확인하는 방법은 작업을 제출할 때이 설정을 내보내는 것입니다.

    이러한 설정은 매퍼 또는 감속기 작업에서만 외부 항아리 클래스를 참조하는 데 사용됩니다. 그러나, 예를 들어 사용자 정의 된 InputFormat과 같이이를 사용하면 클래스를로드 할 수 없습니다. MR2의 모든 곳에서 작동하는지 확인하는 방법은 작업을 제출할 때이 설정을 내보내는 것입니다.

    export HADOOP_USER_CLASSPATH_FIRST=true
    
  4. ==============================

    4.나는 Hadoop 버전 0.20.2-cdhu03에서 나에게 똑같은 문제와 매개 변수를 가지고 있었다. "mapreduce.task.classpath.user.precedence"

    나는 Hadoop 버전 0.20.2-cdhu03에서 나에게 똑같은 문제와 매개 변수를 가지고 있었다. "mapreduce.task.classpath.user.precedence"

    이 설정은 Cloudera 팀의 답변에 따라 CDH3U3에서 작동하지 않는 것으로 테스트되었습니다.

    // JobConf job = new JobConf(getConf(), MyJob.class);
    // job.setUserClassesTakesPrecedence(true);
    

    http://archive.cloudera.com/cdh/3/hadoop/api/org/apache/hadoop/mapred/JobConf.html#setUserClassesTakesPrecedence%28boolean%29

  5. ==============================

    5.MapR 분배에서, 특성은 "mapreduce.task.classpath.user.precedence"입니다. http://www.mapr.com/doc/display/MapR/mapred-site.xml

    MapR 분배에서, 특성은 "mapreduce.task.classpath.user.precedence"입니다. http://www.mapr.com/doc/display/MapR/mapred-site.xml

    <property>
        <name>mapreduce.task.classpath.user.precedence</name>
        <value>true</value>
        <description>Set to true if user wants to set different classpath. (AVRO) </description>
    </property>
    

    jobConf.setUserClassesTakesPrecedence (true);

  6. from https://stackoverflow.com/questions/11685949/overriding-default-hadoop-jars-in-class-path by cc-by-sa and MIT license