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应用案例
Hadoop之MapReduce程序应用三的更多相关文章
- 用PHP编写Hadoop的MapReduce程序
用PHP编写Hadoop的MapReduce程序 Hadoop流 虽然Hadoop是用Java写的,但是Hadoop提供了Hadoop流,Hadoop流提供一个API, 允许用户使用任何语言编 ...
- 如何在Windows下面运行hadoop的MapReduce程序
在Windows下面运行hadoop的MapReduce程序的方法: 1.下载hadoop的安装包,这里使用的是"hadoop-2.6.4.tar.gz": 2.将安装包直接解压到 ...
- 如何在Hadoop的MapReduce程序中处理JSON文件
简介: 最近在写MapReduce程序处理日志时,需要解析JSON配置文件,简化Java程序和处理逻辑.但是Hadoop本身似乎没有内置对JSON文件的解析功能,我们不得不求助于第三方JSON工具包. ...
- HADOOP之MAPREDUCE程序应用二
摘要:MapReduce程序进行单词计数. 关键词:MapReduce程序 单词计数 数据源:人工构造英文文档file1.txt,file2.txt. file1.txt 内容 Hello Ha ...
- Hadoop之Mapreduce 程序
package com.gylhaut.hadoop.senior.mapreduce; import java.io.IOException; import java.util.StringToke ...
- hadoop开发MapReduce程序
准备工作: 1.设置HADOOP_HOME,指向hadoop安装目录 2.在window下,需要把hadoop/bin那个目录替换下,在网上搜一个对应版本的 3.如果还报org.apache.hado ...
- 【Hadoop】MapReduce笔记(三):MapReduce的Shuffle和Sort阶段详解
一.MapReduce 总体架构 整体的Shuffle过程包含以下几个部分:Map端Shuffle.Sort阶段.Reduce端Shuffle.即是说:Shuffle 过程横跨 map 和 reduc ...
- 在window下远程虚拟机(centos)hadoop运行mapreduce程序
(注:虽然连接成功但是还是执行不了.以后有时间再解决吧 看到的人别参考仅作个人笔记)先mark下 1.首先在window下载好一个eclipse.和拷贝好linux里面hadoop版本对应的插件(我是 ...
- hadoop-初学者写map-reduce程序中容易出现的问题 3
1.写hadoop的map-reduce程序之前所必须知道的基础知识: 1)hadoop map-reduce的自带的数据类型: Hadoop提供了如下内容的数据类型,这些数据类型都实现了Writab ...
随机推荐
- ZYSocket 4.3.5 SOCKET框架组 发布[NEW]
最新代码请到 github: https://github.com/luyikk/ZYSOCKET 更新 4.3.5更新说明: 修复各种BUG. 重写了一份 protobuf-net 有什么用呢,不需 ...
- Qt核心剖析: moc
前面我们说过,Qt 不是使用的“标准的” C++ 语言,而是对其进行了一定程度的“扩展”.这里我们从Qt新增加的关键字就可以看出来:signals.slots 或者 emit.所以有人会觉得 Qt 的 ...
- stack around the variable “ ” was corrupted
用scanf格式控制不当经常发生此错误. 如 short int a=10; scanf("%d",&a); 应该是%hd; 一般是越界引起的. 参看:http://bl ...
- 关于C(m,n)%p的故事
序 遥远的\(\mod p\)(\(p\)是质数)大陆有一个恶魔:\[C(m,n)={m!\over n! (m-n)!}\] 于是大家有了各种求逆元的方法.这里MOD = p. 壹 for (int ...
- hdu 1102 Constructing Roads(最小生成树 Prim)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1102 Problem Description There are N villages, which ...
- javascript真的是异步的吗?且看setTimeout的实现原理以及setTimeout(0)的使用场景
在今天之前我一直以为setTimeout这个函数是异步的,无意中看到了一篇关于setTimeout的文章.发现自己曾经的认识全是错误的,赶紧总结下. 先看一段代码: var start = new D ...
- Android 之SparseArray<E>详解
SparseArray是android里为<Interger,Object>这样的Hashmap而专门写的class,目的是提高效率,其核心是折半查找函数(binarySearch) pr ...
- 【linux kernel】 中断处理-中断下半部
欢迎转载,转载时需保留作者信息,谢谢. 邮箱:tangzhongp@163.com 博客园地址:http://www.cnblogs.com/embedded-tzp Csdn博客地址:http:// ...
- android listview滚动到顶部
1.为了实现类似IOS点击状态栏,列表回滚到顶部的功能(要平滑滚动效果),android上点击一个按钮或是图片什么的也可以让listview一次性滚动到顶部(滑动太多页时,一次可能滚不到顶部,使用ha ...
- 2014 I/O归来:Google连接一切
6月,WWDC 2014与Google I/O (大部分演讲视频都公开.Youtube须要FQ,很值得一看)相继召开.今年是我第三年參加Google I/O大会. 三年间.Google积累了非常多技 ...