mapper/reducer实例如何在永久存活的jvm中重用?Hadoop映射器/还原器重用
例如,假设我想要做这样的事情:
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中可以重用吗?减速机怎么样?
将特定映射器实例重用于多个任务/作业吗? – Seth 2013-03-12 17:59:38
@不,它不会(默认情况下)。每次在新的JVM中创建一个新的mapper/reducer实例。 – harpun 2013-03-12 21:07:09
@Seth:正如我已经提到的 - 绝对不是默认的。 – 2013-03-17 19:14:19