机器学习和生物信息学实验室联盟

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3656|回复: 1
打印 上一主题 下一主题

MRUnit单元测试使用范例

[复制链接]
跳转到指定楼层
楼主
发表于 2013-4-4 19:28:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Hadoop版本:1.0.3
MRUnit版本:0.9.0-incubting-hadoop1
JUnit4:4.8.2
注意由于MRUnit目前还处于变动阶段,上面的版本需要与Hadoop版本匹配,如果在运行出现一些意外的情况,有可能是因为版本不兼容导致,请前往:http://mrunit.apache.org/general/downloads.html,下载对应的版本。

目标:单元测试排序功能。
测试代码如下:
  1. package cn.edu.xmu.dm.tangzk.mr;

  2. import org.apache.hadoop.io.NullWritable;

  3. public class RecordSortTest {

  4.         private RecordSortMapper mapper = null;
  5.         private RecordSortReducer reducer = null;
  6.         private RecordSortComparator comparator = null;
  7.         private MapReduceDriver<Object, Text, Text, NullWritable, Text, NullWritable> mrDriver = null;

  8.         @Before
  9.         public void setUp() throws Exception {
  10.                 mapper = new RecordSortMapper();
  11.                 reducer = new RecordSortReducer();
  12.                 comparator = new RecordSortComparator();
  13.                 mrDriver = MapReduceDriver.newMapReduceDriver(mapper, reducer);
  14.                 mrDriver.withKeyOrderComparator(comparator);
  15.         }

  16.         @After
  17.         public void tearDown() throws Exception {
  18.                 mrDriver = null;
  19.                 reducer = null;
  20.                 mapper = null;
  21.         }

  22.         @Test
  23.         public void test() {
  24.                 Object o1 = new Object();
  25.                 Text t1 = new Text("abc");
  26.                 Text t2 = new Text("ab");
  27.                 Text t3 = new Text("bcd");
  28.                 Text t4 = new Text("abcd");
  29.                 NullWritable val = NullWritable.get();
  30.                 mrDriver.withInput(o1, t1).withInput(o1, t2).withInput(o1, t3)
  31.                                 .withInput(o1, t4).withOutput(t2, val).withOutput(t1, val)
  32.                                 .withOutput(t3, val).withOutput(t4, val).runTest();
  33.         }
  34. }
复制代码
MRUnit基于JUnit测试框架,提供了MapDriver/ReduceDriver/MapReduceDriver工具类用于驱动map/reduce Job的运行,其要求传入待测的mapper/reducer作为参数。上面由于对整个mapreduce任务进行测试,因此使用MapReduceDriver工具类,如果只针对mapper或reducer,可分别使用MapDriver或ReduceDriver工具类。
Driver工具提供了编写mapreduce任务时用到的一些环境,一般用with开头,如withKeyOrderComparator(),withInput(),withConfiguration(),以及withOutput()用于检验是否符合预期。由于每个方法均返回自身Driver对象(方法链模式:http://en.wikipedia.org/wiki/Method_chaining),因此可以将所有的方法直接链在一起,最后执行runTest()方法即可。默认的runTest()方法是有序比对,而一般mapreduce的输出是无序的,因此可通过传入false参数执行runTest()【即runTest(false)】来执行无序比对。
类似平常写JUnit单元测试一样,上面例子使用了@Test/@Before/@After注记,这需要JUnit 4的支持。在完成代码编写后,就可以Run as JUnit Test来运行了。
更多的功能特性可前往官网了解,目前对基本的输入输出、计数器等功能都有支持。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享

相关帖子

回复

使用道具 举报

沙发
发表于 2013-4-26 19:08:39 | 只看该作者
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

机器学习和生物信息学实验室联盟  

GMT+8, 2024-11-2 03:40 , Processed in 0.066426 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表