1 数据去重
1.1 数据去重
对数据文件中的数据进行去重。数据文件中的每行都是一个数据。
1.2 应用场景
统计大数据集上的数据种类个数、从网站日志中计算访问地等这些看似庞杂的任务都会涉及数据去重。
1.3 设计思路
数据去重的最终目标是让原始数据中出现次数超过一次的数据在输出文件中只出现一次。我们自然而然会想到将同一个数据的所有记录都交给一台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被设置成空了)。
1.4 程序代码
程序代码如下所示:
import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; 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 Dedup { //map将输入中的value复制到输出数据的key上,并直接输出 public static class Map extends Mapper<Object,Text,Text,Text>{ private static Text line=new Text();//每行数据 //实现map函数 public void map(Object key,Text value,Context context) throws IOException,InterruptedException{ line=value; context.write(line, new Text("")); } } //reduce将输入中的key复制到输出数据的key上,并直接输出 public static class Reduce extends Reducer<Text,Text,Text,Text>{ //实现reduce函数 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(); conf.set("mapred.job.tracker", "192.168.1.2:9001"); String[] ioArgs=new String[]{"dedup_in","dedup_out"}; String[] otherArgs = new GenericOptionsParser(conf, ioArgs).getRemainingArgs(); if (otherArgs.length != 2) { System.err.println("Usage: Data Deduplication <in> <out>"); System.exit(2); } Job job = new Job(conf, "Data Deduplication"); job.setJarByClass(Dedup.class); //设置Map、Combine和Reduce处理类 job.setMapperClass(Map.class); job.setCombinerClass(Reduce.class); job.setReducerClass(Reduce.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); } } |
相关推荐
在这个实例中,我们看到的是一个基于MapReduce的数据去重操作,这个操作在大数据处理中非常常见,尤其是当处理的数据源包含重复记录时。下面将详细解释每个部分的作用。 1. **Mapper类**: 在`DedupMapper`类中,...
在这个"007_hadoop中MapReduce应用案例_1_数据去重"的主题中,我们将深入探讨如何利用MapReduce解决数据去重的问题。这个案例可能涉及到对大数据集进行清洗和预处理,以确保数据的准确性和一致性。 首先,我们来看`...
### MapReduce综合应用案例——招聘数据清洗 #### 一、背景 随着互联网技术的迅猛发展,各类在线招聘平台成为连接求职者与企业的桥梁。这些平台不仅提供了海量的招聘信息,也为企业的人才选拔提供了便利。然而,在...
2. 数据去重:通过比较记录的关键字段(如应聘者ID)去除重复的求职者信息。 3. 数据转换:将非结构化数据(如简历文本)转化为结构化的键值对,便于后续处理。 四、Reduce阶段的职责 Reduce阶段处理Map阶段生成的...
内容概要:本文详细介绍了利用MapReduce框架对电信数据进行清洗的具体流程和技术细节。首先概述了数据清洗的目标,包括过滤无效记录、标准化数据格式和删除重复记录。接着逐步讲解了MapReduce的各个阶段:Map阶段...
1. 数据去重:通过键的唯一性,去除重复的求职者信息。 2. 数据聚合:统计各种统计数据,如求职者最多的学历、最常见的工作经验年限等。 3. 异常值处理:对异常数据进行过滤或修正。 此外,"文档资料.docx"可能包含...
在“MapReduce数据分析实战”中,作者李立松通过自己的经验分享了使用MapReduce进行数据分析的实践案例,尤其是如何通过Hadoop这一开源框架来实施MapReduce计算。 首先,文档提到了单机测试的重要性,这是在集群...
### MapReduce在招聘数据清洗中的综合应用案例 #### 一、案例背景 在当前大数据时代背景下,企业常常需要处理大量的招聘数据,这些数据通常包含了职位信息、公司信息、薪资范围、工作地点等丰富的信息。然而,原始...
本文将详细讲解Hadoop集群中的MapReduce初级案例,主要涉及如何利用MapReduce进行数据去重操作。MapReduce是Hadoop分布式计算框架的核心组成部分,它通过将大规模数据处理任务分解为可并行执行的map和reduce任务,...
案例不再局限于WordCount(词频统计)这样的入门级示例,而是扩展到了数据去重("数据去重")这样的实际应用。数据去重是很多数据处理任务中的重要一环,例如大数据集上的数据种类统计、网站日志分析等。 案例描述...
通过以上案例的学习,我们可以看到MapReduce在大数据处理中的广泛应用及其强大的功能。无论是对访问日志的分析,还是对网站流量的统计,MapReduce都能提供高效、可靠的解决方案。同时,通过构建MapReduce链,我们还...
4. **实战演练**:通过实际的案例来学习MapReduce编程,如词频统计任务、成绩统计、文件内容合并去重等。 5. **工具使用**:掌握如何使用Hadoop Streaming和Pig等工具来进行数据处理,这些工具可以帮助简化MapReduce...
MapReduce是一种分布式计算模型,由Google提出,主要用于处理和生成大规模数据集。它将复杂的、大规模的任务分解为一系列较小的可并行处理的部分,通过“分而治之”的策略实现高效计算。MapReduce的核心思想包括Map...
《数据密集型文本处理与MapReduce》这本书深入浅出地介绍了MapReduce的基础知识及其在文本处理中的应用,为读者提供了一个全面了解MapReduce技术和实践案例的机会。无论是对于从事大数据处理的研究人员还是工程师来...
MapReduce是Apache Hadoop的核心组件之一,它为大规模数据集的并行处理提供了一种分布式计算模型。在这个项目中,开发者使用Java编程语言编写MapReduce作业,来处理和清洗数据。 【描述】中的"数据清洗"是数据分析...
学员将通过编写Java接口实现经典的WordCount程序,理解MapReduce如何处理数据去重、排序和计算平均值等任务,从而深化对分布式计算的理解。 课程特色在于其实践性,不仅有详细的步骤指导,还会分享Twitter、MySpace...