摘要: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程序应用三的更多相关文章

  1. 用PHP编写Hadoop的MapReduce程序

    用PHP编写Hadoop的MapReduce程序     Hadoop流 虽然Hadoop是用Java写的,但是Hadoop提供了Hadoop流,Hadoop流提供一个API, 允许用户使用任何语言编 ...

  2. 如何在Windows下面运行hadoop的MapReduce程序

    在Windows下面运行hadoop的MapReduce程序的方法: 1.下载hadoop的安装包,这里使用的是"hadoop-2.6.4.tar.gz": 2.将安装包直接解压到 ...

  3. 如何在Hadoop的MapReduce程序中处理JSON文件

    简介: 最近在写MapReduce程序处理日志时,需要解析JSON配置文件,简化Java程序和处理逻辑.但是Hadoop本身似乎没有内置对JSON文件的解析功能,我们不得不求助于第三方JSON工具包. ...

  4. HADOOP之MAPREDUCE程序应用二

    摘要:MapReduce程序进行单词计数. 关键词:MapReduce程序  单词计数 数据源:人工构造英文文档file1.txt,file2.txt. file1.txt 内容 Hello   Ha ...

  5. Hadoop之Mapreduce 程序

    package com.gylhaut.hadoop.senior.mapreduce; import java.io.IOException; import java.util.StringToke ...

  6. hadoop开发MapReduce程序

    准备工作: 1.设置HADOOP_HOME,指向hadoop安装目录 2.在window下,需要把hadoop/bin那个目录替换下,在网上搜一个对应版本的 3.如果还报org.apache.hado ...

  7. 【Hadoop】MapReduce笔记(三):MapReduce的Shuffle和Sort阶段详解

    一.MapReduce 总体架构 整体的Shuffle过程包含以下几个部分:Map端Shuffle.Sort阶段.Reduce端Shuffle.即是说:Shuffle 过程横跨 map 和 reduc ...

  8. 在window下远程虚拟机(centos)hadoop运行mapreduce程序

    (注:虽然连接成功但是还是执行不了.以后有时间再解决吧 看到的人别参考仅作个人笔记)先mark下 1.首先在window下载好一个eclipse.和拷贝好linux里面hadoop版本对应的插件(我是 ...

  9. hadoop-初学者写map-reduce程序中容易出现的问题 3

    1.写hadoop的map-reduce程序之前所必须知道的基础知识: 1)hadoop map-reduce的自带的数据类型: Hadoop提供了如下内容的数据类型,这些数据类型都实现了Writab ...

随机推荐

  1. FileStream -- 复制文件

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. _splitpath / _wsplitpath 将绝对路径分割为盘符、路径、文件名、扩展名。

    今天分享下一个路径分割的API,可以将一个完整的绝对路径分割为: 盘符(包括冒号:) 路径(包含前面&后面的\,不含盘符&文件名) 文件名(不含扩展名) 扩展名(包含前面的.) 先不说 ...

  3. perl encode_utf8必须用在utf8环境

    [root@wx03 mojo]# cat test.pl use Mojolicious::Lite; use JSON qw/encode_json decode_json/; use Encod ...

  4. perl 自动登陆网站发短信

    use LWP::UserAgent; use HTTP::Date qw(time2iso str2time time2iso time2isoz); use Net::Ping; use Sock ...

  5. 13-(1-4)进程管道关于popen(-r-w)及pipe的程序使用实例

    #include<unistd.h> #include<stdlib.h> #include<stdio.h> #include<string.h> # ...

  6. javascript 剔除数组中相同的值,合并数组中相同项

    var a = ["2013-01","2013-01","2013-02","2013-02","2013- ...

  7. perl学习(10) 字符串处理函数和排序

    1.1.index Perl 查找子串第一次在大字符串中出现的地方,返回第一个字符的位置. . . my $stuff = “Howordy world!”; my $where3 = index($ ...

  8. 使用开源的PullToRefreshScrollView scrollTo和scrollby遇到的问题

    在项目中使用了开源的com.handmark.pulltorefresh.library 下拉刷新组件,当中使用了PullToRefreshScrollView ,须要调用scrollTo或者scro ...

  9. 【剑指offer】从上向下打印二叉树

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/26089165 剑指offer上的第23题,实际上就是考察二叉树的层序遍历,详细思想能够參考 ...

  10. java假设模拟请求重新启动路由器(网络爬虫经常使用),还有java怎样下载图片

    我们假设在公司或家里使用网络爬虫去抓取自己索要的一些数据的时候,经常对方的站点有defence机制,会给你的http请求返回500错误,仅仅要是同样IP就请求不到数据,这时候我们仅仅能去重新启动路由器 ...