mapreduce初级案例(1):使用mapreduce去重_第1页
mapreduce初级案例(1):使用mapreduce去重_第2页
mapreduce初级案例(1):使用mapreduce去重_第3页
mapreduce初级案例(1):使用mapreduce去重_第4页
mapreduce初级案例(1):使用mapreduce去重_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MapReduce 初级案例(1):使用 MapReduce 去重 问题导读 1.map 与 reduce 中 key 与 value 有什么不同? 2.shuffle 的作用是什么? 1、数据去重 “数据去重“主要是为了掌握和利用并行化思想来对数据进行有意义的筛选。统计大数据集 上的数据种类个数、从网站日志中计算访问地等这些看似庞杂的任务都会涉及数据去重。 下面就进入这个实例的 MapReduce 程序设计。 1 实例描述 对数据文件中的数据进行去重。数据文件中的每行都是一个数据。 样例输入如下所示: 1) file1: 2012-3-1 a 2012-3-2 b 2012-3-3 c 2012-3-4 d 2012-3-5 a 2012-3-6 b 2012-3-7 c 2012-3-3 c 2) file2: 2012-3-1 b 2012-3-2 a 2012-3-3 b 2012-3-4 d 2012-3-5 a 2012-3-6 c 2012-3-7 d 2012-3-3 c 结果: 2012-3-1 a 2012-3-1 b 2012-3-2 a 2012-3-2 b 2012-3-3 b 2012-3-3 c 2012-3-4 d 2012-3-5 a 2012-3-6 b 2012-3-6 c 2012-3-7 c 2012-3-7 d 2、设计思路 数据去重的最终目标是让原始数据中出现次数超过一次的数据在输出 文件中只出现一次。我们自然而然会想到将同一个数据的所有记录都 交给一台 reduce 机器,无论这个数据出现多少次,只要在最终结果中 输出一次就可以了。具体就是 reduce 的输入应该以数据作为 key,而 对 value-list 则没有要求。当 reduce 接收到一个时 就直接将 key 复制到输出的 key 中,并将 value 设置成空值。 (reduce 中的 key 表示的是我们要统计的数据例如 2012-3-7 c,另外的 value 可以理解为一个序号,没有太大的作用,可理解为无意义数据) 在 MapReduce 流程中,map 的输出经过 shuffle 过程聚 集成后会交给 reduce。 shuffle 是 MapReduce 的关键,也是 mapreduce 的难点,明白了 shuffle,mapreduce 就没有什么内容了。而这里的 value-list 则是 shuffle 的难点。 value-list 可以理解是用来标识有效数据的。但是其本 身没有太大意义。 所以从设计好的 reduce 输入可以反推出 map 的输出 key 应为数据, value 任意。继续反推, map 输出数据的 key 为数据,而在这个实例 中每个数据代表输入文件中的一行内容,所以 map 阶段要完成的任务 就是在采用 Hadoop 默认的作业输入方式之后,将 value 设置为 key, 并直接输出(输出中的 value 任意) 。map 中的结果经过 shuffle 过程 之后交给 reduce。reduce 阶段不会管每个 key 有多少个 value,它直 接将输入的 key 复制为输出的 key,并输出就可以了(输出中的 value 被设置成空了) 。 上面是不是有点难以理解那,这里以后在进行总结,输出中的 value 被设置成空了, 初学者还是比较困惑的。这里举个例子: 下面的 1,2 , 3 也就是被置为空的值,可能不是 1,2 ,3,也可能是其他值。这里只要明 白 key 被置为空的 key 是什么意思就够了。 2012-3-1 a 2012-3-1 b 2012-3-2 a 2012-3-2 b 2012-3-3 b 2012-3-3 c 2012-3-4 d 2012-3-5 a 3、程序代码 程序代码如下所示: package com.hebut.mr;indent import java.io.IOException;/indentindent 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 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(“);/indent /reduce 将输入中的 key 复制到输出数据的 key 上,并直接输出 public static class Reduce extends Reducer /实现 reduce 函数 public void reduce(Text key,Iterable 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“, “: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 “); 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(otherArgs0); FileOutputFormat.setOutputPath(job, new Path(otherArgs1); System.exit(job.waitForCompletion(true) ? 0 : 1); 4 代码结果 1)准备测试数据 通过 Eclipse 下面的“DFS Locations“在“/user/hadoop“目录下创建输入文件“dedup_in“ 文件夹(备注:“dedup_out“不需要创建。)如图 1.4-1 所示,已经成功创建。 201206041324043818.png (37.98 KB, 下载次数: 14) 下载附件 保存到相册 2014-3-2 22:19 上传 图 1.4-1 创建“dedup_in“ 图 1.4.2 上传“file*.txt“ 然后在本地建立两个 txt 文件,通过 Eclipse 上传到“/user/hadoop/dedup_in“文件夹中, 两个 txt 文件的内容如“实例描述“那两个文件一样。如图 1.4-2 所示,成功上传之后。 从 SecureCRT 远处查看“Master.Hadoop“的也能证实我们上传的两个文

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论