当前位置: 首页 > web >正文

Mapreduce多条数据去重处理


课程原地址:http://hbust.shiyanbar.com/course/91079

上课老师:李歆

实验时间:20180524

地点:云桌面

实验人:郭畅

 

【实验目的】

1) 理解mapreduce执行原理

2) 理解map,reduce阶段

3) 熟悉mapreduce代码的编写

【实验原理】

需求:

把指定的数据信息以单条记录的方式保存在文本文件source.txt中并存放到指定的位置,该位置可以是本地,也可以hdfs分布式系统。

原始数据

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

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

数据去重的最终目标是让原始数据中出现次数超过一次的数据在输出文件中只出现一次。具体就是reduce的输入应该以数据作为key,而对value-list则没有要求。当reduce接收到一个`<keyvalue-list>`时就直接将key复制到输出的key中,并将value设置成空值。

【实验环境】

本次环境是:centos6.5 + jdk1.7.0_79 + hadoop2.4.1 + eclipse
日志文件source.txt存放在桌面名为`分布式计算MapReduce开发基础`目录下的相应章节中对应的实验名下的文件夹中找寻。
jar包在桌面名为`lib`文件夹下。
 工具在/simple/soft目录下
【实验步骤】

一、项目准备阶段

1.1 linux系统的命令终端上切换到/simple目录,执行命令:touch source.txt创建一个文件并把上面的记录数据信息拷贝到/simple/source.txt文件中并查看source.txt文件内容。如图1所示

 

1

 

1.2 simple目录可以通过执行命令:ls查看到/simple/目录下source.txt文件。如图2所示


2

 

1.3 本案例因为需要用到hadoop的计算,所以在编写程序之前需要先启动yarn服务,可以在命令终端执行命令:start-all.sh hdfsyarn服务启动。(查看服务启动共有6项,如果缺少请执行stop-all.sh关闭,重新启动)。如图3所示


3

二 程序编写

2.1 eclipse中的项目列表中,右键点击,选择“new“—>Java Project…”新建一个项目“DeduplicationInfo” 。 如图4所示


4

 

2.2 在项目src目录下,右键点击,选择“新建”创建一个类文件名称为“DeduplicationMapper”并指定包名” com.simple.deduplication” 。如图5所示


5

 

2.3 在编写“DeduplicationMapper”类之前需要把hadoop相关的jar包导入,首先在项目根目录下创建一个文件夹lib并把指定位置中的包放入该文件中 。如图6所示


6

 

2.4 lib下所有的jar包导入到环境变量,首先全选lib文件夹下的jar包文件,右键点击,选择“build path-->add to build path,添加后,发现在项目下多一个列表项“Referenced Libraries”。如图7所示



7

 

2.5 让类“DeduplicationMapper”继承类Mapper同时指定需要的参数类型,根据业务逻辑修改map类的内容如下。

 

package com.simple.deduplication;import java.io.IOException;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Mapper;public class DeduplicationMapper extends Mapper<LongWritable, Text, Text, Text> {public void map(LongWritable key, Text value, Context context)throws IOException, InterruptedException {//按行读取信息并作为mapper的输出键,mapper的输出值置为空文本即可Text line = value;context.write(line, new Text(""));}}

 

2.6 在项目src目录下指定的包名” com.simple.deduplication”下右键点击,新建一个类名为“DeduplicationReducer “并继承Reducer类,然后添加该类中的代码内容如下所示。

 package com.simple.deduplication;import java.io.IOException;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Reducer;public class DeduplicationReducer extends Reducer<Text, Text, Text, Text> {public void reduce(Text key, Iterable<Text> values, Context context)throws IOException, InterruptedException {//Reducer阶段直接按键输出即可,键直接可以实现去重context.write(key, new Text(""));}
}

 

2.7 在项目src目录下指定的包名” com.simple.deduplication”下右键点击,新建一个测试主类名为“TestDeduplication “并指定main主方法。如图8所示


8

 

 

2.8添加代码如下所示。

 

package com.simple.deduplication;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.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;public class TestDeduplication {public static void main(String[] args) throws Exception{//获取作业对象Job job = Job.getInstance(new Configuration());//设置主类job.setJarByClass(TestDeduplication.class);//设置job参数job.setMapperClass(DeduplicationMapper.class);job.setReducerClass(DeduplicationReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(Text.class);//设置job输入输出FileInputFormat.addInputPath(job, new Path("file:///simple/source.txt"));FileOutputFormat.setOutputPath(job, new Path("file:///simple/output"));System.exit(job.waitForCompletion(true) ? 0 : 1);}}

 

2.9 按照以上的步骤,把mapperreducer阶段以及测试代码编写完毕之后,选中测试类“TestDeduplication “,右键点击选择”Run as--->Java Application,查看控制台显示内容查看是否正确执行。如图9所示


图9

 

2.10 程序执行完毕之后,可以到输出信息目录下,执行查看命令cat part-r-00000查看对数据处理后产生的结果。如图10所示


10

 

 

http://www.xdnf.cn/news/11751.html

相关文章:

  • Dedecms5.7数据结构说明文档
  • 进入qq空间显示服务器错误,解决QQ空间打开无响应或报错的方法
  • editplus 5注册码
  • 龙将加速浏览器_疫情严重反弹!马克龙宣布法国再度实施封锁措施
  • USD MID-160|全球最薄的MID!
  • IT外企那点儿事(转)
  • 彩虹桥木马程序backdoor.win32.bifrose.gel查杀
  • Eclipse导入项目already exist
  • 游戏开发随手记:Cocos2d触摸分发原理
  • 腾讯开源框架
  • 网易爱才 取之有道
  • Android休眠唤醒驱动流程
  • 企业邮箱托管外包后安全吗?企业邮箱安全须知
  • javascript语言入门教程,javascript教程完整版
  • 职业价值观测评(舒伯修订版)
  • 抢先体验Windows Technical Preview(Windows 10)和Windows Server Technical Preview
  • suse linux enterprise 10下载,在suse linux enterprise 10 中安装 oracle 10g
  • ASP.NET网站制作
  • Jbuilder8开发J2ee学习笔记(7) (转)
  • 电脑死机是什么原因及解决方法
  • cpu性能测试软件 国际象棋,国际象棋测试
  • 地球毁灭日.3九星连珠
  • 普通下载链接转换为迅雷、快车、旋风下载链接
  • WPA2破解教程(详细步骤)
  • 10个技巧,3分钟教会你高效寻找开源项目
  • 全国DNS服务器IP地址【电信、网通、铁通】
  • 摄影网页设计制作 简单静态HTML网页作品 WEB静态摄影网站作业成品 学生DW摄影网站模板
  • Multitouch for Mac v1.27.31 - 多点触控手势增强神器
  • Element的el-table实现拖拽改变某一行的高度
  • 好用的博客评论系统 Valine 使用及避坑指南