版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
HDFS运行原理目录一、HDFS存储机制二、Block三、元数据四、HDFS读流程五、HDFS写流程一、HDFS存储机制假如目前由一个10G的文件要存储到HDFS中。首先,会在客户端处进行切分,切分成一个个Block块,默认情况下Block块的大小是128M。这些切分后的Block块,会以多副本的形式均匀放置到DataNode中。数据存放在DataNode中后,主节点NameNode会记录这份文件具体切分了多少Block块和每个Block块具体存放的位置,也即元数据信息。数据文件存储二、Block
Block是HDFS的最小存储单元,默认大小为128M,可以自定义修改,但是要注意修改的一些影响,块太大和太小都可能会影响性能。Block存储到DataNode上,会以多副本的形式进行存储,默认副本数为3,通过机架感知和副本均匀分布的策略保证数据的高可用性。数据存储之后,对应的元数据会保存在NameNode中。Block二、Blocklock文件是DataNode本地磁盘中名为“blk_blockId”的Linux文件。Block文件BP-randominteger-NameNode-IPaddress-creationtime:BP代表BlockPool,就是Namenode的VERSION中的集群唯一blockpoolIDfinalized/rbw:其中finalized目录用于实际存储Block文件,finalized用于存放Block文件以及Block元数据文件;rbw是“replicabeingwritten”的意思,该目录用于存储用户当前正在写入的数据二、Blocklock文件是DataNode本地磁盘中名为“blk_blockId”的Linux文件。Block文件VERSION:VERSION文件是java属性文件,保存了HDFS的基本信息blk_前缀文件:HDFS中的文件块本身,存储的是原始文件内容in_use.lock:防止一台机器同时启动多个Datanode进程导致目录数据不一致二、BlockBlock副本放置策略Block切分之后,会有三个副本,三个副本之间完全都是一样的没有任何区别,注意他们之间并没有“主备”这样的区分。他们会存放到不同的DataNode节点上。如图所示,左右两个为两个机架,在机架上分别放置多台服务器作为DataNode。Block在放置的时候,如果默认为三个副本,首先,第一个随机选择一台负载比较低、资源比较空闲的DataNode;然后,第二个会在不同的机架上随机找一台服务器;最后,第三个会在和第二个副本服务器相同的机架上,找另外一台服务器存放。三、元数据元数据信息存储与NameNode内存当中,由于内存掉电数据易丢失的特性,所以需要对其进行持久化。元数据持久化,包含有两种文件:第一个是fsimage文件,大家可以把它理解为是一个内存的快照,他会将内存当中除去block位置存放信息之外的所有元数据信息持久化写到一个磁盘当中的文件内;第二个是edits文件,这种文件可以理解为是日志记录文件。为什么有了fsimage内存快照、还需要有edits文件呢?因为如果每次对于文件系统有操作,元数据信息就有可能发生变化,那么每次变化都去更新一下fsimage文件,显然成本非常之高而且性能也不好,所以fsimage并不会实时去发生变化,那么后边这些操作则通过edits文件做一个记录。元数据四、HDFS读流程HDFS的读流程分为:1、客户端通过FileSystem对象的open()方法来打开希望读取的文件。2、DistributedFileSystem通过远程调用(RPC)来调用namenode,获取到每个文件的起止位
置。对于每一个块,namenode返回该块副本的datanode。这些datanode会根据它们与客户
端的距离排序,如果客户端本身就是其中的一个datanode,那么就会在该datanode上读取
数据。DistributedFileSystem远程调用后返回一个FSDataInputStream对象给客户端以便于
读取数据,然后FSDataInputStream封装一个DFSInputStream对象。该对象管理datanode
和namenode的IO。HDFS读流程四、HDFS读流程HDFS的读流程分为:3、客户端对这个输入流调用read()方法,存储着文件起始几个块的datanode地址的DFSInputStream随即连接距离最近的文件中第一个块所在的datanode,通过数据流反复调用read()方法,可以将数据从datanode传送到客户端。当读完这个块时,DFSInputStream关闭与该datanode的连接,然后寻址下一个位置最佳的datanode。HDFS读流程五、HDFS写流程HDFS的读流程分为:1、首先客户端通过DistributedFileSystem上的create()方法指明一个预创建的文件的文件名2、DistributedFileSystem再通过RPC调用向NameNode申请创建一个新文件。namenode检查
是否有同名文件存在以及用户是否有相应的创建权限,如果检查通过,namenode会为该文
件创建一个新的记录,否则的话文件创建失败,客户端得到一个IOException异常。DistributedFileSystem返回一个FSDataOutputStream以供客户端写入数据,与FSDataInputStream类似,FSDataOutputStream封装了一个DFSOutputStream用于处理namenode与datanode之间的通信。HDFS写流程五、HDFS写流程HDFS的读流程分为:3、当客户端开始写数据时,DFSOutputStream把写入的数据分成包,放入一个中间队列——数
据队列中去。DataStreamer从数据队列中取数据,同时向namenode申请一个新的block来
存放它已经取得的数据。namenode选择一系列合适的datanode构成一个管道线,这里我
们假设replica为3,所以管道线中就有三个datanode。4、DataSteamer把数据流式的写入到管道线中的第一个datanode中,第一个datanode再把接
收到的数据转到第二个datanode中,以此类推。HDFS写流程五、HDFS写流程HDFS的读流程分为:5、DFSOutputStream同时也维护着另一个中间队列——确认队列,确认队列中的包只有在得
到管道线中所有的datanode的确认以后才会被移出确认队列6、当客户端完成写数据后,它会调用close()方法。这个操作会冲洗所有剩下的package到pipeline中。HDFS写流程五、HDFS写流程HDFS的读流程分为:7、等待这些package确认成功,然后通知namenode写入文件成功。这时候namen
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论