我是Hadoop的新手.我想使用MRUnit Test单独测试我的映射器部件.我已经尝试了很多.但我不知道如何解决以下错误 -
"MapDriver类型中的方法setMapper(Mapper)不适用于参数(Recommand.IdIndexMapper)".我使用的是Hadoop-1.2.1,Eclipse Juno,mrunit-1.0.0-hadoop1.jar,junit-4.11,mockito-all-1.9.5.jar.贝娄是我的代码,
我的Mapper类:
类名:推荐,
public static class IdIndexMapper extends MapReduceBase implements Mapper{ public void map(LongWritable key, Text val, OutputCollector output,Reporter reporter)throws IOException{ String[] ids; String ln=val.toString(); ids=ln.split("\t"); output.collect(new Text(ids[0]),new Text(ids[1])); // System.out.println(ids[0]+" "+ids[1]); }
我的测试代码:
package org.apache.hadoop.examples; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.hadoop.classification.InterfaceAudience.Private; import org.apache.hadoop.classification.InterfaceAudience.Public; import org.apache.hadoop.examples.WordCount.IntSumReducer; //import org.apache.hadoop.examples.WordCount.TokenizerMapper; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapred.JobConf; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mrunit.mapreduce.MapDriver; import org.junit.Before; import org.junit.Test; import org.myorg.Recommand.IdIndexMapper; public class RecomTest { MapDrivermapDriver; @Before public void setUp() throws Exception { IdIndexMapper mapper=new IdIndexMapper(); mapper.configure(new JobConf()); mapDriver=new MapDriver (); mapDriver.setMapper(mapper); } @Test public void testMapper() throws IOException { final LongWritable inputKey = new LongWritable(0); final Text inputValue = new Text("M1023 M1024,M1022,M1025"); final Text outputKey = new Text("M1023"); final Text outputValue = new Text("M1024,M1022,M1025"); mapDriver.withInput(inputKey, inputValue); mapDriver.withOutput(outputKey, outputValue); mapDriver.runTest(); } }
我得到的错误是:
MapDriver类型中的方法setMapper(Mapper)不适用于参数(Recommand.IdIndexMapper)
有人可以帮我解决这个问题吗?
1.0.0MapDriver.setMapper()
预计a org.apache.hadoop.mapred.Mapper
.你正在使用旧的org.apache.hadoop.mapreduce.Mapper
.它们是两种不同的动物.如果你想使用MRUnit 0.8.x,你可以使用旧的Mapper
.你可以在这里获得0.8.x.
编辑
我看到了真正的问题.以上是不正确的.有两个MapDrivers
- org.apache.hadoop.mrunit.mapreduce.MapDriver
(你正在使用的那个)和org.apache.hadoop.mrunit.MapDriver
.你应该使用后者MapDriver
另请注意,有两种不同的MRUnit.有一个hadoop1和hadoop2版本.后者MapDriver
(你需要的那个)在hadoop2中.你可以在这里下载