マッパー/リデューサーインスタンスは、永続的に存続するjvm内でどのように再利用されますか?
たとえば、次のようなことをしたいとしましょう。
public class MyMapper extends MapReduceBase implements Mapper<K1, V1, K2, V2> {
private Set<String> set = new HashSet<String>();
public void map(K1 k1, V1 v1, OutputCollector<K2, V2> output, Reporter reporter) {
... do stuff ...
set.add(k1.toString()); //add something to a list so that it can be used later
... do other stuff ...
if(set.contains("someString"))
emitSomeKindOfOutput(output);
else
emitSomeOtherKindOfOutput(output);
}
}
同じマッパーを複数のタスク/ジョブに使用できる場合、メンバー セットには以前のタスク/ジョブからの他のジャンクが含まれているため、問題が発生する可能性があります。この種の再利用は Hadoop で可能ですか? レデューサーの場合はどうですか?