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);
}
}