在我以前的文章中,我展示了如何设置一个完整的基于Maven的项目,以用Java创建Hadoop作业。 当然并没有完成,因为它缺少单元测试部分。 在本文中,我将展示如何将MapReduce单元测试添加到我之前开始的项目中。 对于单元测试,我使用MRUnit框架 。

  • 将必要的依赖项添加到pom

将以下依赖项添加到pom:

<dependency><groupId>org.apache.mrunit</groupId><artifactId>mrunit</artifactId><version>1.0.0</version><classifier>hadoop1</classifier><scope>test</scope>
</dependency>

这将使MRunit框架可用于该项目。

  • 添加单元测试以测试Map Reduce逻辑

该框架的使用非常简单,尤其是在我们的业务案例中。 因此,如果需要的话,我将仅展示单元测试代码和一些注释,但是我认为使用它非常明显。 映射程序“ MapperTest”的单元测试:

package net.pascalalma.hadoop;import org.apache.hadoop.io.Text;
import org.apache.hadoop.mrunit.mapreduce.MapDriver;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;/*** Created with IntelliJ IDEA.* User: pascal*/
public class MapperTest {MapDriver<Text, Text, Text, Text> mapDriver;@Beforepublic void setUp() {WordMapper mapper = new WordMapper();mapDriver = MapDriver.newMapDriver(mapper);}@Testpublic void testMapper() throws IOException {mapDriver.withInput(new Text("a"), new Text("ein"));mapDriver.withInput(new Text("a"), new Text("zwei"));mapDriver.withInput(new Text("c"), new Text("drei"));mapDriver.withOutput(new Text("a"), new Text("ein"));mapDriver.withOutput(new Text("a"), new Text("zwei"));mapDriver.withOutput(new Text("c"), new Text("drei"));mapDriver.runTest();}
}

实际上,此测试类甚至比Mapper实现本身简单。 您只需定义映射器的输入和预期的输出,然后让配置的MapDriver运行测试。 在我们的案例中,Mapper没有做任何特定的事情,但是您会看到设置测试用例很容易。 为了完整起见,这里是Reducer的测试类:

package net.pascalalma.hadoop;import org.apache.hadoop.io.Text;
import org.apache.hadoop.mrunit.mapreduce.ReduceDriver;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;/*** Created with IntelliJ IDEA.* User: pascal*/
public class ReducerTest {ReduceDriver<Text, Text, Text, Text> reduceDriver;@Beforepublic void setUp() {AllTranslationsReducer reducer = new AllTranslationsReducer();reduceDriver = ReduceDriver.newReduceDriver(reducer);}@Testpublic void testReducer() throws IOException {List<Text> values = new ArrayList<Text>();values.add(new Text("ein"));values.add(new Text("zwei"));reduceDriver.withInput(new Text("a"), values);reduceDriver.withOutput(new Text("a"), new Text("|ein|zwei"));reduceDriver.runTest();}
}
  • 运行单元测试

使用Maven命令“ mvn clean test”,我们可以运行测试:

有了单元测试,我会说我们已经准备好构建项目并将其部署到Hadoop集群,我将在下一篇文章中进行描述。

参考: The Pragmatic Integrator博客上的JCG合作伙伴 Pascal Alma 对Java Hadoop作业进行了单元测试 。

翻译自: https://www.javacodegeeks.com/2013/09/unit-testing-a-java-hadoop-job.html

单元测试Java Hadoop作业相关推荐

  1. hadoop_单元测试Java Hadoop作业

    hadoop 在我以前的文章中,我展示了如何设置一个完整的基于Maven的项目,以用Java创建Hadoop作业. 当然并没有完成,因为它缺少单元测试部分. 在这篇文章中,我将展示如何将MapRedu ...

  2. java hadoop_单元测试Java Hadoop作业

    java hadoop 在我以前的文章中,我展示了如何设置一个完整的基于Maven的项目,以用Java创建Hadoop作业. 当然并没有完成,因为它缺少单元测试部分. 在这篇文章中,我将展示如何将Ma ...

  3. java泰坦宙斯之战程序_详解Hadoop作业平台宙斯Zeus.pdf

    详解Hadoop作业平台宙斯Zeus 杨⻜ 分布式研发⼯程师 开源爱好者 技术顾问 邮箱:yangf_sky@163.com 博客:/yangfei001 微博:/u/1664659850 内容⼤纲 ...

  4. aws上部署hadoop_在AWS Elastic MapReduce上运行PageRank Hadoop作业

    aws上部署hadoop 在上一篇文章中,我描述了一个执行PageRank计算的示例,该示例是使用Apache Hadoop进行Mining Massive Dataset课程的一部分. 在那篇文章中 ...

  5. 在AWS Elastic MapReduce上运行PageRank Hadoop作业

    在上一篇文章中,我描述了执行PageRank计算的示例,该示例是使用Apache Hadoop进行Mining Massive Dataset课程的一部分. 在那篇文章中,我接受了Java中现有的Ha ...

  6. java+hadoop配置参数_将Hadoop参数传递给Java代码

    我有一个Uber jar执行一些级联ETL任务. jar的执行方式如下: hadoop jar munge-data.jar 我希望在作业启动时将参数传递给jar,例如 hadoop jar mung ...

  7. Hadoop作业提交分析(三)

    http://www.cnblogs.com/spork/archive/2010/04/12/1710294.html 通过前面两篇文章的分析,对Hadoop的作业提交流程基本明了了,下面我们就可以 ...

  8. Java web对试卷进行单选多选答题进行打分_2020年大学慕课Java程序设计作业答案...

    2020年大学慕课Java程序设计作业答案 更多相关问题 [单选] 单元测试内容不包括().[单选] 在一个列车控制软件的需求文档中,我们发现了以下两条需求描述:"列车车门在两个停靠站之间要 ...

  9. 使用ToolRunner运行Hadoop作业的原理及用法

    使用ToolRunner运行Hadoop作业的原理及用法 @(HADOOP)[hadoop, 大数据] 使用ToolRunner运行Hadoop作业的原理及用法 一示例程序一打印所有参数 1直接运行程 ...

最新文章

  1. 怎样熟练使用一项技术
  2. linux每日命令(31):tar命令
  3. halcon python 联合开发_使用pythonnet调用halcon脚本
  4. How Do Annotations Work in Java?--转
  5. C语言 - sizeof和strlen的区别
  6. 用递归方法计算斐波那契数列(Recursion Fibonacci Sequence Python)
  7. elasticsearch5.0启动出现的错误(自己做过测试,有错误可以在这上面找)
  8. Linux--结构体的详细学习
  9. Python模块:time模块详解(转)
  10. 【渝粤题库】广东开放大学 商务交际听说 形成性考核
  11. PHP内核通用网站后台权限管理系统源码
  12. [UE4]OnComponentBeginOverlap.AddDynamic 的编译错误
  13. 有序表的索引顺序结构查找次数分析
  14. sql2000海量存储过程(1500w数据,分页只需1秒)
  15. 爬虫爬取车主指南各类汽车数据
  16. 各区区号的字段和名称
  17. MSOCache文件夹能否删除
  18. 【Python】Time模块 ValueError: unconverted data remains: UnicodeEncodeError:
  19. oracle20c最新版本,Oracle DUL支持Oracle 20c
  20. 北京建行个人信贷客户资信调查函.doc

热门文章

  1. python爬新闻并保存csv_用python爬取内容怎么存入 csv 文件中
  2. ISO语言代码和国家代码+Locale常量+ISO货币符号
  3. 存储过程内基础语法---补充while循环
  4. lambda表达式java_Lambda表达式Java教程
  5. 缓冲池java_了解Java缓冲池
  6. jsf 项目_您将在下一个项目中使用JSF吗?
  7. tomee_微服务系列:MicroProfile和Apache TomEE
  8. aws sqs_在Spring中将AWS SQS用作JMS提供程序
  9. android 揭示动画_揭示垃圾收集暂停的时间长度
  10. JDK 13中的JEP 355文本块