hdfs源码
韩运畅
这个作者很懒,什么都没留下…
展开
-
HDFS-DatanodeDescriptor类
DatanodeDescriptor是Namenode中对Datanode的抽象。DatanodeDescriptor -> DatanodeInfo -> DatanodeID我们看一下各个类的实现1.DatanodeIDDatanodeID用于唯一标识一个Datanode,Datanode是通过<ip,port>以及storageId进行标识的,其属性如下2.DatanodeInfo3. DatanodeDescriptorDatanodeDescriptor原创 2020-06-10 20:53:15 · 123 阅读 · 0 评论 -
HDFS-FSDirectory类
我们需要先了解与FSDirectory类相关的比较重要的类:INodesInPathINodesInPath有两个重要的数据结构,分别是:INode[] inodes byte[][] path我们可以从FSDirectory.resolvePath(FSPermissionChecker pc, String src, boolean resolveLink)观察INodesInPath中这两个数据结构分别代表什么。该方法原创 2020-06-10 20:17:09 · 337 阅读 · 0 评论 -
HDFS-FSImage类
FSImage类主要由三部分功能,将内存映像持久化到磁盘,将映像文件加载到内存,生成内存命名空间,加载editLog文件到内存命名空间。先看一下映像文件的Format:真正用于存储数据节点信息的是FileSummary,INode和INodeDirectory等都对应一个section.有对应的FileSummary类,其内部有一个List<Section>。相关结构的说明见《Hadoop 2.X HDFS源码剖析》中3.1.4小节关于FSImage类的说明。持久化到磁盘:原创 2020-06-10 19:27:06 · 280 阅读 · 0 评论 -
HDFS-FSEditLog类
FSEditLog是操作日志文件的入口类,它负责记录日志,创建日志文件,roll日志文件等。FSeditLog本身是一个状态机,比如在roll一个日志文件与新开一个日志文件之间,它的状态是BETWEEN_LOG_SEGMENTSFSEditLog类最重要的字段是journalSet,它在initJournals()方法中初始化journalSet中的journals,逻辑是这样的,通过遍历传入的List<URI>,如果URI对应的是本地目录则创建FileJournalManager,然原创 2020-06-10 16:50:34 · 237 阅读 · 0 评论 -
hdfs数据块间的传输(Sender与DataXceiverServer交互)
详情参见《Hadoop 2.X HDFS源码剖析》4.5节Sender类和DataXceiver类都实现了DataTransferProtocol接口,Sender在Client端,将参数与调用方法序列化,然后通过连接发送到datanode。DataXceiverServer类相当于一个ServerSocket,随着DataNode建立而建立,逻辑很简单,循环accept,接收到一个后便初始化一个Peer(代表一个连接,相当于一个Socket)和DataXceiver,并启动DataXceiver,原创 2020-06-08 17:36:36 · 203 阅读 · 0 评论 -
hdfs中块池与命名空间相关类的对应关系
datanode如何与namenode进行通信,在datanode端一个BPServiceActor对应一个namenode,它持有一个bpNameNode,实际上就是rpc的一个proxy,与namenode进行通信,一个HDFS集群可以定义多个命名空间,每一个命名空间在Datanode上都有一个对应的块池存储这个命名空间的数据块,这个块池是由一个BPOfferService实例管理的。由于一个命名空间可以定义多个NameNode,所以BPOfferService类需要与多个Namenode通信并原创 2020-06-05 20:14:58 · 570 阅读 · 0 评论