Ich frage mich, ob es möglich ist, ein Mitgliedsobjekt hinzuzufügen, das über mehrere map() -Aufruf verwendet werden kann. Zum Beispiel kann ein String:Ist das Mapper-Objekt von Hadoop für mehrere Threads freigegeben?
private StringBuilder builder;
public void map(...){
...
builder.setLength(0);
builder.append(a);
builder.append(b);
builder.append(c);
d = builder.toString();
...
}
Offensichtlich wenn das Mapper Objekt über mehrere Threads gemeinsam genutzt wird, verhält sich der Bauherr Objekt oben nicht wie erwartet aufgrund gleichzeitigen Zugriff von mehreren Threads.
Meine Frage ist also: Ist sichergestellt, dass jeder Thread in Hadoop ein eigenes Mapper-Objekt für sich selbst verwendet? Oder ist es ein konfigurierbares Verhalten?
Dank
Das möchte ich wissen. Vielen Dank. – JRaSH
Sie müssen die Objekte nur klonen, wenn Sie das gesamte Key/Value-Objekt benötigen. Wenn Sie nur einen Teil des Inhalts benötigen, den Sie zum StringBuffer hinzufügen, ist alles in Ordnung. Vergessen Sie nicht, die Bereinigungsmethode hinzuzufügen (ich vergesse den zu überschreibenden Namen), um den Reducer zu bündeln/zu schreiben, was auch immer Sie zwischen Mapaufrufen puffern, sonst werden Sie am Ende einige Daten erhalten, die niemals an die Reducers gesendet werden. – Drizzt321