我想知道是否可以添加一個可以在多個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 2012-04-16 11:30:22
如果您需要整個Key/Value對象,則只需克隆對象;否則,如果您只需要添加到StringBuffer的某些內容,則無問題。不要忘記添加清理方法(我忘記了要覆蓋的名稱),以便在Map調用之間緩衝或寫入Reducer,否則最終會有一些數據永遠不會發送到Reducers。 – Drizzt321 2012-04-16 23:22:45