当我运行具有多个输出的基本mrunit时,我得到以下异常:
java.lang.NullPointerException
at org.apache.hadoop.fs.Path.<init>(Path.java:105)
at org.apache.hadoop.fs.Path.<init>(Path.java:94)
at org.apache.hadoop.mapreduce.lib.output.FileOutputFormat.getDefaultWorkFile(FileOutputFormat.java:264)
at org.apache.hadoop.mapreduce.lib.output.TextOutputFormat.getRecordWriter(TextOutputFormat.java:125)
at org.apache.hadoop.mapreduce.lib.output.MultipleOutputs.getRecordWriter(MultipleOutputs.java:405)
at org.apache.hadoop.mapreduce.lib.output.MultipleOutputs.write(MultipleOutputs.java:387)
at com.skobbler.scratch.MOutputReduce.reduce(MOutputReduce.java:45)
at com.skobbler.scratch.MOutputReduce.reduce(MOutputReduce.java:28)
at org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:164)
at org.apache.hadoop.mrunit.mapreduce.ReduceDriver.run(ReduceDriver.java:265)
at org.apache.hadoop.mrunit.mapreduce.ReducePhaseRunner.runReduce(ReducePhaseRunner.java:85)
at org.apache.hadoop.mrunit.mapreduce.MapReduceDriver.run(MapReduceDriver.java:249)
at org.apache.hadoop.mrunit.TestDriver.runTest(TestDriver.java:640)
at org.apache.hadoop.mrunit.TestDriver.runTest(TestDriver.java:627)
我发现mapred.output.dir配置被请求,为空。简单输出不会出现此问题。
MRU代码:
@Test
public void testMultiOutput() throws IOException{
MapReduceDriver<LongWritable, Text, Text, Text, Text, Text> mapReduceDriver = createMapReduceDrive();
mapReduceDriver.withInput(new LongWritable(0L), new Text("a,b"));
mapReduceDriver.withInput(new LongWritable(0L), new Text("a,c"));
mapReduceDriver.withMultiOutput("foo", new Text("a"), new Text("2"));
mapReduceDriver.runTest();
}
private MapReduceDriver<LongWritable, Text, Text, Text, Text, Text> createMapReduceDrive() {
MOutputMap mapper = new MOutputMap();
MOutputReduce reducer = new MOutputReduce();
return MapReduceDriver.newMapReduceDriver(mapper, reducer);
}
如何在不指定hadoop系统/输出路径的情况下运行测试。
hadoop 2,mrunit 1.1.0
2条答案
按热度按时间fykwrbwg1#
是的,我遇到了这个问题。但我从它的源代码中找到了解决方案。
测试驱动程序.java
您可以使用getconfiguration()方法获取jobconfiguration对象,然后设置outputdir。
blpfk2vs2#
我最近也遇到了同样的问题。我以前使用过@runwith(springjunit4classrunner.class)注解,但是根据jira杂志上关于mrunit的评论https://issues.apache.org/jira/browse/mrunit-13 以及https://issues.apache.org/jira/browse/mrunit-213 我们需要使用@runwith(powermockrunner.class)@preparefortest(mymapper.class)或@preparefortest(myreducer.class)来运行使用多路输出的测试。
我希望这能帮助其他遇到这个问题的人。