在这段示例代码中,我们使用的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有这些局限,但是足以完成大多数的需求。