利用MapReduce实现数据去重

数据去重主要是为了利用并行化的思想对数据进行有意义的筛选。

统计大数据集上的数据种类个数、从网站日志中计算访问地等这些看似庞杂的任务都会涉及数据去重。

示例文件内容:

此处应有示例文件

设计思路

数据去重的最终目标是让原始数据中出现次数超过一次的数据在输出文件中只出现一次。

自然就想到将同一数据的所有记录都交给一台reduce机器,无路这个数据出现多少次,只要在最终结果中输出一次就可以了。

具体就是reduce的输入应该以数据作为key,而对value-list没有要求。

当reduce收到一个<key, value-list>是就直接将key复制到输出的key中,并将value设置为空值。

在MapReduce流程中,map的输出<key, value>经过Shuffle过程聚集成<key, value-list>后会交给reduce。

所以从设计好的reduce输入可以反推出map的输出key应该为数据,value任意。继续反推,map输出数据的key为数据,

而在这个实例中每个数据代表输入文件中的一行内容,所以map阶段要完成的任务就是在采用Hadoop默认的作业输入方式之后,

将value设置为key,并直接输出(输出中的value任意)。map中的结果经过Shuffle过程之后交给reduce。

reduce阶段不会管每个key有多少个value,它直接将输入的key复制为输出的key并输出就可以了(输出中的value被置为空了)。

时间: 2024-10-26 20:25:55

利用MapReduce实现数据去重的相关文章

MapReduce实现数据去重

一.原理分析 Mapreduce的处理过程,由于Mapreduce会在Map~reduce中,将重复的Key合并在一起,所以Mapreduce很容易就去除重复的行.Map无须做任何处理,设置Map中写入context的东西为不作任何处理的行,也就是Map中最初处理的value即可,而Reduce同样无须做任何处理,写入输出文件的东西就是,最初得到的Key. 我原来以为是map阶段用了hashmap,根据hash值的唯一性.估计应该不是... Map是输入文件有几行,就运行几次. 二.代码 2.1

利用mapreduce将数据从hdfs导入到hbase遇到的问题

现象: 15/08/12 10:19:30 INFO mapreduce.Job: Job job_1439396788627_0005 failed with state FAILED due to: Application application_1439396788627_0005 failed 2 times due to AM Container for appattempt_1439396788627_0005_000002 exited with exitCode: 1 due t

[Hive]MapReduce将数据写入Hive分区表

业务需求: 将当天产生的数据写入Hive分区表中(以日期作为分区) 业务分析: 利用MapReduce将数据写入Hive表实则上就是将数据写入至Hive表的HDFS目录下,但是问题在于写入至当天的分区,因此问题转换为:如何事先创建Hive表的当天分区 解决方案: 1. 创建Hive表 # 先创建分区表rcmd_valid_path hive -e "set mapred.job.queue.name=pms; drop table if exists pms.test_rcmd_valid_pa

Hadoop阅读笔记(二)——利用MapReduce求平均数和去重

前言:圣诞节来了,我怎么能虚度光阴呢?!依稀记得,那一年,大家互赠贺卡,短短几行字,字字融化在心里:那一年,大家在水果市场,寻找那些最能代表自己心意的苹果香蕉梨,摸着冰冷的水果外皮,内心早已滚烫.这一年……我在博客园-_-#,希望用dt的代码燃烧脑细胞,温暖小心窝. 上篇<Hadoop阅读笔记(一)——强大的MapReduce>主要介绍了MapReduce的在大数据集上处理的优势以及运行机制,通过专利数据编写Demo加深了对于MapReduce中输入输出数据结构的细节理解.有了理论上的指导,仍

MapReduce编程之数据去重

数据去重主要是为了掌握和利用并行化思想来对数据进行有意义的筛选.统计大数据集上的数据种类个数.从网站日志中计算访问地等这些看似庞杂的任务都会涉及数据去重.下面就进入这个实例的MapReduce程序设计. package com.hadoop.mr; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.

Hadoop 中利用 mapreduce 读写 mysql 数据

Hadoop 中利用 mapreduce 读写 mysql 数据 有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP 的需求,我们需要 mapreduce 与 mysql 进行数据的交互,而这些特性正是 hbase 或者 hive 目前亟待改进的地方. 好了言归正传,简单的说说背景.原理以及需要注意的地方: 1.为了方便 MapReduce 直接访问关系型数据库(Mysql,Oracle),Hadoop提供了DBInp

Hadoop mapreduce 数据去重 数据排序小例子

数据去重: 数据去重,只是让出现的数据仅一次,所以在reduce阶段key作为输入,而对于values-in没有要求,即输入的key直接作为输出的key,并将value置空.具体步骤类似于wordcount: Tip:输入输出路径配置. import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop

Hadoop第7周练习—MapReduce进行数据查询和实现推简单荐系统(转)

1  运行环境说明 1.1 硬软件环境 1.2 机器网络环境 2  书面作业1:计算员工相关 2.1 书面作业1内容 2.2  实现过程 2.2.1   准备测试数据 2.2.2   问题1:求各个部门的总工资 2.2.3   问题2:求各个部门的人数和平均工资 2.2.4   问题3:求每个部门最早进入公司的员工姓名 2.2.5   问题4:求各个城市的员工的总工资 2.2.6   问题5:列出工资比上司高的员工姓名及其工资 2.2.7   问题6:列出工资比公司平均工资要高的员工姓名及其工资

hadoop数据去重

"数据去重"主要是为了掌握和利用并行化思想来对数据进行有意义的筛选.统计大数据集上的数据种类个数.从网站日志中计算访问地等这些看似庞杂的任务都会涉及数据去重.下面就进入这个实例的MapReduce程序设计. 1.1 实例描述 对数据文件中的数据进行去重.数据文件中的每行都是一个数据. 样例输入如下所示: 1.txt 内容 1 1 2 2 2.txt内容 4 4 3 3 样例输出如下: 1 2 3 4 将测试数据上传到hdfs上/input目录下,同时确保输出目录不存在. 1.2 设计思