【问题标题】:MRUnit test for testing hadoop map program error用于测试hadoop map程序错误的MRUnit测试
【发布时间】:2017-09-27 03:49:08
【问题描述】:

我正在尝试使用 MRUnit 对 Mapper 程序进行单元测试(来自 Hadoop:权威指南,第 153 页,部分:使用 MRUnit 编写单元测试:Mapper)。我正在使用 intellij Idea,它显示方法错误

new org.apache.hadoop.mrunit.MapDriver<>().withMapper(myMapper)

错误消息说, MapDriver 中的withMapper(org.apache.hadoop.mapreduce.Mapper) 不能应用于(complexmapreduce.MaxTempMapper)

MaxTempMapper 被声明为 org.apache.hadoop.mapreduce.Mapper 的子类 ,所以我不太确定这里出了什么问题。

这里是完整的 Mapper 和单元测试类

最大温度映射器

package complexmapreduce;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;

public class MaxTempMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
    private static final int MISSING = 9999;
    private NDCRecordParser myParser = new NDCRecordParser();

    @Override
    public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {

        myParser.parse(value);
        if (myParser.isValidTemperature()) {
            context.write(new Text(myParser.getYear()), new IntWritable(myParser.getMaxTemperature()));
        }
    }
}

MaxTempUnitTest

    package complexmapreduce;
    import org.apache.hadoop.io.IntWritable;
    import org.apache.hadoop.io.LongWritable;
    import org.apache.hadoop.io.Text;
    import org.junit.Test;
    import java.io.IOException;

    public class MaxTempSingleLineUnitTest {

        @Test
        public void testMaxTempMapper() throws IOException {
            Text value = new Text("0029029070999991901010106004+64333+023450FM-12+000599999V0202701N015919999999N0000001N9-00781+99999102001ADDGF108991999999999999999999");
            LongWritable key = new LongWritable(0);
            MaxTempMapper myMapper = new MaxTempMapper();
            new org.apache.hadoop.mrunit.mapreduce.MapDriver<>()
                    .withMapper(myMapper)     // <<<===Error here
                    .withInput(key, value)
                    .withOutput(new Text("1901"), 
                     new IntWritable(0210))
                    .runTest();
        }
    }

注意:已经尝试过here 的解决方案,但没有成功。

这是 Intellij 的屏幕截图

Screenshot

【问题讨论】:

    标签: java hadoop mapreduce mrunit


    【解决方案1】:

    你需要改变:

    new org.apache.hadoop.mrunit.mapreduce.MapDriver&lt;&gt;()

    new org.apache.hadoop.mrunit.mapreduce.MapDriver&lt;LongWritable, Text, Text, IntWritable&gt;()

    您需要添加泛型类型,以便它知道如何运行映射器。

    【讨论】:

    • 这没有任何区别......仍然得到同样的错误。我在原始帖子中添加了屏幕截图。
    • 您使用的是什么版本的 Java?
    • 使用 Java 8。我确保支持注释并且正确的 hadoop2 API( org.apache.hadoop.mrunit.mapreduce.MapDriver 而不是 org.apache.hadoop.mrunit.mapred.MapDriver ) 被使用。编译程序给了我以下错误。错误:(14、25)java:找不到符号符号:类MaxTempMapper位置:包complexmapreduce
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    相关资源
    最近更新 更多