分布式数据库大作业.doc

上传人:灯火****19 文档编号:136457966 上传时间:2020-06-28 格式:DOC 页数:18 大小:282KB
返回 下载 相关 举报
分布式数据库大作业.doc_第1页
第1页 / 共18页
分布式数据库大作业.doc_第2页
第2页 / 共18页
分布式数据库大作业.doc_第3页
第3页 / 共18页
分布式数据库大作业.doc_第4页
第4页 / 共18页
分布式数据库大作业.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《分布式数据库大作业.doc》由会员分享,可在线阅读,更多相关《分布式数据库大作业.doc(18页珍藏版)》请在金锄头文库上搜索。

1、分布式数据库大作业Hadoop MapReduce云计算模型研究学院: 软件学院 专业: 软件工程 2014年01月02日大连理工大学Hadoop MapReduce云计算模型研究1. 引言Hadoop1是一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。简单地说来,Hadoop是一个可以更容易开发和运行处理大规模数据的软件平台。其包括两个部分:HDFS2和MapReduce3。DFS即HadoopDistributedFileSystem(Hadoop分布式文件系统),HDFS具有高容错性,并且可以被部

2、署在低价的硬件设备之上。HDFS很适合那些有大数据集的应用,并且提供了对数据读写的高吞吐率。HDFS是一个master/slave的结构,就通常的部署来说,在master上只运行一个Namenode,而在每一个slave上运行一个Datanode。HDFS支持传统的层次文件组织结构,同现有的一些文件系统在操作上很类似,比如你可以创建和删除一个文件,把一个文件从一个目录移到另一个目录,重命名等等操作。Namenode管理着整个分布式文件系统,对文件系统的操作(如建立、删除文件和文件夹)都是通过Namenode来控制4。MapReduce是由Google提出的一种并行分布式编程模型5-7。用以进行

3、大数据量的计算。对于大数据量的计算,通常采用的处理手法就是并行计算。至少现阶段而言,对许多开发人员来说,并行计算还是一个比较遥远的东西。MapReduce就是一种简化并行计算的编程模型,它让那些没有多少并行计算经验的开发人员也可以开发并行应用。MapReduce的名字源于这个模型中的两项核心操作:Map和Reduce。也许熟悉FunctionalProgramming(函数式编程)的人见到这两个词会倍感亲切。简单的说来,Map是把一组数据一对一的映射为另外的一组数据,其映射的规则由一个函数来指定,比如对1,2,3,4进行乘2的映射就变成了2,4,6,8。Reduce是对一组数据进行归约,这个归

4、约的规则由一个函数指定,比如对1,2,3,4进行求和的归约得到结果是10,而对它进行求积的归约结果是24。2. MapReduce的基本原理MapReduce是云计算的核心技术之一,它为并行系统的数据处理提供了一个简单、优雅的解决方案。其主要目的是为了大型集群的系统能在大数据集上进行并行工作,并用于大规模数据的并行运算。Divide and Conquer”是Mapreduce的核心思想8。面对一个规模庞大的问题,要处理是以TB计的数据,Mapreduce采用“输入”-“分解”-“解决”-“聚合”-“输出结果”的基本过程。在MapRedcue 模型中用户只须指定一个map函数来处理一个输入的k

5、ey/value对,产生中间结果key/value对集,再通过一个由用户指定的reduce函数来处理中间结果中具有相同key值的value。适合用 MapReduce 来处理的数据集(或任务)有一个基本要求: 待处理的数据集可以分解成许多小的数据集,而且每一个小数据集都可以完全并行地进行处理9-10。MapReduce通过把对数据集的大规模操作分发给网络上的每个节点实现可靠性;每个节点会周期性的把完成的工作和状态的更新报告回来。如果一个节点保持沉默超过一个预设的时间间隔,主节点(类同Google File System中的主服务器)记录下这个节点状态为死亡,并把分配给这个节点的数据发到别的节点

6、。每个操作使用命名文件的原子操作以确保不会发生并行线程间的冲突;当文件被改名的时候,系统可能会把他们复制到任务名以外的另一个名字上去。(避免副作用)。化简操作工作方式很类似,但是由于化简操作在并行能力较差,主节点会尽量把化简操作调度在一个节点上,或者离需要操作的数据尽可能近的节点上了;这个特性可以满足Google的需求,因为他们有足够的带宽,他们的内部网络没有那么多的机器。 在Google,MapReduce用在非常广泛的应用程序中,包括“分布grep,分布排序,web连接图反转,每台机器的词矢量,web访问日志分析,反向索引构建,文档聚类,机器学习,基于统计的机器翻译.”值得注意的是,Map

7、Reduce实现以后,它被用来重新生成Google的整个索引,并取代老的ad hoc程序去更新索引。MapReduce会生成大量的临时文件,为了提高效率,它利用Google文件系统来管理和访问这些文件。3. 框架的结构和工作流程Mapreduce框架的主要程序分为三种即Master,Map和Reduce。Master的主要功能有两个,任务的分割和任务的调度。Master把输入文件切成许多个split,每个split文件一般为几十M。Master同时还要调度任务监视各个map worker和reduce worker的工作状态,以做出相应的安排。Master还要监视各个子任务的完成进展情况。Ma

8、p的主要功能是读取经过切割split文件形成一个map任务,分析map任务,得到中间结构并且将同一类型的中间文件存放在同一个区域内等待特定的reduce程序读取。另外不同的Reduce读取各个Map得到的特定的中间文件,将所有相同的中间文件整合成最后的输出文件。其流程图如下图所示:控制Split0 split1 split2 . split n MasterMapWorkerrMapWorkerrMap Worker 分析key/value对 分区写入磁盘 读取ReduceWorkerReduceWorkerrReduceWorkerr输出文件输出文件输出文件图1.基本控制流程图说明:1.单向

9、箭头表示控制,双向箭头表示控制和反馈2.某些操作中Mapworker硬盘上的key/value在被Reducerworker读取之前可以有combine操作,将相同key的value合并以减少读取次数3.分散的输出文件也可以合并成一个输出文件而对于有些操作如求最大值则必须合并输出文件才能得到最终结果。首先输入收据文件被Mapreduce库函数分割成M个split集。用户定义的程序被拷贝到机群中,其中一个是master,其它的都是worker。M个map任务和R个reduce任务将被分配。Master负责调度任务和过程监视。随时检测worker的工作状况,任务的完成进度。Map worker每完

10、成一个子任务向master报告。一个被分配了map任务的worker读取一个split集,该worker从这个split集中分析出key/value对,然后有map函数来处理这些key/value对并得到中间key/value对,这些key/value对将最终存放在map worker的本地硬盘上。每完成一个任务报告master。中间key/value对被存在本地硬盘的R个不同的区域中,由于可能的key值很可能不止R个,故必须利用一个分割函数来划分中间文件,常用的是散列的方法(如hash(key) mod R)。保证key值相同的key/value对被存放同一区域中,并且将位置报告给maste

11、r。如果同一个key的中间文件多而小可以考虑用cmobine函数在本地进行合并。当所有的split都被分析完成之后,reduce worker开始工作,每个reduce根据master的安排和信息指示利用机群的内部文件系统读取map worker本地磁盘中特定位置的中间文件。Reduce开始聚合中间文件,得到自己的输出文件。在聚合的过程中由于有很多key值,一般将用到排序。Reduce worker完成自己的工作后向master报告。4. 实验及测试本文选取了三台Ubuntu虚拟机模拟分布式环境,搭建并完成了Hadoop自带的wordcount程序的测试。搭建环境如下:Ubuntu10.10、

12、Hadoop1.0.4、jdk1.6.0_30Namenode:UB01(ip:192.168.1.106)Datanode:UB02(ip:192.168.1.104) UB03(ip:192.168.1.107)按如下步骤进行配置,此过程参考了文献11、12。(1) 配置NameNode和DataNode修改每台机器的/etc/hosts(包括namenode和datanode)如下:127.0.0.1 localhost.localdomain localhost192.168.1.106 UB01192.168.1.104 UB02192.168.1.107 UB03:1 localh

13、ost6.localdomain6 localhost6(2) 在所有的机器上建立相同的用户 useradd peter passwd 123456 输入密码后即可成功建立并设置peter用户和密码。(3) SSH设置 由于启动hadoop时及任务执行过程中需要远程访问各主机,因此为了避免多次输入密码,应首先配置各主机的SSH使其能免输入的登录其他主机。配置如下:在所有机器的/home/peter目录下ssh-keygen -t rsa /一路回车到底cd .ssh然后在UB01上执行:scp id_rsa.pub peterUB02:/home/peter/.ssh/id_rsa.pub.U

14、B01scp id_rsa.pub peterUB03:/home/peter/.ssh/id_rsa.pub.UB01在UB02上执行:scp id_rsa.pub peterUB01:/home/peter/.ssh/id_rsa.pub.UB02scp id_rsa.pub peterUB03:/home/peter/.ssh/id_rsa.pub.UB02在UB03上执行:scp id_rsa.pub peterUB01:/home/peter/.ssh/id_rsa.pub.UB03scp id_rsa.pub peterUB02:/home/peter/.ssh/id_rsa.pub.UB03这样就把各自的密钥文件全部拷贝到每台机器上了,然后:在UB01上执行:cat id_rsa.pub id_rsa_pub.UB02 id_rsa.pub.UB03 authorized_keys在UB02上执行:cat id_rsa.pub id_rsa_pub.UB01 id_rsa.pub.UB03 authorized_keys在UB03上执行:cat id_rsa.pub id_rsa_pub.UB02 id_rsa.pub.UB01 authorized_keys这样向其他机器发起SSH连接,只有第一次登录时需要输入密码,以后就不需要。(4) 在所有机器上安装

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > IT计算机/网络 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号