我是hadoop新手。我想用mrunittest单独测试我的mapper部分。我试了很多。但是我不知道如何解决下面的错误-
类型Map驱动程序中的方法setmapper(Map器)不适用于参数(recommand.idindexmapper)。我正在使用hadoop-1.2.1、eclipsejuno、mrunit-1.0.0-hadoop1.jar、junit-4.11、mockito-all-1.9.5.jar。下面是我的密码,
我的Map器类:
类名:recommand,
public static class IdIndexMapper extends MapReduceBase implements Mapper<LongWritable, Text, Text, Text>{
public void map(LongWritable key, Text val, OutputCollector<Text, Text> 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 {
MapDriver<LongWritable, Text, Text, Text> mapDriver;
@Before
public void setUp() throws Exception {
IdIndexMapper mapper=new IdIndexMapper();
mapper.configure(new JobConf());
mapDriver=new MapDriver<LongWritable, Text, Text,Text>();
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();
}
}
我得到的错误是:
类型Map驱动程序中的方法setmapper(mapper)不适用于参数(recommand.idindexmapper)
有人能帮我解决这个问题吗?
1条答案
按热度按时间lrpiutwd1#
1.0.0
MapDriver.setMapper()
期望org.apache.hadoop.mapred.Mapper
. 你用的是旧的org.apache.hadoop.mapreduce.Mapper
. 他们是两种不同的动物。如果你想使用mrunit0.8.x,你可以使用旧的Mapper
. 你可以在这里得到0.8.x编辑
我看到了真正的问题。以上是不正确的。有两个
MapDrivers
-org.apache.hadoop.mrunit.mapreduce.MapDriver
(你正在使用的那个)和org.apache.hadoop.mrunit.MapDriver
. 你应该用后者MapDriver
还要注意有两个不同的mrunit。有一个hadoop1和hadoop2版本。后者MapDriver
(你需要的那个)在hadoop2中。你可以在这里下载