Hadoop实例练习(二)

实例描述:

现有两个文件,dedu1.txt和dedu2.txt,数据文件中的每一行都是一个数据,现要对这两个文件进行去重,两个文件内容分别为(同颜色的表示重复的数据):



dedu1.txt:                                            dedu2.txt:

2012-3-1 a                                                2012-3-1 b

2012-3-2 b                                                2012-3-2 a

2012-3-3 c                                                2012-3-3 b

2012-3-4 d                                                2012-3-4 d

2012-3-5 a                                                2012-3-5 a

2012-3-6 b                                                2012-3-6 c

2012-3-7 c                                                2012-3-7 d

2012-3-3 c                                                2012-3-3 c



考查重点及设计思路:

考查重点:MapReduce会把相同key值的<key,value>对发送至同一台reduce机器上进行处理,无论这个key值出现多少次,只要在最终结果输出一次就可以了。所以这里应该把每行数据作为可以key值,value值没有要求,可以设置为空。

设计思路

按照默认的TextInputFormat格式每行文本形成一个<key,vlaue>对,key为行号,value为文本值;

在Mapper中进行处理时,将key设置为文本值(即Map输入的value值),value设置为空即可,因为此处不需要知道key值得个数等其他信息,所以此时只要比较key是否相等就可判断是否为重复的数据;

在Reducer中进行处理时,因为所有相同key值得value对都会送至一台reduce机器上调用reduce函数进行处理。在reduce函数中,我们知道reduce函数的输入是一个key值和这个key相对应的一个value列表,所以我们这里我们不管这个key值有多少个value,只要直接将key复制为输出的key值简单的输出一次即可(输出的value设置为空)。

程序代码如下:

Mapper类:

public class DeDuMap extends Mapper<Object, Text, Text, Text>{
	private Text data = new Text();
	public void map(Object key, Text value,Context context)
		throws IOException, InterruptedException{
		data.set(value.toString());
		context.write(data, new Text(""));
	}
}

Reducer类:

public class DeDuReduce extends Reducer<Text, Text, Text, Text>{
	public void reduce(Text key, Iterable<Text> values, Context context)
		throws IOException, InterruptedException{
		context.write(key, new Text(""));
	}
}

主函数:

public class DeDumain {
	public static void main(String[] args) throws Exception{
		Configuration conf = new Configuration();

		String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
	    if (otherArgs.length != 2) {
	      System.err.println("Usage: Dedumain <in> <out>");
	      System.exit(2);
	    }
	    
	    Job job = new Job(conf,"de du");
	    job.setJarByClass(DeDumain.class);
	    
	    job.setMapperClass(DeDuMap.class);
	    job.setCombinerClass(DeDuReduce.class);
	    job.setReducerClass(DeDuReduce.class);
	   
	    job.setOutputKeyClass(Text.class);
	    job.setOutputValueClass(Text.class);
	    
	    FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
	    FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
	    
	    System.exit(job.waitForCompletion(true)? 0:1);
	}
}

Hadoop实例练习(二),布布扣,bubuko.com

时间: 2024-10-27 08:45:05

Hadoop实例练习(二)的相关文章

HTML5 本地文件操作之FileSystemAPI实例(二)

文件操作实例整理二 1.删除文件.复制文件.移动文件 //获取请求权限 window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem; window.requestFileSystem(window.TEMPORARY, 5 * 1024, initFs, errorHandler); function initFs(fs) { //删除文件 fileEntry.remove() fs.

hadoop实例

一篇讲得很好的hadoop实例,非常适合初学者学习hadoop. 本文转载自:http://www.cnblogs.com/xia520pi/archive/2012/06/04/2534533.html,感谢作者虾皮的分享. 1.数据去重  "数据去重"主要是为了掌握和利用并行化思想来对数据进行有意义的筛选.统计大数据集上的数据种类个数.从网站日志中计算访问地等这些看似庞杂的任务都会涉及数据去重.下面就进入这个实例的MapReduce程序设计. 1.1 实例描述 对数据文件中的数据进

matlab文件读写处理实例(二)——textread批量读取文件

问题:对文件夹下所有文件进行批量读取,跳过文件头部分,读取每个文件数据部分的7,8,9列,保存到变量并且输出到文件. 数据: 文件夹11m\  单个文件格式: DAV1                                                        MARKER NAME66010M001                                                   MARKER NUMBER     7    PR    TD    HR  

C语言库函数大全及应用实例十二

原文:C语言库函数大全及应用实例十二                                          [编程资料]C语言库函数大全及应用实例十二 函数名: setrgbpalette 功 能: 定义IBM8514图形卡的颜色 用 法: void far setrgbpalette(int colornum, int red, int green, int blue); 程序例: #i nclude #i nclude #i nclude #i nclude int main(v

highcharts实例教程二:结合php与mysql生成饼图

上回我们分析了用highcharts结合php和mysql生成折线图的实例,这次我们以技术cto网站搜索引擎流量为例利用highcharts生成饼图. 饼图通常用在我们需要直观地显示各个部分所占的比例的时候,比如我们需要统计各大搜索引擎来的流量比例. 第一步:创建数据库保存各搜索引擎流量的pv数 CREATE TABLE `pie` (   `id` int(10) NOT NULL AUTO_INCREMENT,   `title` varchar(30) NOT NULL,   `pv` i

分布式Hadoop安装(二)

二.集群环境安装Zookeeper 1.         hadoop0,namenode机器下,配置zookeeper,先解压安装包. 使用命令:tar -zxvf zookeeper-3.4.4.tar.gz 2.         Hadoop0,配置zookeeper的环境变量 a)         打开/etc/profile,增加并修改如下内容 export ZOOKEEPER_HOME=/usr/local/zookeeper export PATH=.:$HADOOP_HOME/b

基于Android2.3.5系统:JNI与HAL实例解析[二]

*************************************************************************************************************************** 作者:EasyWave                                                                                                           时间:2015.

一些有用的javascript实例分析(二)

原文:一些有用的javascript实例分析(二) 1 5 求出数组中所有数字的和 2 window.onload = function () 3 { 4 var oBtn = document.getElementsByTagName("button")[0]; 5 var oInput = document.getElementsByTagName("input")[0] 6 var oStrong = document.getElementsByTagName

Selenium2学习-022-WebUI自动化实战实例-020-JavaScript 在 Selenium 自动化中的应用实例之二(获取浏览器显示区域大小)

前几篇文章中简略概述了,如何获取.设置浏览器窗口大小,那么我们该如何获取浏览器显示区域的大小呢?此文讲对此进行简略概述,敬请各位小主参阅.若有不足之处,敬请各位大神指正,不胜感激! 获取浏览器显示区域的方法,我目前想到的只有以下两种方法: 1.通过 JavaScript  获取浏览器显示区域的大小 2.通过 WebDriver 截图,获取截图的大小,从而获得浏览器显示区域的大小 此文主要以第一种方法示例演示,第二种方法进行后续更新,敬请期待!谢谢! 1 /** 2 * Get width and