2013-03-11 3 views
0

매퍼/감속기 인스턴스가 영원히 계속 살아있는 jvm에서 어떻게 재사용됩니까? 같은 매퍼가 여전히 다른 포함 된 것이기 때문에 다음 멤버 집합 문제가 발생할 수있는 여러 작업/작업에 사용할 수있는 경우하둡 매퍼/감속기 재사용

public class MyMapper extends MapReduceBase implements Mapper<K1, V1, K2, V2> { 

    private Set<String> set = new HashSet<String>(); 

    public void map(K1 k1, V1 v1, OutputCollector<K2, V2> output, Reporter reporter) { 
     ... do stuff ... 

     set.add(k1.toString()); //add something to a list so that it can be used later 

     ... do other stuff ... 


     if(set.contains("someString")) 
      emitSomeKindOfOutput(output); 
     else 
      emitSomeOtherKindOfOutput(output); 
    } 

} 

: 예를 들어

,의 내가 이런 일을하고 싶어 가정 해 봅시다 이전 작업/작업의 쓰레기. 이런 종류의 재사용이 가능합니까? 감속기는 어떨까요?

답변

2

틀림없이 안전합니다. 매퍼 및 감속기 인스턴스는 다시 사용되지 않습니다. 초기화 또는 정리를 수행해야하는 경우 MapReduceBase에서 제공하는 configureclose 두 가지 메서드를 재정의 할 수 있습니다. 이는 코드 샘플에서는 필요하지 않습니다. set는 정적 변수했다

경우에 당신은 기본적으로 새로운 JVM은 기본적으로 각 맵에 대해 포크되는 대부분의 사이트 구성 (필요하지 않더라도 안전을 위해 close() 방법에 clear 그것을 할 것입니다, 당신은 구성해야 JVM 재사용을 활성화하려면 reuse.jvm.num.tasks). 동일한 JVM에서 두 개의 맵 작업이 동시에 실행되지 않습니다.

0

내가 아는 한, Hadoop은 공유되지 않는 아키텍처를 기반으로하므로 '개인 세트 세트'변수가 다른 매퍼간에 공유되지 않습니다. 당신이 말했듯이 '이전의 매퍼로부터의 쓰레기'를 얻는 것에 대한 어떤 질문도 있어서는 안됩니다.

+0

하나 이상의 작업/작업에 특정 매퍼 인스턴스를 재사용 할 수 있습니까? – Seth

+1

@Seth 아니야 (기본값에 따라). 새로운 매퍼/감속기 인스턴스가 생성 될 때마다 - 새로운 JVM에서. – harpun

+0

@Seth : 이미 언급했듯이 - 기본적으로는 아닙니다. –