Hadoop之MapReduce程序应用三

摘要:MapReduce程序进行数据去重。

关键词:MapReduce   数据去重

数据源:人工构造日志数据集log-file1.txt和log-file2.txt。

log-file1.txt内容

2014-1-1    wangluqing

2014-1-2    root

2014-1-3   root

2014-1-4  wangluqing

2014-1-5  root

2014-1-6  wangluqing

log-file2.txt内容

2014-1-1  root

2014-1-2  root

2014-1-3  wangluqing

2014-1-4  wangluqing

2014-1-5  wangluqing

2014-1-6  root

问题描述:

解决方案:

1 开发工具   VM10 + Ubuntu12.04+Hadoop1.1.2

2 设计思路  数据去重是让原始数据中出现次数超过一次的数据在输出文件中只出现一次。利用键值的唯一性法则可以实现数据的去重。

程序清单

package com.wangluqing;

import java.io.IOException;
import java.util.StringTokenizer;

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.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import org.apache.hadoop.util.GenericOptionsParser;

public class DeleteDataDuplication {
public static class DeleteDataDuplicationMapper extends Mapper<Object,Text,Text,Text> {
private static Text line = new Text();
public void map(Object key, Text value, Context context) throws IOException,InterruptedException {
line = value;
context.write(line,new Text(" "));
}
}

public static class DeleteDataDuplicationReducer 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 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:DeleteDataDuplication<in><out>");
System.exit(2);
}
Job job = new Job(conf,"delete data duplication");
job.setJarByClass(DeleteDataDuplication.class);
job.setMapperClass(DeleteDataDuplicationMapper.class);
job.setCombinerClass(DeleteDataDuplicationReducer.class);
job.setReducerClass(DeleteDataDuplicationReducer.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);
}
}

3 执行程序

关于如何执行程序,可以参考《Hadoop之MapReduce程序应用二》一文中执行程序所述内容。

查看经过数据去重后的结果如下。

2014-1-1 root
2014-1-1 wangluqing
2014-1-2 root
2014-1-3 root
2014-1-3 wangluqing
2014-1-4 wangluqing
2014-1-5 root
2014-1-5 wangluqing
2014-1-6 root
2014-1-6 wangluqing

总结:

数据去重可以应用到统计大数据集上数据种类的个数,从网站日志文件中计算访问地等场景。

Resource:

1   http://www.wangluqing.com/2014/03/hadoop-mapreduce-app3/

2  《Hadoop实战 第二版》陆嘉恒著 第5章 MapReduce应用案例

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值