|
Hadoop版本:1.0.3
MRUnit版本:0.9.0-incubting-hadoop1
JUnit4:4.8.2
注意由于MRUnit目前还处于变动阶段,上面的版本需要与Hadoop版本匹配,如果在运行出现一些意外的情况,有可能是因为版本不兼容导致,请前往:http://mrunit.apache.org/general/downloads.html,下载对应的版本。
目标:单元测试排序功能。
测试代码如下:- package cn.edu.xmu.dm.tangzk.mr;
- import org.apache.hadoop.io.NullWritable;
- public class RecordSortTest {
- private RecordSortMapper mapper = null;
- private RecordSortReducer reducer = null;
- private RecordSortComparator comparator = null;
- private MapReduceDriver<Object, Text, Text, NullWritable, Text, NullWritable> mrDriver = null;
- @Before
- public void setUp() throws Exception {
- mapper = new RecordSortMapper();
- reducer = new RecordSortReducer();
- comparator = new RecordSortComparator();
- mrDriver = MapReduceDriver.newMapReduceDriver(mapper, reducer);
- mrDriver.withKeyOrderComparator(comparator);
- }
- @After
- public void tearDown() throws Exception {
- mrDriver = null;
- reducer = null;
- mapper = null;
- }
- @Test
- public void test() {
- Object o1 = new Object();
- Text t1 = new Text("abc");
- Text t2 = new Text("ab");
- Text t3 = new Text("bcd");
- Text t4 = new Text("abcd");
- NullWritable val = NullWritable.get();
- mrDriver.withInput(o1, t1).withInput(o1, t2).withInput(o1, t3)
- .withInput(o1, t4).withOutput(t2, val).withOutput(t1, val)
- .withOutput(t3, val).withOutput(t4, val).runTest();
- }
- }
复制代码 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来运行了。
更多的功能特性可前往官网了解,目前对基本的输入输出、计数器等功能都有支持。 |
|