




已阅读5页,还剩51页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Ch.3.分布式文件系统,南华大学医学信息工程系,深入理解大数据-大数据处理与编程实践,鸣谢:基于南京大学黄华宜教授课件改编,基本假设(业务需求),基本问题(解决方法),GoogleGFS的基本构架和工作原理,MapReduce分布式文件系统GFS的工作原理,CitefromGhemawatetal.(SOSP2003),GFSMaster,ChunkServer,GoogleGFS的基本构架和工作原理GFSMasterMaster上保存了GFS文件系统的三种元数据:命名空间(NameSpace),即整个分布式文件系统的目录结构Chunk与文件名的映射表Chunk副本的位置信息,每一个Chunk默认有3个副本,MapReduce分布式文件系统GFS的工作原理,GFSMaster,GoogleGFS的基本构架和工作原理GFSChunkServer即用来保存大量实际数据的数据服务器。GFS中每个数据块划分缺省为64MB每个数据块会分别在3个(缺省情况下)不同的地方复制副本;对每一个数据块,仅当3个副本都更新成功时,才认为数据保存成功。,MapReduce分布式文件系统GFS的工作原理,ChunkServer,元数据一般存放在内存中每个数据块的元数据大概占用200B的内存为什么Hadoop适合大文件存储?,GoogleGFS的基本构架和工作原理数据访问工作过程,MapReduce分布式文件系统GFS的工作原理,1.在程序运行前,数据已经存储在GFS文件系统中;程序实行时应用程序会告诉GFSServer所要访问的文件名或者数据块索引是什么,GoogleGFS的基本构架和工作原理数据访问工作过程,MapReduce分布式文件系统GFS的工作原理,2.GFSServer根据文件名会数据块索引在其文件目录空间中查找和定位该文件或数据块,并找数据块在具体哪些ChunkServer上;将这些位置信息回送给应用程序,GoogleGFS的基本构架和工作原理数据访问工作过程,MapReduce分布式文件系统GFS的工作原理,3.应用程序根据GFSServer返回的具体Chunk数据块位置信息,直接访问相应的ChunkServer,GoogleGFS的基本构架和工作原理数据访问工作过程,MapReduce分布式文件系统GFS的工作原理,4.应用程序根据GFSServer返回的具体Chunk数据块位置信息直接读取指定位置的数据进行计算处理,GoogleGFS的基本构架和工作原理数据访问工作过程,MapReduce分布式文件系统GFS的工作原理,特点:应用程序访问具体数据时不需要经过GFSMaster,因此,避免了Master成为访问瓶颈并发访问:由于一个大数据会存储在不同的ChunkServer中,应用程序可实现并发访问,GFS的特点,客户端首先访问Master节点,获取交互的ChunkServer信息,然后访问这些ChunkServer,完成数据存取工作。这种设计方法实现了控制流和数据流的分离。,Client与Master之间只有控制流,而无数据流,极大地降低了Master的负载。,Client与ChunkServer之间直接传输数据流,同时由于文件被分成多个Chunk进行分布式存储,Client可以同时访问多个ChunkServer,从而使得整个系统的I/O高度并行,系统整体性能得到提高。,2.1Google文件系统GFS,采用中心服务器模式:可以方便地增加ChunkServerMaster掌握系统内所有ChunkServer的情况,方便进行负载均衡不存在元数据的一致性问题,Master容错,为了防止Master彻底死机的情况,GFS还提供了Master远程的实时备份,当Master发生故障时,在磁盘数据保存完好的情况下,可以迅速恢复以上元数据,2.1Google文件系统GFS,GFS的容错机制,当Master失效时,只要ChunkServer数据保存完好,可迅速恢复Master上的元数据,ChunkServer容错,GFS采用副本的方式实现ChunkServer的容错,每一个Chunk有多个存储副本(默认为三个),对于每一个Chunk,必须将所有的副本全部写入成功,才视为成功写入,相关的副本出现丢失或不可恢复等情况,Master自动将该副本复制到其他ChunkServer,GFS中的每一个文件被划分成多个Chunk,Chunk的默认大小是64MB,每一个Chunk以Block为单位进行划分,大小为64KB,每一个Block对应一个32bit的校验和,2.1Google文件系统GFS,GFS的容错机制,GFS的系统管理技术大规模集群安装技术:如何在一个成千上万个节点的集群上迅速部署GFS,升级管理和维护等故障检测技术:GFS是构建在不可靠的廉价计算机之上的文件系统,节点数多,故障频繁,如何快速检测、定位、恢复或隔离故障节点节点动态加入技术:当新的节点加入时,需要能自动安装和部署GFS节能技术:服务器的耗电成本大于购买成本,Google为每个节点服务器配置了蓄电池替代UPS,大大节省了能耗。,MapReduce分布式文件系统GFS的工作原理,Hadoop的分布式文件系统HDFS,HDFS的基本特征模仿GoogleGFS设计实现存储极大数目的信息(terabytesorpetabytes),将数据保存到大量的节点当中;支持很大的单个文件。提供数据的高可靠性和容错能力,单个或者多个节点不工作,对系统不会造成任何影响,数据仍然可用。通过一定数量的数据复制保证数据存储的可靠性和出错恢复能力。提供对数据的快速访问;并提供良好的可扩展性,通过简单加入更多服务器快速扩充系统容量,服务更多的客户端。与GFS类似,HDFS是MapReduce的底层数据存储支撑,并使得数据尽可能根据其本地局部性进行访问与计算。,Hadoop的分布式文件系统HDFS,HDFS的基本特征HDFS对顺序读进行了优化,支持大量数据的快速顺序读出,代价是对于随机的访问负载较高。数据支持一次写入,多次读取;不支持已写入数据的更新操作,但允许在文件尾部添加新的数据数据不进行本地缓存(文件很大,且顺序读没有局部性)基于块的文件存储,默认的块的大小是64MB减少元数据的量有利于顺序读写(在磁盘上数据顺序存放)多副本数据块形式存储,按照块的方式随机选择存储节点,默认副本数目是3,Hadoop的分布式文件系统HDFS,HDFS基本构架,对等于GFSMaster,对等于GFSChunkServer,应用程序HDFS客户端,文件名或数据块号,数据块号,数据块位置,HDFSNameNode,Hadoop的分布式文件系统HDFS,5.4Hadoop2.0体系架构,HDFS体系架构,商用拓扑:有两个NameNode节点,并使用ZooKeeper实现NameNode节点间的热切换。,5.4Hadoop2.0体系架构,HDFS体系架构,ZooKeeper集群,JourNalNode集群,HTTPFS,至少三个ZooKeeper实体,用来选举ActiveNamenode。,至少三个,用于与两NameNode交换数据,也可使用NFS。,提供Web端读写HDFS功能。,从架构上看HDFS存在单点故障,无论是一般拓扑还是商用拓扑,新增的实体几乎都是增强NameNode可靠性的组件,当然这里的ZooKeeper集群还可以用于Hbase。,HDFS的本质是块存储,NameNode(文件名,副本名,数据块ID,),/user/grid/data/part-0,r:3,1,2,/user/grid/data/part-1,r:3,3,4,5,1,4,2,机架1,1,5,2,3,1,4,2,机架2,1,5,2,3,4,5,2,DataNode,5.4Hadoop2.0体系架构,HDFS数据分布设计,每个HDFS文件的最后一个数据块大小并不固定,机架感知,HDFS的安全性设计安全模式刚启动的时候,等待每一个DataNode报告情况退出安全模式的时候才进行副本复制操作主节点元数据备份MultipleFsImageandEditLogCheckpointDataNode节点的检测心跳:NameNode不断检测DataNode是否有效若失效,则寻找新的节点替代,将失效节点数据重新分布数据一致性:校验和checksum,Hadoop的分布式文件系统HDFS,HDFS的安装和启动下载hadoop-0.20.1.tar.gz(或hadoop-1.0.x版本)tarzxvfhadoop-0.20.1.tar.gz,解压后Hadoop系统包括HDFS和所有配置文件都在指定的文件目录中在Linux下进行必要的系统配置设置与Hadoop相关的Java运行环境变量启动Java虚拟机启动Hadoop,则Hadoop和HDFS文件系统开始运行见林子雨老师在线视频,Hadoop的分布式文件系统HDFS,HDFS文件系统操作命令,建立用户自己的目录,用户目录在/user中,需要建立用-put命令在Linux文件系统与HDFS之间复制数据文件-put等同于-copyFromLocal,someoneanynode:hadoop$bin/hdfsdfs-lsURI,someoneanynode:hadoop$bin/hadoopdfs-ls/Found2itemsdrwxr-xr-x-hadoopsupergroup02008-09-2019:40/hadoopdrwxr-xr-x-hadoopsupergroup02008-09-2020:08/tmp,someoneanynode:hadoop$bin/hdfsdfs-mkdir/user,someoneanynode:hadoop$bin/hdfsdfs-mkdir/user/someone,someoneanynode:hadoop$bin/hdfsdfsput/home/someone/interestingFile.txt/user/yourUserName/,Put上传整个目录someoneanynode:hadoop$bin/hdfsdfsputsource-directorydestination,Hadoop的分布式文件系统HDFS,HDFS文件系统操作命令,Hadoop的分布式文件系统HDFS,HDFS文件系统操作命令,Hadoop的分布式文件系统HDFS,HDFS文件系统操作命令,Hadoop的分布式文件系统HDFS,HDFS文件系统操作命令,Hadoop的分布式文件系统HDFS,HDFS文件系统操作命令,Hadoop的分布式文件系统HDFS,HDFS文件系统操作命令,Hadoop的分布式文件系统HDFS,HDFSAdmin命令,获得HDFS总体的状态bin/hadoopdfsadminreportbin/hadoopdfsadmin-metasavefilenamewhatthestateoftheNameNodesmetadataisSafemodeSafemodeisanHDFSstateinwhichthefilesystemismountedread-only;noreplicationisperformed,norcanfilesbecreatedordeleted.bin/hadoopdfsadminsafemodeenter/leave/get/wait,Hadoop的分布式文件系统HDFS,HDFSAdmin命令,更改HDFS成员升级HDFS版本bin/start-dfs.shupgrade(第一次运行新版本的时候使用)bin/hadoopdfsadminupgradeProgressstatusbin/hadoopdfsadminupgradeProgressdetailsbin/hadoopdfsadminupgradeProgressforce(onyourownrisk!)bin/start-dfs.shrollback(在旧版本重新安装后使用)(onyourownrisk!)帮助bin/admindfsadmin-help,Hadoop的分布式文件系统HDFS,负载均衡,加入一个新节点的步骤配置新节点上的hadoop程序在Master的slaves文件中加入新的slave节点启动slave节点上的DataNode,会自动去联系NameNode,加入到集群中Balancer类用来做负载均衡,默认的均衡参数是10%范围内bin/start-balancer.shthreshold5bin/stop-balancer.sh随时可以停止负载均衡的工作,Hadoop的分布式文件系统HDFS,在MapReduce程序中使用HDFS,通过的配置选项,HadoopMapReduce程序可以自动从NameNode中获得文件的情况HDFS接口包括:命令行接口HadoopMapReduceJob隐含的输入Java程序直接操作libhdfs从c/c+程序中操作,Hadoop的分布式文件系统HDFS,HDFS权限控制与安全特性,类似于POSIX的安全特性不完全,主要预防操作失误不是一个强的安全模型,不能保证操作的完全安全性bin/hadoopdfschmod,-chown,-chgrp用户:当前登录的用户名,即使用Linux自身设定的用户与组的概念超级用户:TheusernamewhichwasusedtostarttheHadoopprocess(i.e.,theusernamewhoactuallyranbin/start-all.shorbin/start-dfs.sh)isacknowledgedtobethesuperuserforHDFS.IfthisuserinteractswithHDFS,hedoessowithaspecialusernamesuperuser.IfHadoopisshutdownandrestartedunderadifferentusername,thatusernameisthenboundtothesuperuseraccount.超级用户组配置参数:dfs.permissions.supergroup,Hadoop的分布式文件系统HDFS,HadoopHDFS的编程,FileSystem基类FileSystem是一个用来与文件系统交互的抽象类,可以通过实现FileSystem的子类来处理具体的文件系统,比如HDFS或者其它文件系统通过factory方法FileSystem.get(Configurationconf)获得所需的文件系统实例Configurationconf=newConfiguration();FileSystemhdfs=FileSystem.get(conf);Hadoop中,使用Path类的对象来编码目录或者文件的路径,使用FileStatus类来存放目录和文件的信息。,HDFS基本文件操作创建文件create方法有很多种定义形式,但一般仅需使用简单的几种publicFSDataOutputStreamcreate(Pathf);publicFSDataOutputStreamcreate(Pathf,booleanoverwrite);publicFSDataOutputStreamcreate(Pathf,booleanoverwrite,intbufferSize);,HDFS基本文件操作打开文件FileSystem.open方法有2个,参数最多的一个定义如下:publicabstractFSDataInputStreamopen(Pathf,intbufferSize)throwsIOExceptionf:文件名buffersize:文件缓存大小。默认值:Configuration中io.file.buffer.size的值,如果Configuration中未显式设置该值则是4096。,HDFS基本文件操作获取文件信息FileSystem.getFileStatus方法格式如下:publicabstractFileStatusgetFileStatus(Pathf)throwsIOException;返回一个FileStatus对象。FileStatus保存文件的很多信息,包括:path:文件路径length:文件长度isDir:是否为目录block_replication:数据块副本因子blockSize:文件长度(数据块数)modification_time:最近一次修改时间access_time:最近一次访问时间owner:文件所属用户group:文件所属组如果想了解文件的这些信息,可以在获得文件的FileStatus实例之后,调用相应的getXXX方法(比如,FileStatus.getModificationTime()获得最近修改时间),HDFS基本文件操作获取目录信息获取目录信息,不仅是目录本身,还有目录之下的文件和子目录信息:publicFileStatuslistStatus(Pathf)throwsIOException;如果f是目录,那么将目录之下的每个目录或文件信息保存在FileStatus数组中返回。如果f是文件,和getFileStatus功能一致。另外,listStatus还有参数为Path的版本的接口定义以及参数带路径过滤器PathFilter的接口定义,参数为Path的listStatus就是对这个数组中的每个path都调用上面的参数为Path的listStatus。参数中的PathFilter则是一个接口,实现接口的accept方法可以自定义文件过滤规则。,HDFS基本文件操作文件读取调用open打开文件之后,使用了一个FSDataInputStream对象来负责数据的读取。通过FSDataInputStream进行文件读取时,提供的API就是FSDataInputStream.read方法:publicintread(longposition,bytebuffer,intoffset,intlength)throwsIOException从文件的指定位置position开始,读取最多length字节的数据,保存到buffer中从offset个元素开始的空间中;返回值为实际读取的字节数。此函数不改变文件当前offset值。但使用更多的还有一种简化版本:publicfinalintread(byteb)throwsIOException从文件当前位置读取最多长度为b.len的数据保存到b中,返回值为实际读取的字节数。,HDFS基本文件操作文件写入从接口定义可以看出,调用create创建文件以后,使用了一个FSDataOutputStream对象来负责数据的写入。通过FSDataOutputStream进行文件写入时,最常用的API就是write方法:publicvoidwrite(byteb,intoff,intlen)throwsIOException函数的意义是:将b中从off开始的最多len个字节的数据写入文件当前位置。返回值为实际写入的字节数。,HDFS基本文件操作关闭关闭为打开的逆过程,FileSystem.close定义如下:publicvoidclose()throwsIOException不需要其它操作而关闭文件。释放所有持有的锁。删除publicabstractbooleandelete(Pathf,booleanrecursive)throwsIOExceptionf:待删除文件名recursive:如果recursive为true,并且f是目录,那么会递归删除f下所有文件。f是文件的话,recursive为true还是false无影响。另外,类似Java中File的接口DeleteOnExit,如果某些文件需要删除,但是当前不能被删;或者说当时删除代价太大,想留到退出时再删除的话,FileSystem中也提供了一个deleteOnExit接口:publicbooleandeleteOnExit(Pathf)throwsIOException标记文件f,当文件系统关闭时才真正删除此文件,但是这个文件f必须存在。,HDFS编程实例获取一个指定HDFS目录下所有文件的信息,对每一个文件,打开文件、循环读取数据、写入目标位置,然后关闭文件,最后关闭输出文件。importjava.util.Scanner;importjava.io.IOException;importjava.io.File;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FSDataInputStream;importorg.apache.hadoop.fs.FSDataOutputStream;importorg.apache.hadoop.fs.FileStatus;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.Path;publicclassresultFilterpublicstaticvoidmain(Stringargs)throwsIOExceptionConfigurationconf=newConfiguration();/以下两句中,hdfs和local分别对应HDFS实例和本地文件系统实例FileSystemhdfs=FileSystem.get(conf);FileSystemlocal=FileSystem.getLocal(conf);PathinputDir,localFile;FileStatusinputFiles;FSDataOutputStreamout=null;FSDataInputStreamin=null;Scannerscan;Stringstr;bytebuf;intsingleFileLines;intnumLines,numFiles,i;inputDir=newPath(args0);singleFileLines=Integer.parseInt(args3);,HDFS编程实例tryinputFiles=hdfs.listStatus(inputDir);/获得目录信息numLines=0;numFiles=1;/输出文件从1开始编号localFile=newPath(args1);if(local.exists(localFile)local.delete(localFile,true);/若目标路径存在,则删除之for(i=0;iinputFiles.length;i+)if(inputFilesi.isDir()=true)/忽略子目录continue;System.out.println(inputFilesi.getPath().getName();in=hdfs.open(inputFilesi.getPath();scan=newScanner(in);while(scan.hasNext()str=scan.nextLine();if(str.indexOf(args2)=-1)continue;/如果该行没有match字符串,则忽略numLines+;if(numLines=1)/如果是1,说明需要新建文件了localFile=newPath(args1+File.separator+numFiles);out=local.create(localFile);/创建文件numFiles+;buf=(str+n).getBytes();out.write(buf,0,buf.length);/将字符串写入输出流if(numLines=singleFileLines)/如果已满足相应行数,关闭文件out.close();numLines=0;/行数变为0,重新统计/endofwhilescan.close();in.close();/endofforif(out!=null)out.close();/endoftrycatch(IOExceptione)e.printStackTrace();/endofmain/endofresultFilter,补充内容Amazon分布式文件系统基于一致性哈希的对等式分布式文件系统,10.2DHT算法,P2P计算模式是一种非
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 效应分析题目及答案解析
- 掰手腕作文500字初中初一作文(13篇)
- 最美的青春初三作文最美的青春作文10篇范文
- 时间小主人课件
- 物理性质和社会变迁探究之浮力的教案
- 三农项目融资策划与实施方案手册
- 蓝色痛风预防和护理
- 统编版(部编版)小学三年级语文上学期第五单元分类训练题:句子练习(附答案)
- 纪念英雄的课件
- 快乐的一天300字10篇
- 2025年通信专业技术-通信专业技术(中级)-中级通信专业技术(交换技术实务)历年参考题库含答案解析(5套)
- 《丙型肝炎防治指南》
- 2025年湖北省工程专业中级职务水平能力测试(电子信息)经典试题及答案
- 2025至2030年中国酒店布草行业市场全景评估及投资前景展望报告
- 中小学校长在2025秋季开学第一次全体教师大会上讲话:人心决定温度人格决定高度人品决定厚度
- (2025年标准)供暖采暖协议书
- 2025年应急管理普法知识竞赛历年参考题库含答案详解(5套)
- 2025至2030中国非标自动化行业发展趋势分析与未来投资战略咨询研究报告
- 个人挂靠劳务公司协议书
- 2025年小学生爱粮节粮科普知识竞赛试题(含答案)
- 2025驾驶员安全教育培训考试试卷(及答案)
评论
0/150
提交评论