複数の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の各スレッドは、専用のマッパーオブジェクトを1つ使用することを保証していますか?それとも設定可能な動作ですか?
ありがとうございました
これは私が知りたいことです。ありがとう。 – JRaSH
Key/Valueオブジェクト全体が必要な場合は、オブジェクトをクローンするだけで済みます。そうでない場合は、StringBufferに追加するコンテンツの一部が必要な場合は問題ありません。あなたが地図呼び出しの間にバッファリングしているものをReducerにフラッシュ/書き込むクリーンアップメソッドを追加することを忘れないでください。そうしないと、Reducersに送信されないデータがいくつか残ってしまいます。 – Drizzt321