版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、成思特奇姬 ZshtechHDFS原理及适用场景(V1.0)4b京神州数码思特奇信息技术股份有限公司二0二二年四月文档信息文档名称HDFS原理及适用场景电子文档HDFS原理及适用场景文件状态草 稿 口正式发布口正在修改编写人zhouming日期2011年10月27日校对人日期年 月日审核人日期年 月日批准人日期年 月日匕思特奇 略 ZSI-TECH变更记录变更序号变更原因变更页码变更前版本号变更后版本号更改人批准生效日期备注1文档建立1.01.0zhouming2011-10-2723456I密4思特奇 M ZSI-TECHHDFS是Hadoop技术框架中的分布式文件系统。行使部署在多台独立物
2、理机器上的文件进行管理功能。本文重点介绍HDFS适用的场景,MapReduce的读写大致过程,核心FSNameSystem层次结构以及根据个示例来介绍HDFS在web开发中的应用。2 HDFS特点及适用场景2.1HDFS 特点适合运行在通用硬件,错误检测和快速、自动的恢复能力好支持大文件存储,能提供比较高的数据传输带宽与数据访问吞吐量计算环境移动到数据存储的地方,而不是把数据传输到计算环境运行的地方,有效减少网络的拥 塞、提高系统的吞吐量。2.2HDFS适用场景网站用户行为分析生态系统数据分析气象数据分析2.3HDFS不适用场景1低时间延迟数据访问的应用。例如几十毫秒范围,原因:hdfs是为高
3、数据吞吐量应用优化的,这样就造成可能会以高时间延迟为代价大量小文件原因:namenode将文件系统的元数据存储在内存中,因此文件系统所能存储的文件总数受限于 namecode内存容量。根据经验,每个文件,目录和数据块的存储信息大约占150字节,如果一百万 个文件,且每个文件占一个数据块,那至少需要300MB的内存,但是如果存储十亿个文件,那么需 要的内存将是非常大的多用户写入,任意修改文件:现在hdfs文件可能只有一个writer,而且写操作总是写在文件的末 尾.岁匕思特奇 嬴闷 XSI-TECHMonRarhica眉神乃岳*田+彳昌DlfliW CftriB 尸MapReduce原埋z及适用
4、_场景3HDFS框架结构和读写简析HDFS米用master/slave架构。一个HDFS集群是由一个Namenode和一定数目的Datanodes组成。Namenode 是一个中心服务器,负责管理文件系统的名字空间(namespace)以及客户端对文件的访问。集群中的Datanode 一般是一个节点一个,负责管理它所在节点上的存储HDFS暴露了文件系统的名字空间,用户能够以文件 的形式在上面存储数据。从内部看,一个文件其实被分成一个或多个数据块,这些块存储在一组Datanode 上。Namenode执行文件系统的名字空间操作,比如打开、关闭、重命名文件或目录。它也负责确定数据块 到具体Data
5、node节点的映射。Datanode负责处理文件系统客户端的读写请求。在Namenode的统一调度下 进行数据块的创建、删除和复制。Namenode 和 DatanodeNamenode作用:管理文件系统的命名空间,(比如打开,关闭,重命名)维护文件系统树和整棵树内所有的 文件和目录,确定文件块和DataNode的映射。Datanode作用:记录每个文件中各个块所在的数据节点信息。通知执行块的创建,删除和复制操作。HDFS文件读取简析流程图如下:前提:MapReduce原理及适用场景I密4思特奇 M ZSI-TECH一个 A.txt文件,A.txt文件的内容分别被拆分成B.txt,C.txt两
6、块内容,B.txt文件被备份在 datanode1,datanode2,datanode3 中,C.txt 被备份在 datanode4,datanode5,datanode6 中。场景:用户要读取A.txt文件内容。执行过程:用户在客户端发起请求,HDFS接受请求后使用DistributedFileStytem调用namenode,从而确定用户请求文件块 的对应位置,namenode返回存有请求文本块副本的datanode地址,这些地址是根据datanode与客户端的距离排 序过的。封装datanode地址的结果放在FSDataInputStream中返回给客户端,(注,FSDataInpu
7、tStream对象封装 DFSInputStream对象,此对象负责管理datanode和namenode的I/O).然后客户端对流文件持续进行read()操作, DFSDataInputStream会连接距离客户端最近的datanode,比如此时datanodel离客户端最近,那么读取datanodel 的数据并返回到客户端,当读取到块的末端时,FSDataInputStream关闭datanodel的连接,并读取存放副本2.txt 的离客户端最近的datanode中的数据,当客户端完成读取,调用FSDataInputStream的close()方法。从而用户完 成了读取A.txt的操作。出
8、现异常情况:1 DFSDataInputStream 在和 datanode 通信遇到错误2当datanode的数据不完整或者是一个损坏的块出现异常的时候HDFS所做的处理:1在通信遇到错误时,尝试从这个块的另一个最临近的datanode读取数据,同时记住故障的datanode,以保证 以后不会反复读取该节点上的后续的块。2在发现数据不完整或者是损坏的时候,HDFS会试图从其他datanode读取副本其他副本并在读取之前通知 nomenode.这种方式下的优点:namenode告知客户端每个块中最佳datanode,并让客户端直接联系该datanode检索数据,效率高。namenode仅需要响
9、应块位置的请求,而且这些信息存储在内存中,执行速度快。313 HDFS文件写入简析客户端通过 DistributedFileSystem 对象调用 create()函数船检文件,DistributedFileSystem 内部会对 namemode 创建一个RPC调用,在文件系统的命名空间总创建一个文件,此时此文件没有任何数据,然后namenode会执行 不同检查确保此文件不存在并且该客户有创建的权限,如果鉴权通过,则向此文件中记录一条记录,并向客户端 返回 FSDataOutputStream 对象,然后 FSDataOutputStream 对象封装一个 DFSDataOutputStre
10、am 对象。(处理 datanode 和nameNode的IO流)客户端借由此对象写入数据,鉴权未通过下,抛出异常到客户端。客户端写入数据后,会对数据流调用close()方法,然后DFSDataOutputStream对象会将客户端写入的数据分 成一个个数据包,并写到内部队列,即数据队列,DataStreamer处理数据队列,它会根据datanode列表来要求 namenode分配合适的新块来存储数据备份。而这一组被namonode选择出来的datanode叫做管线。DataStreamer 将数据包流式按照管线上的datanode顺序传输到每一个待分配的datanode上,datanode会
11、依次执行写入操作。而 DFSDataOutputStream也会维护一个内部数据包队列等待管线上的datanode写入确认,当所有的待分配的datanode 被写入成功后,会将写入的确认信息返回到DFSOutputStream中,然后DFSOutputStream才会将数据包删除。当 DFSDataOutputStream得到datanode确认回执后,联系namenode发送文件写入完成信号。整个写入操作完成。出现异常情况:写入中,datanode出现故障。出现异常的时候HDFS所做的处理:HDFS会关闭管线,把队列中的任何数据包都添加回数据队列的最前端,确保故障节点下游的datanode不
12、会漏掉任何一个数据包。然后管线中删除故障数据节点,同时为正常的并将数据 写入其余正常的datanode,如果namenode发现复本不足,会在另一个节点创建新的复本,随后后续的数据块继续 接受正常处理。(默认副本是3)3.1.4读写操作核心处理类FSNameSystem简介NameNode节点是就是HDFS的大脑。想了解HDFS文件系统,必须了解大脑结构,而NameNode类中,关 于HDFS文件系统的存储和管理都交给了 FSNamesystem负责,因此下面主要介绍FSNamesystem的逻辑组成 和类图。了解FSNamesystem,那么HDFS的文件系统就了解了 90%。FSNames
13、ystem层次结构下一些概念:INode:它用来存放文件及目录的基本信息:名称,父节点、修改时间,访问时间以及UGI信息等。INodeFile:继承自INode,除INode信息外,还有组成这个文件的Blocks列表,重复因子,Block大小INodeDirectory:继承自INode,此外还有一个INode列表来组成文件或目录树结构Block(BlockInfo):组成文件的物理存储,有BlockId, size,以及时间戳BlocksMap:保存数据块到I Node和DataNode的映射关系FSDirectory:保存文件树结构,HDFS整个文件系统是通过FSDirectory来管理F
14、SImage :保存的是文件系统的目录树FSEditlog:文件树上的操作日志FSNamesystem: HDFS文件系统管理这些概念之间的层次关系:神州皱视我们都知道,在NameNode内存中存在两张很重要的映射表:文件系统的命名空间(文件目录树)主要是文件和Block映射关系(保存在FSDirectory)Block 和 INodeFile & DataNode 的映射关系(保存在 FSNamesystem)在上图中,左边黑线部分是1数据结构的层次关系;红线部分是2关系的层次结构(其中block & DataNode这个共用)下面详细的介绍上图所表示的关系:文件系统FSNamesystem
15、MapReduce原理及适用场景I密4思特奇 M ZSI-TECHFSNamesystem 主要有两个对象:文件系统(FSDirectory)根节点rootDir 和 BlocksMap 映射表(Block - INode, datanodes, self ref )文件系统目录FSDirectory保存文件目录结构(INodeDirectory树),实现FSImage和FSEditLog操作实现。INode ( INodeFile & INodeDirectory )在HDFS中,无论目录还是文件,都是INodeo INode有两个派生类INodeFile和INodeDirectoryoIN
16、odeFile 是 INode 文件类,INodeDirectory 是 INode 目录类。每一 INodeDirectory 孩子节点都是由 INodeDirectory目录或INodeFile文件列表构成。这样就形成了一棵INode树形结构。NameNode内存中保存着HDFS整个文件系统形成的树,这棵树保存在FSDirectory对象内。Block & BlocksMap & BlockInfoHDFS物理存储单元是Block(缺省的Block大小为64M),每个Block会有几个副本(缺省是3个),这些Block 都是存储在不同数据节点上的。映射关系保存在BlocksMap oBlo
17、ck & INodeFile每个INodeFile都有一个Block列表组成。每一个block有多个副本(缺省3个副本),各副本保存在不同的数据 节点上。这样在文件与Block和DataNode之间形成一个映射关系表。这张关系表就保存在FSDirectory对象.FSImage & FSEditlog(FSDirectory)由于目录树(FSDirectory)在 NameNode内存中保存,机器也有掉电的时候。若只保存在内存那势必会造成数据 的丢失。因此,系统会周期性的保存文件目录树到NameNode本地文件系统,生成FSImage。主要由FSImage 和FSEditLog,这两个类负责目
18、录树持久化。当HDFS系统非常庞大时,FSImage也会非常大,这样不能文件系统发生任何操作时,就更新到FSImage, 所以一段时间内文件系统的操作日志会记录到FSEditLog。到一定时间会把操作日志FSEditLog同步到FSImage,这样就形成完整的文件目录树。FSNameSystem主要类关系图这个类图可以分成三个部分Bock 相关的部分(BlocksMap & BlockInof & Block)INode 相关的部分(INode & INodeDirectory & INodeFile & INodeDirectoryWithQuota)FSImage & FSEditLog
19、(Storage & StorageInfo)其中BlockInfo是Block的加强类,增加了 INodeFile的引用和DataNode列表INodeFirectoryWithQuota 是 INodeDirectory 的增强类,增加了 Quota 限制功能。HDFS在WEB开发中的应用1使用背景:互联网的应用每时每刻都在产生数据,这些数据长期的积累了长期,使得这些数据文件总量非常庞大,存储 这些数据需要投入巨大的硬件资源,但是如果能在已有空闲磁盘集群下可以利用起来,可以不再需要大规模 采集服务器存储数据或购买容量庞大的磁盘,减少了硬件成本。在这里就可以使用到分布式存储这种方案来 解决这
20、个问题。HDFS就是一个开源在apache上的分布式文件系统框架,它提供了命令行模式和api模式来操作,HDFS文件 系统部署在多台节点上后,我们可以上传任意的文件到HDFS中,无需关心文件究竟存储在哪个节点上。只要 通过api访问文件即可(流操作)。下面我们用一个实际的产品来解决,在HDFS中默认的块大小为64M,也就是说一个文件在大小不超过64M的 情况下不会被切割,整个文件会被完整的上传到某个节点中,通常我们在互联网门户中图片存储是个非常常 见的应用,大量用户的图片自然占用了大量的存储空间,使用分布式文件系统正好满足相册的技术机构。每 个图片一般经过压缩后最大胴,每个图片在使用HDFS的
21、也就是一个对应一个Block。下面我们考虑如下一个 问题:web应用关心的是个对外的接口,这个接口只需要指定HDFS的管理地址,但web应用中每个请求访问一个图 片,是否需要web程序通过HDFS将数据从不同节点上拉过来然后再传向客户端,这样是不是影响效率?如果 存放数据的节点直接向浏览器发送数据是不是更好?带着上面的问题我们就从架构开始设计一套系统。我们可以在每台数据节点上都部署上apache服务器,并发布同样的web程序。当一个请求发现在某个节点上 时,我们只需要直接将url重定向到节点所在的机器域名并请求同样的uri,就可以使得当前这个节点的 apache服务器同浏览器建立连接,并直接发
22、送数据。目前比较流行的web架构是J2EE,在这里我们就采用J2EE的架构来搭建一个原型。2整体架构我们拥有100台机器,每台机器都部署了DataNode节点和Apache Web服务器,对外提供一个固定的域名服 务器,客户通过浏览器直接访问的是该服务器,在该server中发布程序接受来自浏览器的请求,通过调用HDFS的 接口,来判断请求的文件所存放的节点是否为当前节点,如果不是则根据得到的节点地址去重定向请求到存储该 文件的节点的Apache服务器上。由于HDFS中默认切割块为64M,通常图片文件大小不过几M,文件的存放就在一个Block中,如果Block数 组大于1,因为浏览器不支持分段获
23、取数据,那么我们需要直接从远程将数据拉到对外服务器中合并成完整的流, 然后推送到浏览器中。String f iledisplay = (String) request.getParameter(f ilePath);Path path = new Path(f iledisplay);Configuration conf = new Configuration();FileSystem fs = path.getFileSystem(conf);long length = f ile.getLen();BlockLocation blkLocations = fs.getFileBlockLo
24、cations(f ile, 0, length);如上面代码所示这里拿到到的BlockLocation包含了该块的信息:private String hosts; /hostnames of datanodesprivate String names; /hostname:portNumber of datanodesprivate String topologyPaths; / full path name in network topologyprivate long offset; /offset of the of the block in the f ileprivate long length;通过此可以拿到DataNode节点信息,让后将请求重定向到DataNode所在的机器的Apache服务器中就行。3结构
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 课题申报参考:教师教育神经科学素养的模型构建与提升路径
- 2025年度个人协议合同范文汇编及法律适用指南4篇
- 医院2025年度消防安全管理合同2篇
- 二零二五年度卖房资金垫付及管理协议4篇
- 腾讯2025年度企业邮箱迁移服务合同2篇
- 二零二五版高端奶粉品牌加盟管理合同范本页2
- 二零二五年度城市公共自行车系统维护与升级合同4篇
- 2025年度劳动合同试用期加班费及休息休假规定3篇
- 个人商品运输合同范本锦集
- 二零二五年度临时工工资支付合同模板
- 加强教师队伍建设教师领域学习二十届三中全会精神专题课
- 2024-2025学年人教版数学七年级上册期末复习卷(含答案)
- 2024年决战行测5000题言语理解与表达(培优b卷)
- 四年级数学上册人教版24秋《小学学霸单元期末标准卷》考前专项冲刺训练
- 2025年慢性阻塞性肺疾病全球创议GOLD指南修订解读课件
- (完整版)减数分裂课件
- 银行办公大楼物业服务投标方案投标文件(技术方案)
- 第01讲 直线的方程(九大题型)(练习)
- 微粒贷逾期还款协议书范本
- 人教版七年级上册数学全册课时练习带答案
- NBT 47013.4-2015 承压设备无损检测 第4部分:磁粉检测
评论
0/150
提交评论