MapReduce分布式编程实验报告

这篇实验报告介绍了MapReduce分布式编程模型,详细讲解了什么是MapReduce,并通过实例运行了WordCount程序,包括WordCountMapper、WordCountReduce和WordCountDriver类的使用,最后讲述了如何导出和运行jar包。
摘要由CSDN通过智能技术生成

一、分布式编程的介绍

可在分布计算机系统的几台计算机上同时协调执行的程序设计方法,分布式程序设计的主要特征是分布和通信。采用分布式程序设计方法设计程序时,一个程序由若干个可独立执行的程序模块组成。这些程序模块分布于一个分布式计算机系统的几台计算机上同时执行。分布在各台计算机上的程序模块是相互关联的,它们在执行中需要交换数据,即通信。只有通过通信,各程序模块才能协调地完成一个共同的计算任务。采用分布式程序设计方法解决计算问题时,必须提供用以进行分布式程序设计的语言和设计相应的分布式算法。分布式程序设计语言与常用的各种程序设计语言的主要区别,在于它具有程序分布和通信的功能。因此,分布式程序设计语言,往往可以由一种程序设计语言增加分布和通信的功能而构成。分布式算法和适用于多处理器系统的并行算法,都具有并行执行的特点,但它们是有区别的。设计分布式算法时,必须保证实现算法的各程序模块间不会有公共变量,它们只能通过通信来交换数据。此外,设计分布式算法时,往往需要考虑坚定性,即当系统中几台计算机失效时,算法仍是有效的。
在数据库应用程序的开发过程中,网络已走到社会的各个角落。从金融行业的银行联网、交通行业的售票系统、公安系统的全国户籍管理等等,这些企业或行业单位之间地理分布性或业务分布性,使得一个企业或行业拥有多个网络服务器,如何在这种分布式的网络环境下实现高效的数据库应用程序的开发是一个重要的问题。
分布式应用开发简单的说,是指将用户界面、控制台服务、数据库管理三个层次部署在不同的位置上。其中用户界面是客户端实现的功能,控制台服务是一个专门的服务器,数据管理是在一个专门的数据库服务器上实现的。
提示:这里的Web服务器,都是指软件(如IIS等Web服务器软件),它

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值