单元测试Java Hadoop作业

在我以前的文章中,我展示了如何设置一个完整的基于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”,我们可以运行测试:

屏幕截图-2013-08-23-at-20-12-50

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367477.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【bzoj4008 hnoi2015】 亚瑟王

题目描述 小 K 不慎被 LL 邪教洗脑了&#xff0c;洗脑程度深到他甚至想要从亚瑟王邪教中脱坑。他决定&#xff0c;在脱坑之前&#xff0c;最后再来打一盘亚瑟王。既然是最后一战&#xff0c;就一定要打得漂亮。众所周知&#xff0c;亚瑟王是一个看脸的游戏&#xff0c;技能的发…

python 编码声明位置,python中的编码声明

python中的第一行&#xff0c;目的就是指出&#xff0c;你想要你的这个文件中的代码用什么可执行程序去运行它&#xff0c;就这么简单#!/usr/bin/python 相当于写死了 python 路径(是告诉OS执行这个py时&#xff0c;调用 /usr/bin 下的 python 解释器&#xff1b;)#!/usr/bin/e…

vue2.0中的:is和is的区别

此文首发于 https://lijing0906.github.io/ 最近&#xff0c;工作之余在翻阅vue.js的官方文档&#xff0c;在查看到动态组件和解析 DOM 模板时的注意事项的时候&#xff0c;讲到一个特殊的is特性&#xff0c;觉得很有意思&#xff0c;就来写一篇自己理解的总结。 现场 写栗子…

mysql复制模式第二部分-----双主模式

双主配置 我在配置主从服务器时&#xff0c;使用了两台服务器&#xff1a;10.19.34.126和10.19.34.91。 1、首先需要在这两台上搭建单独的mysql服务masterA和masterB。 2、配置数据库masterA&#xff0c;要对每一个数据库服务配置唯一标示&#xff0c;参数名为server-id&#x…

pde中微元分析法的主要思想_初中数学常用的思想方法丨所有题型的考试技巧最全整理,高分必备...

【导语】初中数学虽然是基础数学&#xff0c;但是这并不意味着就没有难度&#xff0c;特别是在素质教育下&#xff0c;从培养学生综合素质能力的角度出发&#xff0c;初中数学越来越重视数学思维的培养&#xff0c;因此在很多数学问题的设置上&#xff0c;都进行了相当难度的调…

解决IntelliJ IDEA控制台乱码问题[包含程序运行时的log4j日志以及tomcat日志乱码]...

一、控制台打印的程序运行时的log4j日志中包含中文乱码 在IDEA安装目录的bin目录下找到名为"idea.exe.vmoptions"的文件&#xff1a; 使用文本编译软件(Notepad等)打开此文件&#xff0c;在文件内容从末尾追加一行设置&#xff08;-Dfile.encodingUTF-8&#xff09;&…

如何在Spring 3.x中使用事件

创建松耦合应用程序的概念和技术很多&#xff0c;Event是其中之一。 事件可以消除代码中的许多依赖关系。 有时没有事件&#xff0c;很难实施SRP *。 Java中的Observable接口可以帮助我们实现事件&#xff08;通过Observer Pattern&#xff09;。 但是&#xff0c;等等&#x…

php识别地址,实现地址自动识别实例(PHP)

具体问题具体分析&#xff01;代码实现基于laravel完成。一个laravel完整的功能得具备这些&#xff1a;路由route&#xff0c;Model, View, Controller, 我这里用的有依赖注入服务容器等功能&#xff0c;当然&#xff0c;用到地址&#xff0c;你首先要有地址库。。。下面来看看…

kubernetes cpu限制参数说明

docker CPU限制参数 Option Description --cpus<value> Specify how much of the available CPU resources a container can use. For instance, if the host machine has two CPUs and you set --cpus"1.5", the container is guaranteed at most one and …

工业机器人用铸铁牌号_常用铸铁牌号

常用铸铁的牌号、组织与性能常用铸铁的牌号、组织与性能铸铁中的石墨形态、尺寸以及分布状况对性能影响很大。铸铁中石墨状况主要受铸铁的化学成分及工艺过程的影响。铸铁中石墨形态(片状或球状)在铸造后即形成&#xff1b;也可将白口铸铁通过退火&#xff0c;让其中部分或全部…

浏览器拦截打开新窗口情况总结

在打开一个新窗口时&#xff0c;由于浏览器的安全机制&#xff0c;用户未始终允许的情况下&#xff0c;可能会触发到浏览器拦截&#xff0c;无法正常直接弹出。 网上有很多给出解决方案的只言片语&#xff0c;不够全面&#xff0c;所以针对自己遇到的问题做了详细的情况分析。…

什么叫组件化开发

1、https://www.zhihu.com/question/29735633 &#xff08;什么叫组件化开发&#xff09;转载于:https://www.cnblogs.com/smght/p/8694229.html

php5.5 session,(五)ThinkPHP实践之Session驱动-TTLSA

Session驱动是指Session在thinkphp中的存储驱动&#xff0c;通过不同的方式&#xff0c;可以将Session存储在不同的“容器”中对Session有兴趣的的朋友可以查阅相关资料&#xff0c;本篇仅针对thinkphp的session驱动进行讲解一、DB驱动知识点&#xff1a;1、thinkphp框架默认DB…

Java 8备忘单中的可选

Java 8 java.util.Optional<T>是scala.Option[T]和Data.Maybe在Haskell中的较差表亲。 但这并不意味着它没有用。 如果您不熟悉此概念&#xff0c;请将Optional想象为可能包含或不包含某些值的容器。 就像Java中的所有引用都可以指向某个对象或为null &#xff0c; Optio…

SQL Server2012 安装方法

请看 https://blog.csdn.net/monkeybrothers/article/details/78021848转载于:https://www.cnblogs.com/nanqiang/p/9596528.html

卡方线性趋势检验_SPSS:趋势卡方检验

SPSS&#xff1a;趋势卡方检验毕业季接近尾声&#xff0c;通过答辩的各位同学们即将开始新的旅程。回顾论文点滴&#xff0c;想必既有心酸又充满欣慰。回顾毕业生咨询论文写作得到一个启示与各位分享&#xff1a;论文完成的过程也是还原临床研究的过程&#xff0c;论文收集资料…

让 Chrome 崩溃的一行 CSS 代码

一般的 CSS 代码只会出现 UI 版式或者兼容性方面的小问题。但这里我们要分享一行有趣的 CSS&#xff0c;它可以直接让你的 Chrome 页面挂掉 :) 复现 在 Chrome 里打开一个稍复杂的页面&#xff0c;比如知乎或者掘金打开开发者工具&#xff0c;为页面 <body> 增加样式 s…

oracle块空间的使用,Oracle管理存储架构(二)--Oracle管理数据块空间

1、数据块的概念数据块是数据库中最小的分配单元&#xff0c;块是数据库使用的最小的I/O单元&#xff0c;由一个或多个操作系统block组成。数据块由block header 、free space 、data 组成&#xff0c;oracle 10g 标准块是8k&#xff0c;支持2~32k。块头&#xff1a;包含块地址…

在JBoss 7中使用HA Singleton

不久前&#xff0c;我不得不更改Quartz Scheduler的标准集群行为&#xff0c;并使其能够在不同步数据库的情况下工作。 当然&#xff0c;有很多选择可以做到这一点&#xff0c;但是由于我是简单性的忠实拥护者&#xff0c;因此我决定使用标准的Spring Scheduled配置&#xff0c…

软件目录结构规范

软件目录结构规范 为什么要设计好目录结构? "设计项目目录结构"&#xff0c;就和"代码编码风格"一样&#xff0c;属于个人风格问题。对于这种风格上的规范&#xff0c;一直都存在两种态度: 一类同学认为&#xff0c;这种个人风格问题"无关紧要"…