2012-03-18 82 views
4

我在新的Hadoop版本中遇到了MultithreadedMapper類,文檔說它可以用來代替傳統的(單線程)映射器類。 但我沒有遇到任何使用這個新類的演示示例。 另外,我會更樂意使用setNumberOfThreads()方法。 使用它的任何代碼示例?如何在Hadoop Mapreduce中使用MultithreadedMapper類?

預先感謝您

回答

8

一小段代碼:

Configuration conf = new Configuration(); 
Job job = new Job(conf); 
job.setMapperClass(MultithreadedMapper.class); 
conf.set("mapred.map.multithreadedrunner.class", WebGraphMapper.class.getCanonicalName()); 
conf.set("mapred.map.multithreadedrunner.threads", "8"); 
job.setJarByClass(WebGraphMapper.class); 
// rest ommitted 
job.waitForCompletion(true); 

我認爲這是相當自我解釋。您使用多線程映射器作爲主類,然後配置它必須運行的類(您的真實映射器)。 也有這些便利的靜態方法,爲你做這個配置的東西。一個電話可能是這樣的:

MultithreadedMapper.setMapperClass(job, WebGraphMapper.class); 
MultithreadedMapper.setNumberOfThreads(job, 8); 
+0

我試過了,但我得到的輸出是不一致的。這些線程並不是單獨處理每個輸入記錄,也就是說某些線程在同一條記錄上工作,輸出是冗餘的:( – Harsh 2012-03-19 08:47:46

+0

然後你在代碼中聲明瞭一些靜態的東西,對我來說這是正確的(版本0.20 0.2)。 – 2012-03-19 08:58:42