2013-06-10 4 views
0

계단식 문서 5.2 장 함수를 읽고 있는데 다음 코드가 어떻게 될지 궁금합니다. 다중 스레드 환경에서 정상적으로 작동해야합니까? 더 일반적인 질문은 함수가 다중 스레드 될 수 있다는 것입니다. 단일 매퍼가 단일 스레드라는 것을 알고 있습니다.은 하나의 스레드에서 hadoop 매퍼 함수로 실행되는 계단식 함수입니까?

특정 코드를 테스트 한 결과이 코드는 스레드로부터 안전하지 않은 것으로 보입니다. 페이지 (39)의 설명서를 제대로 이해하지 못할 수도 있습니다.

public class NotThreadSafeObject{ 
... 
public void doSomething(){ 
     // update state 
} 
public String getValue(){ 
     // returns value from state 
} 
public class SomeFunction extends BaseOperation<Tuple> implements Function<Tuple> 
{ 
    // constructors 
    @Override 
    public void prepare(FlowProcess flowProcess, OperationCall<Tuple> call) 
    { 
    // create a reusable Object with state of size 1 
    call.setContext(new NotThreadSafeObject()); 
    } 

    public void operate(FlowProcess flowProcess, FunctionCall<Tuple> call) 
    { 
    // ... 
    NotThreadSafeObject obj = call.getContext(); 
    obj.doSomething(); 
    Tuple tup = new Tuple(); 
    tup.set(0,obj.getValue()); 
    call.getOutputCollector().add(tup); 
    } 

    @Override 
    public void cleanup(FlowProcess flowProcess, OperationCall<Tuple> call) 
    { 
     call.setContext(null); 
    } 
} 

답변

관련 문제