hadoop程序MapReduce之DataDeduplication
需求:去掉文件中重复的数据。
样板:data.log
2016-3-1 a
2016-3-2 b
2016-3-2 c
2016-3-2 b
输出结果: 2016-3-1 a
2016-3-2 b
2016-3-2 c
解决思路:取出一行数据,经过mapper处理后,利用MapReduce默认的将相同的key合并后交给reduce处理的原则,这样可以达到数据去重解决问题。
MapReduce分析设计:
Mapper分析设计:
1、<k1,v1>,k1代表:每行数据的行号,v1代表:一行数据。
2、<k2,v2>,k2代表:一行数据,v2代表:就这里可以设置为空值。
Reduce分析设计:
3、<k3,v3>,k3代表:相同的一行数据,v3代表:空值。
4、统计分析输出<k4,v4>,k4代表:相同的一行数据,v4代表:空值。
程序部分:
DataMapper类
package com.cn.DataDeduplication; import java.io.IOException; import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper; public class DataMapper extends Mapper<Object, Text, Text, Text>{
Text line = new Text();
@Override
protected void map(Object key, Text value, Context context)
throws IOException, InterruptedException {
line = value;
context.write(line, new Text(""));
}
}
DataReduce类
package com.cn.DataDeduplication; import java.io.IOException; import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer; public class DataReduce extends Reducer<Text, Text, Text, Text> {
@Override
protected void reduce(Text key, Iterable<Text> values, Context context)
throws IOException, InterruptedException {
context.write(key, new Text(""));
}
}
DataDeduplication类:
package com.cn.DataDeduplication; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser; /**
* 数据去重
* @author root
*
*/
public class DataDeduplication {
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: wordcount ");
System.exit(2);
}
//创建一个job
Job job = new Job(conf, "data deduplication"); //设置运行的jar
job.setJarByClass(DataDeduplication.class); //设置输入和输出文件路径
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1])); //设置mapper和reduce处理类
job.setMapperClass(DataMapper.class);
job.setReducerClass(DataReduce.class); //设置输出key-value数据类型
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class); //提交作业并等待它完成
System.exit(job.waitForCompletion(true) ? 0 : 1);
} }
补充一点:一个文件切分的时候按照默认64M的数据块原则,启动一个mapper进程。
举例说明:比如data.log有20M,会启动一个mapper进程,data1.log有80M,会将这个文件拆分成64M+16M,所有要启动2个Mapper进程,
最终这两个文件会启动3个mapper进程。
hadoop程序MapReduce之DataDeduplication的更多相关文章
- hadoop程序MapReduce之SingletonTableJoin
需求:单表关联问题.从文件中孩子和父母的关系挖掘出孙子和爷奶关系 样板:child-parent.txt xiaoming daxiong daxiong alice daxiong jack 输出: ...
- hadoop程序MapReduce之average
需求:求多门课程的平均值. 样板:math.txt zhangsan 90 lisi 88 wanghua 80 china.txt zhangsan 80lisi 90wanghua 88 输出:z ...
- hadoop程序MapReduce之DataSort
需求:对文件中的数据进行排序. 样本:sort.log 10 13 10 20 输出:1 10 2 10 3 13 4 20 分析部分: mapper分析: 1.<k1,v1>k1代表:行 ...
- hadoop程序MapReduce之MaxTemperature
需求:求每年当中最高的温度 样本:temp.log 2016080623 2016072330 2015030420 输出结果:2016 30 2015 20 MapReduce分析设计: Mappe ...
- hadoop程序MapReduce之WordCount
需求:统计一个文件中所有单词出现的个数. 样板:word.log文件中有hadoop hive hbase hadoop hive 输出:hadoop 2 hive 2 hbase 1 MapRedu ...
- 用PHP编写Hadoop的MapReduce程序
用PHP编写Hadoop的MapReduce程序 Hadoop流 虽然Hadoop是用Java写的,但是Hadoop提供了Hadoop流,Hadoop流提供一个API, 允许用户使用任何语言编 ...
- Hadoop之MapReduce程序应用三
摘要:MapReduce程序进行数据去重. 关键词:MapReduce 数据去重 数据源:人工构造日志数据集log-file1.txt和log-file2.txt. log-file1.txt内容 ...
- 如何在Windows下面运行hadoop的MapReduce程序
在Windows下面运行hadoop的MapReduce程序的方法: 1.下载hadoop的安装包,这里使用的是"hadoop-2.6.4.tar.gz": 2.将安装包直接解压到 ...
- Hadoop之Mapreduce 程序
package com.gylhaut.hadoop.senior.mapreduce; import java.io.IOException; import java.util.StringToke ...
随机推荐
- C#中http请求下载的常用方式demo
//通过webClient方式 WebClient client = new WebClient(); string url="http://down6.3987.com:801/2010/ ...
- eclipse memory内存溢出
eclipse 跑web程序时候 内存溢出..解决方式 设置 jvm内存分配方案: -Xms800m -Xmx800m -XX:MaxNewSize=256m -XX:MaxPermSize=256m
- Qt学习之路1---软件下载安装及工程简介
1.下载安装目前最新版的qt,官网链接:https://www.qt.io/qt5-8/: 和qt4不同,qt5在线安装,轻巧快速,而且不用配置一些繁琐的东西,安装之后会出现Qt creator这就是 ...
- iOS 键盘处理(改变键盘为完成键),UITextField键盘显示隐藏,弹出,回弹
很多时候用到UITextField时,处理键盘是一个很棘手的问题. 问题一:如何隐藏键盘? 方案1.改变键盘右下角的换行(enter)键为完成键,后实现代理方法键盘自动回弹 keyBoardContr ...
- 服务器响应慢的分析与解决(Linux服务器)
一.分析思路 1.排除本机自身原因 2.服务器性能分析 3.项目本身分析(不详细说) 4.虚拟机分析 5.数据库分析 二.详细分析方法 1.排除本机自身原因 可以使用站长工具测试网站速度. 2.服务器 ...
- GNU make学习笔记
第五章:规则的命令 5.1 命令的回显 make在执行命令之前会把要执行的命令输出到标准输出设备,称之为"回显". 如果规则的命令以字符"@"开始,则make在 ...
- C语言 · 明明的随机数
算法训练 明明的随机数 时间限制:1.0s 内存限制:256.0MB 问题描述 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的 ...
- 线程安全的atomic wrapper classes例子
先参考一个例子 http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html#!comments 即使只是i++,实际上也是由多个原子 ...
- hdu 1595 find the longest of the shortest(dijstra + 枚举)
http://acm.hdu.edu.cn/showproblem.php?pid=1595 大致题意: 给一个图.让输出从中删除随意一条边后所得最短路径中最长的. . 思路: 直接枚举每条边想必是不 ...
- org.hibernate.hql.internal.ast.QuerySyntaxExceptionunexpected token: on near line 1
select d.content,count(s.status) from MesmachineStatus s , Mesmachinestatusdetail d where s.status=d ...