ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:160.19KB ,
资源ID:9645406      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9645406.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(佛山科学技术学院云计算实验报告了解MapReduce编程.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

佛山科学技术学院云计算实验报告了解MapReduce编程.docx

1、佛山科学技术学院云计算实验报告了解MapReduce编程云计算概论实验三:了解MapReduce编程学时:2(一)实验类型:创新型(二)实验目的1.学习MapReduce编程模型,理解MapReduce编程思想,会用MapReduce框架编写简单的并行程序;2. 熟练使用Eclipse编写、调试和运行MapReduce并行程序。(三)实验内容1启动Hadoop,启动Eclipse;2增加/删除用户根据要求,编写MapReduce并行程序,并且运行和调试成功。(四)要求:选开(五)每组人数:1(六)主要实验设备及配套数:微机80台,数据中心服务器集群(七)所在实验室:计算机技术实验室 佛山科学技

2、术学院实 验 报 告课程名称 云计算概论 实验项目 实验三 了解MapReduce编程 一、 实验环境1. Ubuntu 14.04.3 LTS 32位2. Hadoop 2.6.03. JDK 1.7.0_181二、 实验内容与完成情况学习MapReduce编程模型,理解MapReduce编程思想,会用MapReduce框架编写简单的并行程序;熟练使用Eclipse编写、调试和运行MapReduce并行程序。1) 编程实现文件合并和去重操作对于两个输入文件,即文件A和文件B,请编写MapReduce程序,对两个文件进行合并,并剔除其中重复的内容,得到一个新的输出文件C。下面是输入文件和输出文

3、件的一个样例供参考。 输入文件A的样例如下: 20150101 x 20150102 y 20150103 x 20150104 y 20150105 z20150106 x输入文件B的样例如下:20150101 y20150102 y20150103 x20150104 z20150105 y根据输入文件A和B合并得到的输出文件C的样例如下:20150101 x20150101 y20150102 y20150103 x20150104 y20150104 z20150105 y 20150105 z20150106 x答案:代码如下:package com.Merge;import jav

4、a.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 o

5、rg.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import org.apache.hadoop.util.GenericOptionsParser;public class Merge /* * param args * 对A,B两个文件进行合并,并剔除其中重复的内容,得到一个新的输出文件C */ /重载map函数,直接将输入中的value复制到输出数据的key上 public static class Map

6、 extends Mapper private static Text text = new Text(); public void map(Object key, Text value, Context context) throws IOException,InterruptedException text = value; context.write(text, new Text(); /重载reduce函数,直接将输入中的key复制到输出数据的key上 public static class Reduce extends Reducer public void reduce(Text

7、key, Iterable values, Context context ) throws IOException,InterruptedException context.write(key, new Text(); public static void main(String args) throws Exception / TODO Auto-generated method stub Configuration conf = new Configuration(); conf.set(fs.default.name,hdfs:/localhost:9000); String othe

8、rArgs = new Stringinput,output; /* 直接设置输入参数 */ if (otherArgs.length != 2) System.err.println(Usage: wordcount ); System.exit(2); Job job = Job.getInstance(conf,Merge and duplicate removal); job.setJarByClass(Merge.class); job.setMapperClass(Map.class); job.setCombinerClass(Reduce.class); job.setRedu

9、cerClass(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); 2) 编写程序实现对输入文件的排序现在有多个输入文件,每个文件中的每行内容均为一

10、个整数。要求读取所有文件中的整数,进行升序排序后,输出到一个新的文件中,输出的数据格式为每行两个整数,第一个数字为第二个整数的排序位次,第二个整数为原待排列的整数。下面是输入文件和输出文件的一个样例供参考。输入文件1的样例如下:33371240输入文件2的样例如下:416395输入文件3的样例如下:14525根据输入文件1、2和3得到的输出文件如下:1 12 43 54 125 166 257 338 379 3910 4011 45答案:代码如下:package com.MergeSort;import java.io.IOException;import org.apache.hadoop

11、.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.Partitioner;import org.apache.hadoop.mapreduce.Reducer;imp

12、ort org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import org.apache.hadoop.util.GenericOptionsParser;public class MergeSort /* * param args * 输入多个文件,每个文件中的每行内容均为一个整数 * 输出到一个新的文件中,输出的数据格式为每行两个整数,第一个数字为第二个整数的排序位次,第二个整数为原待排列的整数 */ /

13、map函数读取输入中的value,将其转化成IntWritable类型,最后作为输出key public static class Map extends Mapper private static IntWritable data = new IntWritable(); public void map(Object key, Text value, Context context) throws IOException,InterruptedException String text = value.toString(); data.set(Integer.parseInt(text);

14、context.write(data, new IntWritable(1); /reduce函数将map输入的key复制到输出的value上,然后根据输入的value-list中元素的个数决定key的输出次数,定义一个全局变量line_num来代表key的位次 public static class Reduce extends Reducer private static IntWritable line_num = new IntWritable(1); public void reduce(IntWritable key, Iterable values, Context contex

15、t) throws IOException,InterruptedException for(IntWritable val : values) context.write(line_num, key); line_num = new IntWritable(line_num.get() + 1); /自定义Partition函数,此函数根据输入数据的最大值和MapReduce框架中Partition的数量获取将输入数据按照大小分块的边界,然后根据输入数值和边界的关系返回对应的Partiton ID public static class Partition extends Partition

16、er public int getPartition(IntWritable key, IntWritable value, int num_Partition) int Maxnumber = 65223;/int型的最大数值 int bound = Maxnumber/num_Partition+1; int keynumber = key.get(); for (int i = 0; inum_Partition; i+) if(keynumber=bound * i) return i; return -1; public static void main(String args) t

17、hrows Exception / TODO Auto-generated method stub Configuration conf = new Configuration(); conf.set(fs.default.name,hdfs:/localhost:9000); String otherArgs = new Stringinput,output; /* 直接设置输入参数 */ if (otherArgs.length != 2) System.err.println(Usage: wordcount ); System.exit(2); Job job = Job.getIns

18、tance(conf,Merge and sort); job.setJarByClass(MergeSort.class); job.setMapperClass(Map.class); job.setReducerClass(Reduce.class); job.setPartitionerClass(Partition.class); job.setOutputKeyClass(IntWritable.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.addInputPath(job, new Path

19、(otherArgs0); FileOutputFormat.setOutputPath(job, new Path(otherArgs1); System.exit(job.waitForCompletion(true) ? 0 : 1); 1) 对给定的表格进行信息挖掘下面给出一个child-parent的表格,要求挖掘其中的父子辈关系,给出祖孙辈关系的表格。输入文件内容如下:child parentSteven LucySteven JackJone LucyJone JackLucy MaryLucy FrankJack AliceJack JesseDavid AliceDavid

20、JessePhilip DavidPhilip AlmaMark DavidMark Alma输出文件内容如下:grandchild grandparentMark JesseMark AlicePhilip JessePhilip AliceJone JesseJone AliceSteven JesseSteven AliceSteven FrankSteven MaryJone FrankJone Mary答案:代码如下:package com.simple_data_mining;import java.io.IOException;import java.util.*;import

21、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.mapreduc

22、e.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import org.apache.hadoop.util.GenericOptionsParser;public class simple_data_mining public static int time = 0; /* * param args * 输入一个child-parent的表格 * 输出一个体现grandchild-grandparent关系的表格 */ /Map将输入文件按照空格分割成child

23、和parent,然后正序输出一次作为右表,反序输出一次作为左表,需要注意的是在输出的value中必须加上左右表区别标志 public static class Map extends Mapper public void map(Object key, Text value, Context context) throws IOException,InterruptedException String child_name = new String(); String parent_name = new String(); String relation_type = new String()

24、; String line = value.toString(); int i = 0; while(line.charAt(i) != ) i+; String values = line.substring(0,i),line.substring(i+1); if(pareTo(child) != 0) child_name = values0; parent_name = values1; relation_type = 1;/左右表区分标志 context.write(new Text(values1), new Text(relation_type+child_name+parent

25、_name); /左表 relation_type = 2; context.write(new Text(values0), new Text(relation_type+child_name+parent_name); /右表 public static class Reduce extends Reducer public void reduce(Text key, Iterable values,Context context) throws IOException,InterruptedException if(time = 0) /输出表头 context.write(new Te

26、xt(grand_child), new Text(grand_parent); time+; int grand_child_num = 0; String grand_child = new String10; int grand_parent_num = 0; String grand_parent= new String10; Iterator ite = values.iterator(); while(ite.hasNext() String record = ite.next().toString(); int len = record.length(); int i = 2;

27、if(len = 0) continue; char relation_type = record.charAt(0); String child_name = new String(); String parent_name = new String(); /获取value-list中value的child while(record.charAt(i) != +) child_name = child_name + record.charAt(i); i+; i=i+1; /获取value-list中value的parent while(ilen) parent_name = parent_

28、name+record.charAt(i); i+; /左表,取出child放入grand_child if(relation_type = 1) grand_childgrand_child_num = child_name; grand_child_num+; else/右表,取出parent放入grand_parent grand_parentgrand_parent_num = parent_name; grand_parent_num+; if(grand_parent_num != 0 & grand_child_num != 0 ) for(int m = 0;mgrand_child_num;m+) for(int n=0;ngran

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1