通常情况下,我们需要用小数据集来单元测试我们写好的map函数和reduce函数。而一般我们可以使用Mockito框架来模拟OutputCollector对象(Hadoop版本号小于0.20.0)和Context对象(大于等于0.20.0)。

下面是一个简单的WordCount例子:(使用的是新API)

在开始之前,需要导入以下包:

1.Hadoop安装目录下和lib目录下的所有jar包。

2.JUnit4

3.Mockito

map函数:

  1. public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
  2. );
  3. private Text word = new Text();
  4. @Override
  5. protected void map(LongWritable key, Text value,Context context)
  6. throws IOException, InterruptedException {
  7. String line = value.toString();     // 该行的内容
  8. String[] words = line.split(";");   // 解析该行的单词
  9. for(String w : words) {
  10. word.set(w);
  11. context.write(word,one);
  12. }
  13. }
  14. }

reduce函数:

  1. public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
  2. @Override
  3. protected void reduce(Text key, Iterable<IntWritable> values,Context context)
  4. throws IOException, InterruptedException {
  5. ;
  6. Iterator<IntWritable> iterator = values.iterator();       // key相同的值集合
  7. while(iterator.hasNext()) {
  8. int one = iterator.next().get();
  9. sum += one;
  10. }
  11. context.write(key, new IntWritable(sum));
  12. }
  13. }

测试代码类:

  1. public class WordCountMapperReducerTest {
  2. @Test
  3. public void processValidRecord() throws IOException, InterruptedException {
  4. WordCountMapper mapper = new WordCountMapper();
  5. Text value = new Text("hello");
  6. org.apache.hadoop.mapreduce.Mapper.Context context = mock(Context.class);
  7. mapper.map(null, value, context);
  8. ));
  9. }
  10. @Test
  11. public void processResult() throws IOException, InterruptedException {
  12. WordCountReducer reducer = new WordCountReducer();
  13. Text key = new Text("hello");
  14. // {"hello",[1,1,2]}
  15. ),new IntWritable(1),new IntWritable(2));
  16. org.apache.hadoop.mapreduce.Reducer.Context context = mock(org.apache.hadoop.mapreduce.Reducer.Context.class);
  17. reducer.reduce(key, values, context);
  18. ));     // {"hello",4}
  19. }
  20. }

具体就是给map函数传入一行数据-"hello"

map函数对数据进行处理,输出{"hello",0}

reduce函数接受map函数的输出数据,对相同key的值求和,并输出。

MapReduce UnitTest的更多相关文章

  1. Effective_Python mapreduce

    完全吊炸天构造器的写法... import os import threading,time class GenericInputData(object): def read(self): raise ...

  2. Mapreduce的文件和hbase共同输入

    Mapreduce的文件和hbase共同输入 package duogemap;   import java.io.IOException;   import org.apache.hadoop.co ...

  3. mapreduce多文件输出的两方法

    mapreduce多文件输出的两方法   package duogemap;   import java.io.IOException;   import org.apache.hadoop.conf ...

  4. mapreduce中一个map多个输入路径

    package duogemap; import java.io.IOException; import java.util.ArrayList; import java.util.List; imp ...

  5. Hadoop 中利用 mapreduce 读写 mysql 数据

    Hadoop 中利用 mapreduce 读写 mysql 数据   有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...

  6. [Hadoop in Action] 第5章 高阶MapReduce

    链接多个MapReduce作业 执行多个数据集的联结 生成Bloom filter   1.链接MapReduce作业   [顺序链接MapReduce作业]   mapreduce-1 | mapr ...

  7. MapReduce

    2016-12-21  16:53:49 mapred-default.xml mapreduce.input.fileinputformat.split.minsize 0 The minimum ...

  8. python_单元测试unittest

    Python自带一个单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回的结果方法和一些用例执行前的初始化操作. 步骤1:首先引入unittest模块--import un ...

  9. 使用mapreduce计算环比的实例

    最近做了一个小的mapreduce程序,主要目的是计算环比值最高的前5名,本来打算使用spark计算,可是本人目前spark还只是简单看了下,因此就先改用mapreduce计算了,今天和大家分享下这个 ...

随机推荐

  1. Oulipo

    poj3461:http://poj.org/problem?id=3461 题意:求一个串在另一个串中出现的次数. 题解:直接套用KMP即可,在统计的时候做一下修改.找到之后不是直接返回,而是移动i ...

  2. java中利用RandomAccessFile读取超大文件

    超大文件我们使用普通的文件读取方式都很慢很卡,在java中为我提供了RandomAccessFile函数,可以快速的读取超大文件并且不会感觉到卡哦,下面看我的一个演示实例. 服务器的日志文件往往达到4 ...

  3. Python 命令行非阻塞输入

    很久很久以前,系windows平台下,用C语言写过一款贪食蛇游戏,cmd界面,用kbhit()函数实现非阻塞输入.系windows平台下用python依然可以调用msvcrt.khbit实现非阻塞监听 ...

  4. 【HDOJ】1561 The more, The Better

    树状DP. /* 1561 */ #include <iostream> #include <cstdio> #include <cstring> #include ...

  5. 【HDOJ】4983 Goffi and GCD

    题意说的非常清楚,即求满足gcd(n-a, n)*gcd(n-b, n) = n^k的(a, b)的不同对数.显然gcd(n-a, n)<=n, gcd(n-b, n)<=n.因此当n不为 ...

  6. github 提交报403 forbidden的错误解决

    github 提交报403 forbidden的错误解决 $ git push error: The requested URL returned error: 403 Forbidden while ...

  7. 聚焦设计交易与商业落地 DANG·DHUB设计师平台上线【图】_品牌资讯_服饰_太平洋时尚网

    聚焦设计交易与商业落地 DANG·DHUB设计师平台上线[图]_品牌资讯_服饰_太平洋时尚网 聚焦设计交易与商业落地 DANG·DHUB设计师平台上线

  8. linux使用mount挂载iso文件

    mount -t iso9660 -o loop /home/user/XXX.iso /mnt/iso

  9. 自定义H5页面规范

    查看详情页也可支持自定义H5页面,用来展示更多内容. 交互规范 分屏切换,支持横向和竖向,滑动指引需清晰 若详情页加载较慢,需设计loading页,给予用户友好的提示 如有视频,需在底部加上“建议在W ...

  10. C#获取时间属于第几周

    int getWeek(DateTime dt)    {        DateTime time = Convert.ToDateTime(dt.ToString("yyyy" ...