预览加载中,请您耐心等待几秒...
1/8
2/8
3/8
4/8
5/8
6/8
7/8
8/8

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Mapreduce实验报告前言和简介MapReduce是Google提出的一种编程模型在这个模型的支持下可以实现大规模并行化计算。在Mapreduce框架下一个计算机群通过统一的任务调度将一个巨型任务分成许多部分分别解决然后合并得到最终结果。Mapreduce可以让程序员以简单的程序来解决实际问题而隐藏了诸如分布、工作调度、容错、机器间通信使得大规模任务简单而迅速地完成。Mapreduce的基本原理核心思想。“DivideandConquer”是Mapreduce的核心思想。面对一个规模庞大的问题要处理是以TB计的数据Mapreduce采用“输入”------“分解”------“解决”------“聚合”------“输出结果”的基本过程。基本原理Map和Reduce是两个核心操作用户定义的map函数接收被切割过的原始的key/value对集并且计算出一个中间key/value对集。Mapreduce库函数将所有的具有相同key值的value聚合在一起交给用户定义的reduce函数处理。reduce函数将同一key值的所有value合并成得到输出文件。在整个过程中Mapreduce库函数负责原始数据的切割中间key/value对集的聚合以及任务的调度容错、通信控制等基础工作。而用户定义的map和reduce函数则根据实际问题确定具体操作。框架的基本结构和执行流程基本结构Mapreduce框架的主要程序分为三种即MasterMap和Reduce。Master:主要功能有两个任务的分割和任务的调度。Master把输入文件切成许多个split每个split文件一般为几十M。Master同时还要调度任务监视各个mapworker和reduceworker的工作状态以做出相应的安排。Master还要监视各个子任务的完成进展情况。Master用到的数据结构StructSplit[]//文件切割后的信息structMapSTATE[]//记录各个map任务的情况。structReduceSTATE[R]//各个reduce任务的情况。TypeMap=0Reduce=0//记录map任务和reduce任务的完成个数。MapWorkerSTATE[]ReduceWorkerSTATE[]//各个工作机器的忙闲状态FileSplit(stringinputfilename)//输入文件切割JobAssign()//工作任务分配Map:主要功能是读取经过切割split文件形成一个map任务分析map任务得到中间结构并且将同一类型的中间文件存放在同一个区域内等待特定的reduce程序读取。Reduce:不同的Reduce读取各个Map得到的特定的中间文件将所有相同的中间文件整合成最后的输出文件。任务执行基本流程基本流程图见下一页首先输入收据文件被Mapreduce库函数分割成M个split集。用户定义的程序被拷贝到机群中其中一个是master其它的都是worker。M个map任务和R个reduce任务将被分配。Master负责调度任务和过程监视。随时检测worker的工作状况任务的完成进度。Mapworker每完成一个子任务向master报告。一个被分配了map任务的worker读取一个split集该worker从这个split集中分析出key/value对然后有map函数来处理这些key/value对并得到中间key/value对这些key/value对将最终存放在mapworker的本地硬盘上。每完成一个任务报告master。中间key/value对被存在本地硬盘的R个不同的区域中由于可能的key值很可能不止R个故必须利用一个分割函数来划分中间文件常用的是散列的方法(如hash(key)modR)。保证key值相同的key/value对被存放同一区域中并且将位置报告给master。如果同一个key的中间文件多而小可以考虑用cmobine函数在本地进行合并。当所有的split都被分析完成之后reduceworker开始工作每个reduce根据master的安排和信息指示利用机群的内部文件系统读取mapworker本地磁盘中特定位置的中间文件。Reduce开始聚合中间文件得到自己的输出文件。在聚合的过程中由于有很多key值一般将用到排序。Reduceworker完成自己的工作后向master报告。输入文件控制Split0split1split2…...splitnMasterMapWorkerrMa