복붙노트

[HADOOP] MapReduce 작업 구성의 매개 변수 설정

HADOOP

MapReduce 작업 구성의 매개 변수 설정

Mapper에서 작업 구성의 매개 변수를 설정할 수있는 방법이 있으며 Reducer에서 액세스 할 수 있습니다.

나는 아래의 코드를 시도했다.

매퍼에서 : map (..) : context.getConfiguration (). set ( "Sum", "100"); 감속기에서 : reduce (..) : context.getConfiguration (). get ( "Sum");

그러나 감속기 값은 null로 반환됩니다.

이 일을 구현할 방법이 없거나 내 편에서 빠진 일이 있습니까?

해결법

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

    1.내가 아는 한, 이것은 불가능합니다. 작업 구성은 런타임에 jobtracker에 의해 XML로 직렬화되며 모든 작업 노드에 복사됩니다. Configuration 객체를 변경하면 특정 객체 JVM의 로컬 객체에만 영향을줍니다. 모든 노드에서 XML을 변경하지는 않습니다.

    내가 아는 한, 이것은 불가능합니다. 작업 구성은 런타임에 jobtracker에 의해 XML로 직렬화되며 모든 작업 노드에 복사됩니다. Configuration 객체를 변경하면 특정 객체 JVM의 로컬 객체에만 영향을줍니다. 모든 노드에서 XML을 변경하지는 않습니다.

    일반적으로 "전역"상태를 피하려고 시도해야합니다. 이는 MapReduce 패러다임에 위배되며 일반적으로 병렬 처리를 방지합니다. Map과 Reduce 단계 사이에 반드시 정보를 전달해야하며 일반적인 셔플 / 정렬 단계를 통해 정보를 전달할 수없는 경우 분산 캐시에 직접 쓰거나 HDFS에 직접 기록 할 수 있습니다.

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

    2.새 API를 사용하는 경우 코드가 이상적으로 작동해야합니다. 일자리 창출 초기에이 "합계"부동산을 만들었습니까? 예를 들면 다음과 같습니다.

    새 API를 사용하는 경우 코드가 이상적으로 작동해야합니다. 일자리 창출 초기에이 "합계"부동산을 만들었습니까? 예를 들면 다음과 같습니다.

    Configuration conf = new Configuration();
    conf.set("Sum", "0");
    Job job = new Job(conf);
    

    그렇지 않다면 더 잘 사용하십시오.

    context.getConfiguration().setIfUnset("Sum","100");
    

    귀하의 매퍼 클래스에서 문제를 해결하십시오. 이것이 내가 볼 수있는 유일한 것입니다.

  3. from https://stackoverflow.com/questions/13228922/setting-parameter-in-mapreduce-job-configuration by cc-by-sa and MIT license