分布式数据库大作业(17页).doc

上传人:1595****071 文档编号:35367488 上传时间:2022-08-21 格式:DOC 页数:17 大小:283.50KB
返回 下载 相关 举报
分布式数据库大作业(17页).doc_第1页
第1页 / 共17页
分布式数据库大作业(17页).doc_第2页
第2页 / 共17页
点击查看更多>>
资源描述

《分布式数据库大作业(17页).doc》由会员分享,可在线阅读,更多相关《分布式数据库大作业(17页).doc(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

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函数来处理一个输入的

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

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

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

8、ap的主要功能是读取经过切割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对被存放同一区域中,并且将位置报告给mast

11、er。如果同一个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 local

13、host6.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.

14、UB01scp 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.p

15、ub.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) 在所有机器上安装JDK 下

16、载并解压jdk1.6.0_30到/usr/develop目录下,然后在/etc/profile最后追加下面内容:JAVA_HOME=/usr/develop/jdk1.6.0_30export JRE_HOME=/usr/develop/jdk1.6.0_30/jreexport CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATHexport PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH保存退出,然后执行source /etc/profile即可。(5) 在所有机器上安装配置Hadoop可以首先在nameno

17、de上配置,配置后在分发到datanode上。在这里,下载hadoop-1.0.4-bin.tar.gz,然后解压到/home/peter/hadoop/目录下。接下来需要修改hadoop的conf文件夹下的配置信息:修改hadoop-env.sh,加入如下语句,使得hadoop能够找到java的路径: export JAVA_HOME=/usr/develop/jdk1.6.0_29修改core-site.xml,如下: fs.default.name hdfs:/UB01:9000hadoop.tmp.dir/home/grid/tmp注意:hadoop.tmp.dir 是hadoop文件

18、系统依赖的基础配置,很多路径都依赖它。它默认的位置是在/tmp/$user下面,在local和hdfs都会建有相同的目录, 但是在/tmp路径下的存储是不安全的,因为linux一次重启,文件就可能被删除。导致namenode启动不起来。修改hdfs-site.xml,如下:dfs.replication1修改mapred-site.xml,如下:mapred.job.tracker192.168.1.106:9001masters里写入作为namenode节点机器的IP:192.168.1.106slaves里写入作为datanode节点的机器的IP:192.168.1.104192.168.

19、1.107到此,hadoop的有关配置已经完成,namenode端通过如下命令把配置好的hadoop发送到各个datanode处:scp -r hadoop-1.0.4 UB02:/home/peter/hadoopscp -r hadoop-1.0.4 UB03:/home/peter/hadoop 注意点:关闭所有机器上的防火墙,不然会导致datanode起不来。 /etc/init.d/iptables stop 在namenode端cd到hadoop文件夹下,格式化分布式文件系统: bin/hadoop namenode -format 下面接着在namenode端启动hadoop进程

20、: bin/start-all.sh 如果没有其它差错的话,hadoop可以正常启动,并能够看到如下结果: 在namenode端用jps命令查看启动情况,如下:peterUB01:/hadoop-1.0.4$ jpsxxxx Jpsxxxx Namenodexxxx Secondarynamenodexxxx JobTracker在datanode端用jps查看启动情况,如下:peterUB02:/hadoop-1.0.4 $ jpsxxxx Jpsxxxx DataNodexxxx TaskTracker然后可以通过如下地址来查看集群运行状况:http:/UB01:50030http:/UB

21、01:50070http:/UB02:50060Hadoop自带了一个MapReduce测试程序,用于统计输入文件中各个单词出现的次数。其核心代码及注释如下: publicclassWordCount /* *TokenizerMapper继续自Mapper * *一个文件就一个map,两个文件就会有两个map *map这里读入输入文件内容以tnrf进行分割,然后设置word=one的key/value对 * *paramObjectInputkeyType: *paramTextInputvalueType: *paramTextOutputkeyType: *paramIntWritabl

22、eOutputvalueType: * *Writable的主要特点是它使得Hadoop框架知道对一个Writable类型的对象怎样进行serialize以及deserialize. *WritableComparable在Writable的基础上增加了compareT接口,使得Hadoop框架知道怎样对WritableComparable类型的对象进行排序。 * */ publicstaticclassTokenizerMapper extendsMapper privatefinalstaticIntWritableone=newIntWritable(1); privateTextwor

23、d=newText(); publicvoidmap(Objectkey,Textvalue,Contextcontext )throwsIOException,InterruptedException StringTokenizeritr=newStringTokenizer(value.toString(); while(itr.hasMoreTokens() word.set(itr.nextToken(); context.write(word,one); /* *IntSumReducer继承自Reducer * *不管几个Map,都只有一个Reduce,这是一个汇总 *reduce

24、循环所有的map值,把word=one的key/value对进行汇总 * *这里的key为Mapper设置的word每一个key/value都会有一次reduce * *当循环结束后,最后的确context就是最后的结果. * *authoryangchunlong.tw * */ publicstaticclassIntSumReducer extendsReducer privateIntWritableresult=newIntWritable(); publicvoidreduce(Textkey,Iterablevalues, Contextcontext )throwsIOExce

25、ption,InterruptedException intsum=0; for(IntWritableval:values) sum+=val.get(); result.set(sum); context.write(key,result); publicstaticvoidmain(Stringargs)throwsException Configurationconf=newConfiguration(); StringotherArgs=newGenericOptionsParser(conf,args).getRemainingArgs(); /* *这里必须有输入/输出 */ i

26、f(otherArgs.length!=2) System.err.println(Usage:wordcount); System.exit(2); Jobjob=newJob(conf,wordcount); job.setJarByClass(WordCount.class);/主类 job.setMapperClass(TokenizerMapper.class);/mapper job.setCombinerClass(IntSumReducer.class);/作业合成类 job.setReducerClass(IntSumReducer.class);/reducer job.s

27、etOutputKeyClass(Text.class);/设置作业输出数据的关键类 job.setOutputValueClass(IntWritable.class);/设置作业输出值类 FileInputFormat.addInputPath(job,newPath(otherArgs0);/文件输入 FileOutputFormat.setOutputPath(job,newPath(otherArgs1);/文件输出 System.exit(job.waitForCompletion(true)?0:1);/等待完成退出. 接下来,我们将hadoop目录下的conf目录作为输入,统计

28、其下面所有文件中单词的个数。步骤如下:1. 通过hadoop的命令在HDFS上创建input目录,命令如下:bin/hadoop fs -mkdir input2. 将conf目录下所有文件上传到HDFS的input目录,命令如下:bin/hadoop fs put conf/* input/3. 运行wordcount程序:bin/hadoop jar hadoop-examples-1.0.4.jar wordcount input output4. 查看运行结果,命令如下:bin/hadoop fs cat output/part-* 一下是测试实验结果的截图:在namenode上启动h

29、adoop后执行jps命令查看是否正确运行:图2. 查看是否正确运行在datanode上的执行结果:图3. datanode的执行结果成功执行wordcount程序后查看输出文件:图4. 查看输出文件通过浏览器查看任务执行情况:图5. 任务执行情况5. 总结及评价Mapreduce的原理很简单,通过对任务划分和分而治之的方法,使得大型问题得到迅速地解决。Mapreduce的关键贡献是各种实际问题抽象的解决过程抽象成map(映射)和reduce(化简)两个主要过程,着使得程序员在解决实际问题事只要分析什么map过程什么是reduce过程,它们的key/value对分别是什么。而不用去关心Mapr

30、educe库函数做的复杂的底层工作。Mapreduce 是典型的以空间的消耗换取时间的节省的例子。为解决一个问题可能要动用很多台机器。在机器间的信息传递和信息延迟都会影响问题解决的速度和效果。这里有几个关键:一是机群内部使用的文件存储系统要能高效地工作,Google 使用的分布式文件系统GFS能达到这个要求。然后是机群中的网络通信,网络带宽和网络通信质量决定的信息传递的延迟,当大量的文件被通过网络远程读取时,网络可能会成为问题解决速度的瓶颈。另外,一个高效的调度和容错机制是非常关键的。Master必须能及时地了解全局的运行情况并采取相应的措施。采取什么的方式和策略进行控制和反馈,将很大程度上影

31、响任务完成的速度和质量。在分布式系统上各种意外事故随时可能发生,Master必须针对事故进行预处理(如将同一个任务拷贝多分,交给不同机器处理,接受最先完成的)和错误处理(启动备选拷贝任务)。大量的网络传输可能导致传输错误,采取什么样的检错和纠错机制也很重要。而且各种控制可能是矛盾的,必须协调和折中得到综合性能最优的方案。参考文献1 Shvachko K, Kuang H, Radia S, et al. The hadoop distributed file systemC/Mass Storage Systems and Technologies (MSST), 2010 IEEE 26th

32、 Symposium on. IEEE, 2010: 1-10.2 Ghemawat S, Gobioff H, Leung S T. The Google file systemC/ACM SIGOPS Operating Systems Review. ACM, 2003, 37(5): 29-43.3 Dean J, Ghemawat S. MapReduce: simplified data processing on large clustersJ. Communications of the ACM, 2008, 51(1): 107-113.4http:/hadhoop.apac

33、he.org/docs/hdfs/current.html5Luis M V, Luis Rodero Merino, Juan Caceres, Maik Lindner. A break in the clouds: toward a cloud definition. ACM SIGCOMM Computer Communication Review, 2009,39(1):50-55 6 Grossman R L, Gu Y, Sabala M, et al. Compute and storage clouds using wide area high performance net

34、worksJ. Future Generation Computer Systems, 2009, 25(2): 179-183.7Daniel J A. Data management in the cloud: limitations and opportunities. Bulletin of the IEEE Computer Society Technical Committee on Data Engineering, 2009,32(1):3-128 Dean J, Ghemawat S. MapReduce: a flexible data processing toolJ. Communications of the ACM, 2010, 53(1): 72-77.9 郑启龙, 吴晓伟, 房明, 等. HPMR 在并行矩阵计算中的应用J. 计算机工程, 2010, 36(8).10徐志伟, 廖华明, 余海燕, 等. 网络计算系统的分类研究 JJ. 计算机学报, 2008, 31(9): 1509-1515.11 12 -第 17 页-

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 单元课程

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁