《云计算实验报告(共8页).docx》由会员分享,可在线阅读,更多相关《云计算实验报告(共8页).docx(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上实验报告课程:_云计算_实验题目:_HDFS下的MapReduce编程应用_专业:_软件工程_姓名:_王磊_学号:_B_(1)书写MapReduce的原理以及执行过程1.MapReduce库先把user program的输入文件划分为M份(M为用户定义),每一份通常有16MB到64MB,如图左方所示分成了split04;然后使用fork将用户进程拷贝到集群内其它机器上。 2.user program的副本中有一个称为master,其余称为worker,master是负责调度的,为空闲worker分配作业(Map作业或者Reduce作业),worker的数量也是可以由用
2、户指定的。3.被分配了Map作业的worker,开始读取对应分片的输入数据,Map作业数量是由M决定的,和split一一对应;Map作业从输入数据中抽取出键值对,每一个键值对都作为参数传递给map函数,map函数产生的中间键值对被缓存在内存中。4.缓存的中间键值对会被定期写入本地磁盘,而且被分为R个区,R的大小是由用户定义的,将来每个区会对应一个Reduce作业;这些中间键值对的位置会被通报给master,master负责将信息转发给Reduce worker。5.master通知分配了Reduce作业的worker它负责的分区在什么位置(肯定不止一个地方,每个Map作业产生的中间键值对都可能
3、映射到所有R个不同分区),当Reduce worker把所有它负责的中间键值对都读过来后,先对它们进行排序,使得相同键的键值对聚集在一起。因为不同的键可能会映射到同一个分区也就是同一个Reduce作业(谁让分区少呢),所以排序是必须的。6.reduce worker遍历排序后的中间键值对,对于每个唯一的键,都将键与关联的值传递给reduce函数,reduce函数产生的输出会添加到这个分区的输出文件中。6.当所有的Map和Reduce作业都完成了,master唤醒正版的user program,MapReduce函数调用返回user program的代码。(2)MapReduce程序不同的提交方
4、式;1、用命令行方式提交2、在eclipse中提交作业3、采用eclipse的插件实现项目的提交这三种方式中在eclipse中提交的过程:前提是:1、在你的电脑上安装好eclipse,可以在linux下,也可以在windows环境下哦,这里需要指出的是:提交作业的机器只要有hadoop的API就可以了,和提交作业的机器所处的环境无关。2、成功搭建一个hadoop集群,或成功部署一个伪分布式,并启动hadoop。代码段截图如下:这时候程序只会在eclipse中虚拟的一个云环境中运行,而不会跑上云端去运行.需要在main方法中添加几行代码,代码附录如下:方案三:采用eclipse的插件实现项目的提
5、交 前提:在eclipse中成功地安装mapreduce插件。不过需要提醒各位的是:hadoop-0.20.203.0版本自带的插件不够完整,需要作出如下修改:1、将HADOOP_HOME/lib目录下的 commons-configuration-1.6.jar , commons-httpclient-3.0.1.jar , commons-lang-2.4.jar , jackson-core-asl-1.0.1.jar 和 jackson-mapper-asl-1.0.1.jar 等5个包复制到hadoop-eclipse-plugin-0.20.203.0.jar的lib目录下。2、
6、然后,修改该包META-INF目录下的MANIFEST.MF,将classpath修改为以下内容:(3)基于MapReduce编程模型实现的对文件数据排序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
7、.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.input.KeyValueTextInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import org.apache.hadoop.util.GenericOptionsParser; public class SortMain public static void main(String args) throws ExceptionConfiguration
8、conf = new Configuration(); String otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); if (otherArgs.length != 2) System.err.println(Usage: wordcount ); System.exit(2); Job job = new Job(conf, Sort); job.setJarByClass(SortMain.class); job.setInputFormatClass(KeyValueTextInputFormat.
9、class);/设定输入的格式是key(中间t隔开)value job.setMapperClass(SortMapper.class); /job.setCombinerClass(IntSumReducer.class); job.setReducerClass(SortReducer.class); job.setMapOutputKeyClass(IntPair.class); job.setMapOutputValueClass(IntWritable.class); job.setSortComparatorClass(TextIntCompartor.class); job.se
10、tGroupingComparatorClass(TextComparator.class);/以key 进行group by job.setPartitionerClass(PartionTest.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(Text.class); FileInputFormat.addInputPath(job, new Path(otherArgs0);/输入参数,对应hadoop jar 对应类运行时在后面加的第一个参数 FileOutputFormat.setOutputPath(job, new Path(otherArgs1);/输出参数 System.exit(job.waitForCompletion(true) ? 0 : 1);专心-专注-专业