java - Hadoop Junit 测试面临编译错误

标签 java hadoop junit4 mrunit

我是 hadoop 新手,我正在遵循 haddop 权威学习指南。我正在使用 MRunit 进行单元测试,但是在测试reduce 任务时我遇到了编译错误。

下面是我的reduce java文件:MaxTemperatureReducer.java

package org.priya.mapred.mapred;

import java.io.IOException;
import java.util.Iterator;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
//import org.apache.hadoop.mapred.MRBench.Reduce;
import org.apache.hadoop.mapreduce.Reducer;

public class MaxTemperatureReducer extends Reducer<Text, IntWritable , Text, IntWritable> {

    public void reduce(Text key,Iterator<IntWritable> values, Context context) throws InterruptedException ,IOException
    {
        int maxValue = Integer.MIN_VALUE;
        while(values.hasNext())
        {
            IntWritable value =values.next();
            if(maxValue >= value.get())
            {
                maxValue= value.get();
            }
        }

        context.write(key, new IntWritable(maxValue));

    }

}

下面是我的 Junit 测试文件:MaxTemperatureReducerTest.java

package org.priya.mapred.mapred;

import static org.junit.Assert.*;
import java.util.ArrayList;
import org.junit.Test;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
//import org.apache.hadoop.mrunit.ReduceDriver;
import org.apache.hadoop.mrunit.ReduceDriver;
//import org.apache.hadoop.mrunit.mapreduce.MapReduceDriver;

public class MaxTemperatureReducerTest {

    @Test
    public void reducerTestValid()
    {   
        ArrayList<IntWritable> listOfValues = new ArrayList<IntWritable>();
        listOfValues.add(new IntWritable(20));
        listOfValues.add(new IntWritable(30));
        listOfValues.add(new IntWritable(40));
        listOfValues.add(new IntWritable(60));
        new ReduceDriver<Text ,IntWritable , Text,  IntWritable>()
                        .withReducer(new MaxTemperatureReducer())
                        .withInput(new Text("1950"),listOfValues )
                        .withOutput(new Text("1950"), new IntWritable(60));



    }

}

当我使用驱动程序类的 withReducer() 方法将 reduceclass 的实例(即 new MaxTemperatureReducer() )传递给我的 reducerdriver 时。我遇到以下编译错误。

The method withReducer(Reducer<Text,IntWritable,Text,IntWritable>) in the type ReduceDriver<Text,IntWritable,Text,IntWritable> is not applicable for the arguments (MaxTemperatureReducer)

请帮助我,因为我可以看到 MaxTemperatureMapper 类扩展了Reducer 类,并且我无法理解为什么 withReducer() 方法不接受 MaxTemperatureReducer 实例。

谢谢, 普里亚兰詹

最佳答案

你的 reducer 必须实现:http://hadoop.apache.org/docs/current2/api/org/apache/hadoop/mapred/Reducer.html

您正在扩展:org.apache.hadoop.mapreduce.Reducer。

关于java - Hadoop Junit 测试面临编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21625238/

相关文章:

java - 如何使用 JDBC API 捕获 Hive 退出状态或错误代码

java - 将 JUnit 测试从 3.x 移植到 4.x

java - JUnit4:is() 与 is(notNullValue())

java - 分析 Java Web 应用程序的启动

java - Oracle BPM 11g 组织单位

java - 我们如何强制许多映射器读取 hadoop 中的一个特定文件(相同数据)?

hadoop - 一个完整的单个文件作为映射器的记录

java - Spring @ContextConfiguration

java - 防止主 UI 从子线程崩溃

java - 如何迭代 TreeMap<String,Map<String,String>> 以及如何打印相同的所有键和值