4进行单元测试:
编写完程序后需要进行单元测试,分别对Map函数和Reduce函数进行测试,功能正确后,就可以在小规模集群上进行测试,测试成功后就可以在Hadoop集群上进行运行。这里先不介绍单元测试的知识,后面再专门介绍如何在Hadoop中使用MRUnit进行单元测试。MRUnit是由Couldera公司开发的专门针对 Hadoop中 编写MapReduce单元测试的框架,基本原理是JUnit4和 EasyMock。MR就是Map和Reduce的缩写。MRUnit框架非常精简,其核心的单元测试依赖于JUnit。而且MRUnit实现了一套 Mock对象来控制OutputCollector的操作,从而可以拦截OutputCollector的输出,和我们的期望结果进行比较,达到自动断言 的目的。
有了MRUnit,对MR程序做重构的时候,只要明确输入和输出,就可以写出单元测试,并且在放到群集校验前进行试验,从而节省时间和资源,也 能更快的定位到问题。而进行重构的话,只要写得足够详细的单元测试都是绿色的话,那么基本就可以保证在群集运行的结果也是正常的。
MRUnit不在Apache标准的Hadoop的发行版中,而是在Couldera公司的增强版本中hadoop- 0.20.1+133.tar.gz的contrib\mrunit\hadoop-0.20.1+169.56-mrunit.jar,已经贴在附件 中。只要把它和Junit4的jar添加到Hadoop程序项目的classpath中,就可以使用MRUnit了。
4准备测试数据:
4.1建立一个text文档,test.text内容如下
china2013inbeijing023isok
china2013inbeijing024isok
china2013inbeijing+25isok
china2013inbeijing026isok
china2013inbeijing027isok
china2013inbeijing028isok
china2013inbeijing029isok
china2013inbeijing030isok
china2013inbeijing031isok
china2013inbeijing132isok
china2013inbeijing033isok
china2013inbeijing034isok
4.2在HDFS的工作目录下建立一个文件夹input,把test.text上传到input目录里:
4.3配置运行参数:
注意在程序运行之前output文件夹是不存在的。hdfs://localhost:9000/user/XXX/input/test.text是输入文件的绝对目录。
4.4运行:
运行结果: