`
piaoling
  • 浏览: 261583 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

mapreduce作业单元测试

阅读更多

用官方提供的MRunit包进行对MapReducer作业进行测试

http://mrunit.apache.org/

先要下载对应的测试包,分为1.0和2.0的hadoop版本

 

来自:

https://cwiki.apache.org/confluence/display/MRUNIT/MRUnit+Tutorial

 

Mapper

 

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

public class SMSCDRMapper extends Mapper<LongWritable, Text, Text, IntWritable>
{

    private Text status = new Text();

    private final static IntWritable addOne = new IntWritable(1);

    @Override
    protected void map(LongWritable key, Text value, Context context) throws java.io.IOException, InterruptedException
    {

        //655209;1;796764372490213;804422938115889;6 is the Sample record format
        String[] line = value.toString().split(";");
        // If record is of SMS CDR
        if (Integer.parseInt(line[1]) == 1)
        {
            status.set(line[4]);
            context.write(status, addOne);
        }
    }

}

 

 

Reducer:

 

 

import java.util.List;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mrunit.mapreduce.MapDriver;
import org.apache.hadoop.mrunit.mapreduce.MapReduceDriver;
import org.apache.hadoop.mrunit.mapreduce.ReduceDriver;
import org.junit.Before;
import org.junit.Test;

import flex.messaging.io.ArrayList;

public class SMSCDRMapperReducerTest
{
    MapDriver<LongWritable, Text, Text, IntWritable> mapDriver;
    ReduceDriver<Text, IntWritable, Text, IntWritable> reduceDriver;
    MapReduceDriver<LongWritable, Text, Text, IntWritable, Text, IntWritable> mapReduceDriver;
    @Before
    public void setup()
    {
        SMSCDRMapper mapper = new SMSCDRMapper();
        SMSCDRReducer reducer = new SMSCDRReducer();
        mapDriver = MapDriver.newMapDriver(mapper);
        
        reduceDriver = ReduceDriver.newReduceDriver(reducer);
        mapReduceDriver = MapReduceDriver.newMapReduceDriver(mapper, reducer);
    }
    
    @Test
    public void testMapper()
    {
        mapDriver.withInput(new LongWritable(), new Text(
        "655209;1;796764372490213;804422938115889;6"));
        mapDriver.withOutput(new Text("6"), new IntWritable(1));
        mapDriver.runTest();
    }
    
    @Test
    public void testReducer()
    {
        List<IntWritable> values = new ArrayList();
        values.add(new IntWritable(1));
        values.add(new IntWritable(1));
        reduceDriver.withInput(new Text("6"), values);
        reduceDriver.withOutput(new Text("6"), new IntWritable(2));
        reduceDriver.runTest();
    }
}

 

Test测试类

 

 

import java.util.List;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mrunit.mapreduce.MapDriver;
import org.apache.hadoop.mrunit.mapreduce.MapReduceDriver;
import org.apache.hadoop.mrunit.mapreduce.ReduceDriver;
import org.junit.Before;
import org.junit.Test;

import flex.messaging.io.ArrayList;

public class SMSCDRMapperReducerTest
{
    MapDriver<LongWritable, Text, Text, IntWritable> mapDriver;
    ReduceDriver<Text, IntWritable, Text, IntWritable> reduceDriver;
    MapReduceDriver<LongWritable, Text, Text, IntWritable, Text, IntWritable> mapReduceDriver;
    @Before
    public void setup()
    {
        SMSCDRMapper mapper = new SMSCDRMapper();
        SMSCDRReducer reducer = new SMSCDRReducer();
        mapDriver = MapDriver.newMapDriver(mapper);
        
        reduceDriver = ReduceDriver.newReduceDriver(reducer);
        mapReduceDriver = MapReduceDriver.newMapReduceDriver(mapper, reducer);
    }
    
    @Test
    public void testMapper()
    {
        mapDriver.withInput(new LongWritable(), new Text(
        "655209;1;796764372490213;804422938115889;6"));
        mapDriver.withOutput(new Text("6"), new IntWritable(1));
        mapDriver.runTest();
    }
    
    @Test
    public void testReducer()
    {
        List<IntWritable> values = new ArrayList();
        values.add(new IntWritable(1));
        values.add(new IntWritable(1));
        reduceDriver.withInput(new Text("6"), values);
        reduceDriver.withOutput(new Text("6"), new IntWritable(2));
        reduceDriver.runTest();
    }
}
 

 

 

分享到:
评论

相关推荐

    Hadoop MapReduce开发

    在Hadoop MapReduce开发的过程中,工程化的方法是必不可少的,这涉及到了从编写代码、单元测试、本地测试、集群测试到性能优化的完整流程。 首先,MapReduce应用的开发流程可以细分为以下步骤: 1. 编写Map和...

    大数据技术:MapReduce、数据仓库Hive单元测试与答案.docx

    大数据技术:MapReduce、数据仓库Hive单元测试与答案 MapReduce是Hadoop框架的一部分,用于处理大规模数据的分布式计算。MapReduce框架由Map和Reduce两个阶段组成。Map阶段将输入数据分割成小块,处理每个块,并...

    Hadoop专业解决方案-第5章开发可靠的MapReduce应用.docx

    除了单元测试,了解如何本地运行MapReduce作业也是提升开发效率的关键。本地模式可以在不启动完整Hadoop集群的情况下运行MapReduce作业,这对于调试和快速验证改动非常有用。此外,理解MapReduce的调试机制,如日志...

    MR Unit test需要的相关jar包

    4. mrunit-1.1.0-hadoop2.jar:MRUnit是专门为MapReduce设计的单元测试库,它提供了一套API来模拟MapReduce作业的执行。这个库允许开发者在内存中运行Map和Reduce阶段,从而快速验证代码的行为。MRUnit特别适用于...

    hadoop编写MR和运行测试共12页.pdf.zip

    4. 单元测试和集群测试MapReduce作业的方法。 5. 性能优化技巧和问题排查策略。 6. 可能涉及的辅助工具和框架介绍,如Pig、Hive、Hadoop Streaming等。 7. 实际的“赚钱项目”案例分析,展示MapReduce在实际业务中的...

    Mrunit-1.1.0-hadoop2

    《深入理解Mrunit-1.1.0-...总之,Mrunit-1.1.0-hadoop2是Hadoop 2.x环境下不可或缺的测试工具,通过它,我们可以对MapReduce作业进行细致的单元测试,确保每一个环节都经得起推敲,为大数据处理的可靠性提供有力保障。

    mapreduce_eclipse开发需要的所有包

    2. **Eclipse Hadoop插件**:如`Hadoop-Eclipse-Plugin`,这个插件允许开发者直接在Eclipse中创建、编辑和运行MapReduce作业。它可以将作业提交到本地或远程的Hadoop集群,提供了方便的调试和测试环境。 3. **Maven...

    hadoop学习笔记.rar

    MRUnit是针对MapReduce任务的单元测试框架,它允许开发者对MapReduce作业进行单元测试,确保每个Mapper和Reducer的功能正确性。通过MRUnit,可以在不实际运行Hadoop集群的情况下,对代码进行测试,提高了开发效率和...

    Cascading-Examples:使用级联框架的 Mapreduce 作业的一些示例

    4. **测试友好**:Cascading提供了丰富的测试工具,可以对数据处理流程进行单元测试和集成测试,确保作业的正确性。 5. **性能优化**:Cascading在内部进行了优化,可以减少不必要的数据复制和提高作业执行效率。 *...

    MapReduce开发流程

    5. **单元测试**:为了确保代码的正确性,需要对Mapper和Reducer进行单元测试。正如描述中提到的,可以使用JUnit进行测试。JUnit是Java的一个单元测试框架,允许开发者编写测试用例,检查代码的特定部分是否按预期...

    Hadoop MRUnit测试

    Hadoop MRUnit是一个用于测试MapReduce程序的强大工具,它允许开发者在没有实际Hadoop集群的情况下,对MapReduce作业进行单元测试。这个框架模拟了Hadoop MapReduce的执行环境,使开发者可以针对单个Mapper、Reducer...

    apache-mrunit-1.1.0-hadoop2-bin.tar

    Apache MRUnit 是一个针对Hadoop MapReduce框架的单元测试工具,专为开发人员设计,用于测试MapReduce程序的各个部分,包括Mapper、Reducer以及Combiner。MRUnit 1.1.0是针对Hadoop 2.x版本的一个特定构建,确保了与...

    hadooptest

    这可能包括编写MapReduce作业,设置测试数据,执行分布式测试,并验证程序在集群上的行为是否符合预期。在Java中进行测试,开发者通常会利用JUnit或其他测试框架,结合Hadoop的工具如MiniDFC(迷你分布式文件系统)...

    wordcount:MRUnitTest的MapReduce示例

    在IT行业中,MapReduce是一种分布式计算模型,常用于大数据处理,由Google提出并广泛应用于Hadoop框架中。...通过这个项目,你可以掌握如何用Java编写MapReduce作业,以及如何进行单元测试来确保代码质量。

    Hadoop期中考试测试.pdf

    1. 默认情况下,一个MapReduce作业的map task个数是由目录对应的block数目决定的(B)。 这些知识点涵盖了Hadoop的各个组件,包括HDFS、MapReduce、HBase、Hive、Presto、YARN、Flume、Zookeeper等,帮助读者更好地...

    hadoop中Map-Reduce使用示例,输入(DBInputFormat),输出(DBOu-MR_HBase.zip

    开发者通常会编写单元测试和集成测试,确保代码在不同场景下都能正常工作。 通过理解和实践这个示例,开发者可以更好地掌握如何利用Hadoop的MapReduce框架与HBase数据库进行数据处理,这对于大数据分析和实时查询...

    Pro Hadoop

    此外,作者还提供了MapReduce作业的单元测试和调试的详细信息,并包括了使用高级功能如map端连接和链式映射的例子。为了使读者更深入理解,作者还带领读者逐步开发一个非平凡的MapReduce应用程序,以便读者洞察真实...

    hadoop 权威指南(第三版)英文版

    本章涵盖了配置API、单元测试的编写、Map和Reduce类的实现、本地和集群环境下作业的运行和测试、打包、启动作业、MapReduce Web UI的使用、结果的检索、作业的调试、日志分析以及作业的调优和任务剖析。还介绍了工作...

    spring-data-hadoop-1.0.0.jar包

    4. 集成测试:提供测试工具和上下文,方便开发者进行单元测试和集成测试。 四、实战应用 在实际项目中,Spring Data Hadoop可以用于各种场景,例如: - 数据分析:通过MapReduce作业进行大规模数据的清洗、转换和...

Global site tag (gtag.js) - Google Analytics