여러 map() 호출에서 사용할 수있는 멤버 개체를 추가 할 수 있는지 궁금합니다. 예를 들어, 모두 StringBuilder는 : 매퍼 객체가 여러 스레드에서 공유되는 경우여러 스레드에서 공유되는 Hadoop의 Mapper 객체는 무엇입니까?
private StringBuilder builder;
public void map(...){
...
builder.setLength(0);
builder.append(a);
builder.append(b);
builder.append(c);
d = builder.toString();
...
}
물론, 빌더 객체는 위 인해 둘 이상의 스레드에서 동시 액세스가 예상대로 작동하지 않습니다.
내 질문은 : 그것은 각 스레드가 hadoop 자체에 대한 하나의 전용 매퍼 개체를 사용하는 것이 확실합니까? 아니면 구성 가능한 동작입니까?
감사합니다.
그건 내가 알고 싶은거야. 감사. – JRaSH
전체 Key/Value 객체가 필요한 경우 객체를 복제하기 만하면됩니다. 그렇지 않으면 StringBuffer에 추가하는 내용 중 일부가 필요하면 잘됩니다. Reducer에 플러시/쓰려면 클린업 메소드를 추가하는 것을 잊지 마십시오. Map 호출간에 버퍼링하는 것은 무엇이든간에, 그렇지 않으면 결코 일부 데이터가 결코 Reducer로 보내지지 않게 될 것입니다. – Drizzt321