MRUnit使用技巧
导读 为了能测试编写的hadoop组件和MapReduce程序,一般有下面三种思路: 一、使用hadoop-eclipse插件来调试MapReduce程序,不过这在hadoop比较新的版本里已经不再提供了; 二、是配置jvm参数远程调试hadoop组件。这种方式用于读hadoop源代码比较适合,而如
导读
为了能测试编写的hadoop组件和MapReduce程序,一般有下面三种思路:
一、使用hadoop-eclipse插件来调试MapReduce程序,不过这在hadoop比较新的版本里已经不再提供了;
二、是配置jvm参数远程调试hadoop组件。这种方式用于读hadoop源代码比较适合,而如果用于远程调试MapReduce还是有点麻烦的;
详细参考的文档有:
http://blog.javachen.com/hadoop/2013/08/01/remote-debug-hadoop/
http://zhangjie.me/eclipse-debug-hadoop/
三、最后我选择了MRuinit来用于主要开发调试MapReduce应用程序。
MRunit简介
MRunit是用于做MapReduce单元测试的java库。使用apache发布,下载地址是:http://mrunit.apache.org/general/downloads.html
MRUnit测试框架是基于JUnit的。我们可以方便的测试Map ?Reduce程序。它适用于?0.20 , 0.23.x , 1.0.x , 2.x 等 Hadoop版本。
下面我们来做些MRunit的使用官方例子(SMS CDR (call details record) analysis):
使用记录如下
CDRID;CDRType;Phone1;Phone2;SMS Status Code 655209;1;796764372490213;804422938115889;6 353415;0;356857119806206;287572231184798;4 835699;1;252280313968413;889717902341635;0
需要做的事情是查找所有CDRType 为1的记录和它相关的状态码(SMS Status Code)
Map输出应该是:
6, 1
0, 1
代码如下:
public class SMSCDRMapper extends Mapper { private Text status = new Text(); private final static IntWritable addOne = new IntWritable(1); /** * Returns the SMS status code and its count */ protected void map(LongWritable key, Text value, Context context) throws java.io.IOException, InterruptedException { //655209;1;796764372490213;804422938115889;6 is the Sample record format String[] line = value.toString().split(";"); // If record is of SMS CDR if (Integer.parseInt(line[1]) == 1) { status.set(line[4]); context.write(status, addOne); } } }
Reduce 程序把最后的结果相加,程序如下:
public class SMSCDRReducer extends Reducer { protected void reduce(Text key, Iterable values, Context context) throws java.io.IOException, InterruptedException { int sum = 0; for (IntWritable value : values) { sum += value.get(); } context.write(key, new IntWritable(sum)); } }
MRunit的测试程序如下:
import java.util.ArrayList; import java.util.List; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mrunit.mapreduce.MapDriver; import org.apache.hadoop.mrunit.mapreduce.MapReduceDriver; import org.apache.hadoop.mrunit.mapreduce.ReduceDriver; import org.junit.Before; import org.junit.Test; public class SMSCDRMapperReducerTest { MapDriver mapDriver; ReduceDriver reduceDriver; MapReduceDriver mapReduceDriver; @Before public void setUp() { SMSCDRMapper mapper = new SMSCDRMapper(); SMSCDRReducer reducer = new SMSCDRReducer(); mapDriver = MapDriver.newMapDriver(mapper);; reduceDriver = ReduceDriver.newReduceDriver(reducer); mapReduceDriver = MapReduceDriver.newMapReduceDriver(mapper, reducer); } @Test public void testMapper() { mapDriver.withInput(new LongWritable(), new Text( "655209;1;796764372490213;804422938115889;6")); mapDriver.withOutput(new Text("6"), new IntWritable(1)); mapDriver.runTest(); } @Test public void testReducer() { List values = new ArrayList(); values.add(new IntWritable(1)); values.add(new IntWritable(1)); reduceDriver.withInput(new Text("6"), values); reduceDriver.withOutput(new Text("6"), new IntWritable(2)); reduceDriver.runTest(); } }
使用过JUnit的就应该知道怎么运行上面的代码了,这里就不重复了。
MRUint可以测试单个Map,单个Reduce和一个MapReduce或者多个MapReduce程序。
详细的可以参考官网文档:MRUnit Tutorial
参考:http://www.cnblogs.com/gpcuster/archive/2009/10/04/1577921.html
原文地址:MRUnit使用技巧, 感谢原作者分享。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

在现代金融领域中,随着数据科学和人工智能技术的兴起,量化金融逐渐成为了越来越重要的一个方向。而作为一门能够高效处理数据和部署分布式系统的静态类型编程语言,Go语言也逐渐受到了量化金融领域的关注。本文将介绍如何使用Go语言进行量化金融分析,具体内容如下:获取金融数据首先,我们需要获取金融数据。Go语言的网络编程能力非常强大,可以用来获取各种金融数据。比

随着大数据和数据挖掘的兴起,越来越多的编程语言开始支持数据挖掘的功能。Go语言作为一种快速、安全、高效的编程语言,也可以用于数据挖掘。那么,如何使用Go语言进行数据挖掘呢?以下是一些重要的步骤和技术。数据获取首先,你需要获取数据。这可以通过各种途径实现,比如爬取网页上的信息、使用API获取数据、从数据库中读取数据等等。Go语言自带了丰富的HTTP

如何使用C#编写最小生成树算法最小生成树算法是一种重要的图论算法,它用于解决图的连通性问题。在计算机科学中,最小生成树是指一个连通图的生成树,该生成树的所有边的权值之和最小。本文将介绍如何使用C#编写最小生成树算法,并提供具体的代码示例。首先,我们需要定义一个图的数据结构来表示问题。在C#中,可以使用邻接矩阵来表示图。邻接矩阵是一个二维数组,其中每个元素表示

如何使用PHP开发简单的SEO优化功能SEO(SearchEngineOptimization)即搜索引擎优化,是指通过改进网站的结构和内容来提高网站在搜索引擎中的排名,从而获得更多的有机流量。在网站开发中,如何使用PHP来实现简单的SEO优化功能呢?本文将介绍一些常用的SEO优化技巧和具体的代码示例,帮助开发者在PHP项目中实现SEO优化。一、使用友好

随着互联网的普及,越来越多的网站提供了图片、视频等资源的外链功能。然而,这种外链功能却容易被盗链。盗链是指其它网站利用你网站上的图片、视频等资源,直接通过引用地址在自己的网站显示这些资源,而不是将其下载到自己的服务器上。这样一来,盗链网站就可以免费使用你网站的流量和带宽资源,这既浪费资源又影响网站速度。针对这种问题,可以使用Nginx进行防盗链。Nginx是

一键解决:快速掌握pip镜像源的使用技巧导语:pip是Python最常用的包管理工具,可以方便地安装、升级和管理Python包。然而,由于众所周知的原因,使用默认的镜像源下载安装包速度较慢,为了解决这个问题,我们需要使用国内的镜像源。本文将介绍如何快速掌握pip镜像源的使用技巧,并提供具体的代码示例。了解pip镜像源的概念在开始之前,先来了

如何使用C++中的分治算法分治算法是一种将问题分解成若干个子问题,再将子问题的解合并起来得到原问题解的方法。它的应用广泛,可以用于解决各种类型的问题,包括数学问题、排序问题、图问题等等。本文将介绍如何使用C++中的分治算法,并提供具体的代码示例。一、基本思想分治算法的基本思想是将一个大问题分解成若干个规模较小的子问题,对每个子问题进行递归求解,最后合并子问题

了解conda虚拟环境的优势与使用技巧,需要具体代码示例Python是一门非常流行的编程语言,广泛应用于科学计算、数据分析和人工智能等领域。在Python的生态系统中,有许多第三方库和工具,在不同的项目中可能需要使用不同版本的库。为了管理这些库的依赖关系,conda虚拟环境成为了一个重要的工具。conda是一个开源的包管理系统和环境管理系统,能够方便地创建和
