在这段示例代码中,我们使用的map是org.apache.hadoop.mapred.lib.IdentityMapper。这是一个非常简单的map函数:输入什么,就输出什么。
org.apache.hadoop.mrunit.MapDriver是我们从MRUnit框架中导入的一个专门用于测试map的类。
我们通过withInput指定输入的参数,通过withOutput指定我们期望的输出,然后通过runTest运行我们的测试。
功能
1. 测试Map,我们可以使用MapDriver。
2. 测试Reduce,我们可以使用ReduceDriver。
3. 测试一个完整的MapReduce,我们可以使用MapReduceDriver。
4. 测试多个MapReduce组合而成的操作,我们可以使用PipelineMapReduceDriver。
实现
MRUnit框架非常精简,其核心的单元测试依赖于JUnit。
由于我们编写的MapReduce函数中包含有一个OutputCollector的对象,所以MRUnit自己实现了一套Mock对象来控制OutputCollector的操作。
局限
通过阅读MRUnit的源代码我们会发现:
1. 不支持MapReduce框架中的分区和排序操作:从Map输出的值经过shuffle处理后直接就导入Reduce中了。
2. 不支持Streaming实现的MapReduce操作。
虽然MRUnit有这些局限,但是足以完成大多数的需求。