用官方提供的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开发的过程中,工程化的方法是必不可少的,这涉及到了从编写代码、单元测试、本地测试、集群测试到性能优化的完整流程。 首先,MapReduce应用的开发流程可以细分为以下步骤: 1. 编写Map和...
大数据技术:MapReduce、数据仓库Hive单元测试与答案 MapReduce是Hadoop框架的一部分,用于处理大规模数据的分布式计算。MapReduce框架由Map和Reduce两个阶段组成。Map阶段将输入数据分割成小块,处理每个块,并...
除了单元测试,了解如何本地运行MapReduce作业也是提升开发效率的关键。本地模式可以在不启动完整Hadoop集群的情况下运行MapReduce作业,这对于调试和快速验证改动非常有用。此外,理解MapReduce的调试机制,如日志...
4. mrunit-1.1.0-hadoop2.jar:MRUnit是专门为MapReduce设计的单元测试库,它提供了一套API来模拟MapReduce作业的执行。这个库允许开发者在内存中运行Map和Reduce阶段,从而快速验证代码的行为。MRUnit特别适用于...
4. 单元测试和集群测试MapReduce作业的方法。 5. 性能优化技巧和问题排查策略。 6. 可能涉及的辅助工具和框架介绍,如Pig、Hive、Hadoop Streaming等。 7. 实际的“赚钱项目”案例分析,展示MapReduce在实际业务中的...
《深入理解Mrunit-1.1.0-...总之,Mrunit-1.1.0-hadoop2是Hadoop 2.x环境下不可或缺的测试工具,通过它,我们可以对MapReduce作业进行细致的单元测试,确保每一个环节都经得起推敲,为大数据处理的可靠性提供有力保障。
2. **Eclipse Hadoop插件**:如`Hadoop-Eclipse-Plugin`,这个插件允许开发者直接在Eclipse中创建、编辑和运行MapReduce作业。它可以将作业提交到本地或远程的Hadoop集群,提供了方便的调试和测试环境。 3. **Maven...
MRUnit是针对MapReduce任务的单元测试框架,它允许开发者对MapReduce作业进行单元测试,确保每个Mapper和Reducer的功能正确性。通过MRUnit,可以在不实际运行Hadoop集群的情况下,对代码进行测试,提高了开发效率和...
4. **测试友好**:Cascading提供了丰富的测试工具,可以对数据处理流程进行单元测试和集成测试,确保作业的正确性。 5. **性能优化**:Cascading在内部进行了优化,可以减少不必要的数据复制和提高作业执行效率。 *...
5. **单元测试**:为了确保代码的正确性,需要对Mapper和Reducer进行单元测试。正如描述中提到的,可以使用JUnit进行测试。JUnit是Java的一个单元测试框架,允许开发者编写测试用例,检查代码的特定部分是否按预期...
Hadoop MRUnit是一个用于测试MapReduce程序的强大工具,它允许开发者在没有实际Hadoop集群的情况下,对MapReduce作业进行单元测试。这个框架模拟了Hadoop MapReduce的执行环境,使开发者可以针对单个Mapper、Reducer...
Apache MRUnit 是一个针对Hadoop MapReduce框架的单元测试工具,专为开发人员设计,用于测试MapReduce程序的各个部分,包括Mapper、Reducer以及Combiner。MRUnit 1.1.0是针对Hadoop 2.x版本的一个特定构建,确保了与...
这可能包括编写MapReduce作业,设置测试数据,执行分布式测试,并验证程序在集群上的行为是否符合预期。在Java中进行测试,开发者通常会利用JUnit或其他测试框架,结合Hadoop的工具如MiniDFC(迷你分布式文件系统)...
在IT行业中,MapReduce是一种分布式计算模型,常用于大数据处理,由Google提出并广泛应用于Hadoop框架中。...通过这个项目,你可以掌握如何用Java编写MapReduce作业,以及如何进行单元测试来确保代码质量。
1. 默认情况下,一个MapReduce作业的map task个数是由目录对应的block数目决定的(B)。 这些知识点涵盖了Hadoop的各个组件,包括HDFS、MapReduce、HBase、Hive、Presto、YARN、Flume、Zookeeper等,帮助读者更好地...
开发者通常会编写单元测试和集成测试,确保代码在不同场景下都能正常工作。 通过理解和实践这个示例,开发者可以更好地掌握如何利用Hadoop的MapReduce框架与HBase数据库进行数据处理,这对于大数据分析和实时查询...
此外,作者还提供了MapReduce作业的单元测试和调试的详细信息,并包括了使用高级功能如map端连接和链式映射的例子。为了使读者更深入理解,作者还带领读者逐步开发一个非平凡的MapReduce应用程序,以便读者洞察真实...
本章涵盖了配置API、单元测试的编写、Map和Reduce类的实现、本地和集群环境下作业的运行和测试、打包、启动作业、MapReduce Web UI的使用、结果的检索、作业的调试、日志分析以及作业的调优和任务剖析。还介绍了工作...
4. 集成测试:提供测试工具和上下文,方便开发者进行单元测试和集成测试。 四、实战应用 在实际项目中,Spring Data Hadoop可以用于各种场景,例如: - 数据分析:通过MapReduce作业进行大规模数据的清洗、转换和...