欢迎来到天天文库
浏览记录
ID:42968279
大小:66.00 KB
页数:7页
时间:2019-09-24
《云计算实验报告3》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验报告课程:云计算实验题目:HDFS下的MapReduce编程应用_专业:软件工程姓名:王磊学号:B1040914(1)书写MapReduce的原理以及执行过程1.MapReduce库先把userprogram的输入文件划分为M份(M为用户定义),每一份通常有16MB到64MB,如图左方所示分成了splitO-4;然后使用fork将用户进程拷贝到集群内其它机器上。2.userprogram的副本中有一个称为master,其余称为worker,master是负责调度的,为空闲worker分配作业(Map作业或者Reduce作业),worker的数量也是可以由用户指定的。3•被分配了M
2、ap作业的worker,开始读取对应分片的输入数据,Map作业数量是由M决定的,和split—一对应;Map作业从输入数据中抽取出键值对,每一个键值对都作为参数传递给map函数,map函数产生的屮间键值对被缓存在内存屮。4•缓存的中间键值对会被定期写入本地磁盘,而且被分为R个区,R的大小是由用户定义的,将来每个区会对应一个Reduce作业;这些中间键值对的位置会被通报给master,master负责将信息转发给Reduceworker。5.master通知分配了Reduce作业的worker它负责的分区在什么位置(肯定不止一个地方,每个Map作业产生的中间键值对都可能映射到所有R个不
3、同分区),当Reduceworker把所有它负责的中间键值对都读过来后,先对它们进行排序,使得相同键的键值对聚集在一起。因为不同的键可能会映射到同一个分区也就是同一个Reduce作业(谁让分区少呢),所以排序是必须的。6.reduceworker遍历排序后的中间键值对,对于每个唯一的键,都将键与关联的值传递给reduce函数,reduce函数产生的输出会添加到这个分区的输出文件中。6•当所有的Map和Reduce作业都完成了,master唤醒正版的userprogram,MapReduce函数调用返回userprogram的代码。(2)MapReduce程序不同的提交方式;1、用命令
4、行方式提交2、在eclipse中提交作业3、采用eclipse的插件实现项目的提交这三种方式中在eclipse中提交的过程:前提是:1、在你的电脑上安装好eclipse,可以在linux下,也可以在windows环境卜•哦〜,这里需要指出的是:提交作业的机器只要有hadoop的API就可以了,和提交作业的机器所处的环境无关。2、成功搭建一个hadoop集群,或成功部署一个伪分布式,并启动hadoopo代码段截图如下:publicclassWordCount{//mapper类publicstaticclassTokenizerMapperextendsMapper5、xt?Text,able>{privatefinalstaticIntWritableone=newIntWritable(l);privateTextword=newText();publicvoidmap(Objectkey$Textvslue^Contextcontext)throwsIOException,IrrterruptedException{StringTokenizeritr=newStringTokenizer(value.toSt厂ing());while(itr.hasMoreTokens()){word•set(itr.nextToken());contex6、t.writeCi^ord,one);//reducer^publicstaticclassIntSumReducerextendsReduce^TextjIntWritable^TextjIntWritable>{privateIntWritableresult=newIntHritable();publicvoidreduce(Textkey,Iterablevalues,Contextcontext)throwsIOException^InterruptedException(intsum■e;for(IntWritableval:values){su7、mval.get();}result>set(sum);context・write(key,result);}}//reducer^publicstaticclassIntSumReducerextendsReducer{privateIntWritabl皀result=newIntWritable();publicvoidreduce(Textkey,Iterable
5、xt?Text,able>{privatefinalstaticIntWritableone=newIntWritable(l);privateTextword=newText();publicvoidmap(Objectkey$Textvslue^Contextcontext)throwsIOException,IrrterruptedException{StringTokenizeritr=newStringTokenizer(value.toSt厂ing());while(itr.hasMoreTokens()){word•set(itr.nextToken());contex
6、t.writeCi^ord,one);//reducer^publicstaticclassIntSumReducerextendsReduce^TextjIntWritable^TextjIntWritable>{privateIntWritableresult=newIntHritable();publicvoidreduce(Textkey,Iterablevalues,Contextcontext)throwsIOException^InterruptedException(intsum■e;for(IntWritableval:values){su
7、mval.get();}result>set(sum);context・write(key,result);}}//reducer^publicstaticclassIntSumReducerextendsReducer{privateIntWritabl皀result=newIntWritable();publicvoidreduce(Textkey,Iterable
此文档下载收益归作者所有