MapReduce单元测试-mrunit

原创
2017/04/27 18:21
阅读数 142

        最近项目需要用到MapReduce进行一个需求开发,对于一个初学者来说,任何入门的知识都可以通过www.baidu.com获取。但是,百度并不能够帮我们百分百的理解原理性的东西,因为任何一个框架、插件、源代码,并不仅仅是System.out.print("Hello World !");这么简单。

         通过mrunit,可以帮助我们做mapreduce的单元测试,验证程序以及代码逻辑,what`s more,还对我们理解mapreduce有很大的帮助。

        首先,我是在https://my.oschina.net/cloudcoder/blog/285151初步了解MapReduceDriver的使用,了解完之后,再来说说我在使用mrunit的一点心得。

         在我的MapReduce程序中,需要做全局数据共享,可了解DistributedCache,在新的hadoop版本中,已经集成到job里,直接调用addCacheFile即可实现文件共享(文件在hdfs上面);而全局变量共享,通过 Configuration  的set函数即可实现。

         对于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");

            // 必须先setConfiguration,再addCacheFile
            mapReduceDriver.setConfiguration(conf);
            mapReduceDriver.addCacheFile("sample.txt");前期工作准备好之后,就可以对map的输入输出进行单元测试。

         输入可以通过MapReduceDriver的withInput函数实现。

         输出的预期结果可以通过MapReduceDriver的withOutput函数实现。

         最后,要调用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();

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部