HDFS读写原理

《HDFS读写原理》由会员分享,可在线阅读,更多相关《HDFS读写原理(25页珍藏版)》请在文档大全上搜索。
1、北京北大方正电子有限公司Beijing Founder Electronics Co., L方正集团IT产业集信息产业之大成,提供IT服务、软件、硬件和数据运营在内的综合解决方案。Founder Groups IT sector is a leader in the information industry, providing comprehensive resolutions, including IT services, software, hardware, and data operation.Hadoop分布式文件系统(HDFS)读写原理剖析NameNodeNameNode管理两个
2、重要的表:pFilename block sequence(namespace)pBlock machine List(“inodes”)三种协议接口:pClientProtocol ClientspDatanodeProtocol DataNodespNamenodeProtocol SecondNameNode & rebalancing processes启动方式:p以-format方式启动-在最初时,对系统进行格式化p以集群方式启动-更新和创建当前文件系统的快照p以备份的方式启动-将集群的状态回滚到前一个状态启动两个进程:pRPCServerpHTTPServerDateNode储存一
3、系列named blocks允许客户端读blocks, 或者写new blockdelete blocks 或 copy blocks 听令于NameNode管理一个重要的表pblock- stream of bytespDataNode会定期向NameNode报告block的信息开启一个server socket,以便客户端读写,DataNode会把socket的ip/port报告给NameNode,NameNode会把ip/port发给请求读写的客户端构造一个NameNode的RPC代理报告心跳启动一个无线循环,向NameNode询问有什么事情可做心跳为了整个系统的稳定,数据服务器必须时刻
4、向主控服务器汇报,保持主控服务器对其的完全了解,这个机制,就是心跳消息。在HDFS中,主控服务器NameNode实现了DatanodeProtocol接口,数据服务器DataNode会在主循环中,不停的调用该协议中的sendHeartbeat方法,向NameNode汇报状况。在此调用中,DataNode会将其整体运行状况告知NameNode,比如:有多少可用空间、用了多大的空间,等等之类。NameNode会记住此DataNode的运行状况,作为新的数据块分配或是负载均衡的依据。当NameNode处理完成此消息后,会将相关的指令封装成一个DatanodeCommand对象,交还给DataNode
5、,告诉数据服务器什么数据块要删除什么数据块要新增等等之类,数据服务器以此为自己的行动依据。Block报告DatanodeProtocol定义的另一个方法,blockReport。DataNode也是在主循环中定时调用此方法,只是,其周期通常比调用sendHeartbeat的更长。它会提交本地的所有数据块状况给NameNode,NameNode会和本地保存的数据块信息比较,决定什么该删除什么该新增,并将相关结果缓存在本地对应的数据结构中,等待此服务器再发送sendHeartbeat消息过来的时候,依照这些数据结构中的内容,做出相应的DatanodeCommand指令。HDFS文件系统结构INod
6、e是对文件系统目录结构中一个节点的抽象,也叫元数据pINodeFile和INodeDirectory均继承自INode类,分别表示文件节点和目录节点pINodeFile类中最重要的数据结构是BlockInfo blocks,它记录了一个文件所包含的所有Block,成员方法的操作大都与Block相关pINodeDirectory的关键数据结构是Listchildren记录了目录下所有的子节点信息INodefileUnderConstruction表示正在建的文件INodeDirectoryWithQuota表示有配额限制的目录,根目录就是这种类型FSdirectory:存储整个文件系统的目录状态
7、,对整个目录结构的管理p通过调用fsimage和editLog的方法从namenode本地磁盘读取元数据信息和向本地磁盘写入元数据信息,并登记对目录结构所作的修改到日志文件。另外,FSDirectory保存了文件名和数据块的映射关系。HDFS文件系统结构fsimage :把文件和目录的元数据信息持久化地存储到fsimage文件中p每次启动时从中将元数据加载到内存中构建目录结构树,之后的操作记录在edits log中p定期将edits与fsimage合并刷到fsimage中loadFSImage(File curFile)用于从fsimage中读入Namenode持久化的信息。fsimage是一
8、个二进制文件,当中记录了HDFS中所有文件和目录的元数据信息,格式如下:fsimage和edits日志统称为此系统的镜像,当namenode宕机后,secondaryNamenode就是通过这个镜像恢复系统的。fsimage和edits加载过程namenodesecondaryNameNodecheckpoint步骤第一步:secondary namenode请求namenode停止使用edits,暂时记录在edits.new文件中第二步:secondary namenode从namenode复制fsimage、edits到本地第三步:secondary namenode合并fsimage、e
9、dits为fsimage.ckpt第四步:secondary namenode发送fsimage.ckpt到namenode第五步:namenode用新的fsimage覆盖旧的fsimage,用新的edits覆盖旧的edits第六步:更新checkpoint时间到这里fsimage更新完毕,即保证了primary正常服务,也完成了fsimage的更新GenerationStamp(1) GenerationStamp存在的两个原因p检测过期副本p当Dead Datanode在过了很长一段时间后又重新加入集群时,可以通过GenerationStamp检测pre-historic副本(2) 在以下