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