最近项目须要用到MapReduce进行一个需求开发,对于一个初学者来讲,任何入门的知识均可以经过www.baidu.com获取。可是,百度并不可以帮咱们百分百的理解原理性的东西,由于任何一个框架、插件、源代码,并不单单是System.out.print("Hello World !");这么简单。app
经过mrunit,能够帮助咱们作mapreduce的单元测试,验证程序以及代码逻辑,what`s more,还对咱们理解mapreduce有很大的帮助。框架
首先,我是在https://my.oschina.net/cloudcoder/blog/285151初步了解MapReduceDriver的使用,了解完以后,再来讲说我在使用mrunit的一点心得。函数
在个人MapReduce程序中,须要作全局数据共享,可了解DistributedCache,在新的hadoop版本中,已经集成到job里,直接调用addCacheFile便可实现文件共享(文件在hdfs上面);而全局变量共享,经过 Configuration 的set函数便可实现。oop
对于mrunit,回调用到mapper.class的set跟map函数,因此MapReduceDriver也要将共享文件经过addCacheFile传到mapper.class的set函数中。代码以下:单元测试
MapReduceDriver<LongWritable, Text, Text, Text, Text, Text> mapReduceDriver = MapReduceDriver.newMapReduceDriver(new Mapper(), new Reducer());测试
Configuration conf = new Configuration();
conf.set("args[0]", "1");.net
// 必须先setConfiguration,再addCacheFile
mapReduceDriver.setConfiguration(conf);
mapReduceDriver.addCacheFile("sample.txt");前期工做准备好以后,就能够对map的输入输出进行单元测试。插件
输入能够经过MapReduceDriver的withInput函数实现。code
输出的预期结果能够经过MapReduceDriver的withOutput函数实现。blog
最后,要调用MapReduceDriver的runTest运行。示例代码以下:
mapReduceDriver.withInput(new LongWritable(),
new Text("benjarmin,jack,benjarmin"));
mapReduceDriver.withOutput(new Text("benjarmin"),new Text("2"));
mapReduceDriver.withOutput(new Text("jack"),new Text("1"));
mapReduceDriver.runTest();