DataTransferThrottler.java----独立内存类:数据传送时的调节参数配置表;这个类是线程安全的,能够被多个线程所共享;

LightWeightGSet.java----继续实现类:一个低内存占用的实现类;

hdfs.security.token.block(安全访问HDFS机制)

BlockKey.java----继续实现类:Key用于天生和校验块的令牌;

jsphdfsHDFS源码剖析 React

BlockTokenIdentifier.java----继续实现类:块令牌的标识符;

BlockTokenSecretManager.java----继续实现类:块令牌管理类;BlockTokenSecretManager能够被实例化为两种模式,主模式和从模式。
节点能够天生新的块key,并导出块key到从节点。
从节点只能导入并且利用从主节点吸收的块key。
主机和从机都可以天生和验证块令牌。

BlockTokenSelector.java----继续实现类:为HDFS的块令牌选择;

ExportedBlockKeys.java----继续实现类:通报块key工具;

InvalidBlockTokenException.java----继续实现类:访问令牌验证失落败;

hdfs.security.token.delegation(安全访问HDFS机制)

DelegationTokenIdentifier.java----继续实现类:特定针对HDFS的代表令牌的标识符;

DelegationTokenRenewer.java----继续实现类:这是一个守护进程,实现等待下一个文件系统的接续;

DelegationTokenSecretManager.java----继续实现类:这个类实现了HDFS特定授权的令牌的管理;这个管理类实现了天生并接管每一个令牌的密码;

DelegationTokenSelector.java----继续实现类:专门针对HDFS的令牌;

2.HDFS实体实现包

这是代码剖析的重点,包含8个包:

hdfs.server.common包含了一些名字节点和数据节点共享的功能,如系统升级、存储空间信息等。

hdfs.protocol和hdfs.server.protocol供应了HDFS各个实体间通过IPC交互的接口的定义和实现。

hdfs.server.namenode、hdfs.server.datanode和hdfs分别包含了名字节点、数据节点和客户真个实现。
上述代码是HDFS代码剖析的重点。

hdfs.server.namenode.metrics和hdfs.server.datanode.metrics实现了名字节点和数据节点上度量数据的网络功能。
度量数据包括名字节点进程和数据节点进程上事宜的计数,例如数据节点上就可以网络到写入字节数、被复制的块的数量等信息。

hdfs.server.common(一些名字节点和数据节点共享的功能)

GenerationStamp.java----继续实现类:天生韶光戳的功能及读写访问类;

HdfsConstants.java----接口类:一些HDFS内部的常数;Hdfs常量字段及取值的定义;

InconsistentFSStateException.java----继续实现类:不一致的文件系统状态非常;文件状态检讨出错提示信息;

IncorrectVersionException.java----继续实现类:禁绝确的版本非常;版本禁绝确检讨时提示信息;

Storage.java----继续实现类:存储信息文件;本地存储信息存储在一个单独的文件版本中;它包含了节点类型、存储布局版本、命名空间ID以及文件系统状态创建韶光;内存中以扩展表记录办法记录当前namenode索引信息及状态信息(文件是否在打开);

StorageInfo.java----独立内存类:存储信息的通用类;内存中文件索引信息基本表;基本浸染是保存地储上的文件系统元信息;

Upgradeable.java----接口类:分布式升级工具的通用接口;工具升级接口方法集定义;

UpgradeManager.java----独立内存类、抽象:通用升级管理;

UpgradeObject.java----继续实现类:抽象升级工具;包含常用接口方法的实现;可升级工具的接口方法实现;

UpgradeObjectCollection.java----独立内存类:可升级工具的凑集容器实现;升级工具在利用前该当前辈行注册,才能利用;

UpgradeStatusReport.java----继续实现类:系统升级基类;升级过程状态信息表定义;

Util.java----独立内存类:获取当前系统韶光;

hdfs.protocol(HDFS各个实体间通过IPC交互的接口)

AlreadyBeingCreatedException.java----继续实现类:文件已经建立非常;

Block.java----继续实现类:数据块在HDFS中的抽象;Bolck内存基本块构造定义与读写访问;这个类是大量和数据块干系的类的根本,在客户端接口上,这样的类有LocatedBlock、LocateBlocks和BlockLocalPathInfo。

BlockListAsLongs.java----独立内存类:这个类供应了一个访问块列表的接口;Bolck块的索引构成数组;该类的浸染,便是将块数组blcokArray中的数据,“原封不动”的转换成一个long类型的数组blockList;

BlockLocalPathInfo.java----继续实现类:运用于ClientDatanodeProtocol接口中,用于HDFS读文件的数据节点本地读优化。
当客户端创造它和它要读取的数据块恰好位于同一台主机上的时候,它可以不通过数据节点读数据块,而是直接读取本地文件,以获取数据块的内容。
这大大降落了对应数据节点的负载。

ClientDatanodeProtocol.java----接口类:客户端与数据节点间的接口。
用于客户端和数据节点进行交互,这个接口用得比较少,客户端和数据节点间的紧张交互是通过流接口进行读/写文件数据的操作。
缺点发生时,客户端须要数据节点合营进行规复,或当客户端进行本地文件读优化时,须要通过IPC接口获取一些信息。

ClientProtocol.java----接口类:客户端与namenode之间的接口;是HDFS客户访问文件系统的入口;客户端通过这个接口访问名字节点,操作文件或目录的元数据信息;读写文件也必须先访问名字节点,接下来再和数据节点进行交互,操作文件数据;其余,从名字节点能获取分布式文件系统的一些整体运行状态信息,也是通过这个接口进行的;用于访问NameNode。
它包含了文件角度上的HDFS功能。
和GFS一样,HDFS不供应POSIX形式的接口,而是利用了一个私有接口。
一样平常来说,程序员通过org.apache.hadoop.fs.FileSystem来和HDFS打交道,不须要直策应用该接口。

DatanodeID.java----继续实现类:用于在HDFS集群中确定一个数据节点;

DatanodeInfo.java----继续实现类:继续自DatanodeID,在DatanodeID的根本上,供应了数据节点上的一些度量信息;Datanode状态信息构造定义及访问读写类;

DataTransferProtocol.java----接口类:客户端与数据节点之间运用流协议传输数据的实现;

DirectoryListing.java----继续实现类:用于一次返回一个目录下的多个文件/子目录的属性;

DSQuotaExceededException.java----继续实现类:磁盘空间超出配额非常类;

FSConstants.java----接口类:一些有用的常量;

HdfsFileStatus.java----继续实现类:保存了HDFS文件/目录的属性;

LayoutVersion.java----独立内存类:这个类跟踪了HDFS布局版本中的改变信息;

LocatedBlock.java----继续实现类:已经确认了存储位置的数据块;可以用于一次定位多个数据块;

LocatedBlocks.java----继续实现类:块的位置和文件长度凑集;一组数据块及文件长度解释信息表的定义及读写;

NSQuotaExceededException.java----继续实现类:命名空间超出配额非常类;

QuotaExceededException.java----继续实现类:超出配额非常;

UnregisteredDatanodeException.java----继续实现类:未注册的数据节点非常;

hdfs.server.protocol(HDFS各个实体间接口的实现)

BalancerBandwidthCommand.java----继续实现类:管理员通过调用\"大众dfsadmin -setBalanacerBandwidth newbandwidth\"大众实现动态的调度balancer的带宽参数;

BlockCommand.java----继续实现类:BlockCommand类实现的是数据节点掌握下的块的指令;数据块命令定义及实现类;

BlockMetaDataInfo.java----继续实现类:一个块的元数据信息;数据块的元数据信息定义及实现;

BlockRecoveryInfo.java----继续实现类:块规复操作信息;

BlocksWithLocations.java----继续实现类:BlockLocations序列的实现类;带位置的块信息的读写;

DatanodeCommand.java----抽象类:数据节点命令;数据节点基本信息定义及实现;

DatanodeProtocol.java----接口类:做事器间接口——数据节点与名字节点间的接口。
在HDFS的主从体系构造中,数据节点作为从节点,不断的通过这个接口主节点名字节点报告一些信息,同步信息到名字节点;同时,该接口的一些方法,方法的返回值会带回名字节点指令,根据这些指令,数据节点或移动、或删除,或规复本地磁盘上的数据块,或者实行其他的操作。

DatanodeRegistration.java----继续实现类:DatanodeRegistration类包含名字节点识别和验证数据节点的所有信息;数据节点的注册信息读写方法定义及实现;

DisallowedDatanodeException.java----继续实现类:不许可的数据节点非常;

InterDatanodeProtocol.java----接口类:做事器间的接口——数据节点与数据节点间的接口。
数据节点通过这个接口,和其他数据节点进行通信,规复数据块,担保数据的同等性。

KeyUpdateCommand.java----继续实现类:key升级命令;

NamenodeProtocol.java----接口类:做事期间接口——第二名字节点、HDFS均衡器与名字节点间的接口。
第二名字节点会一直的获取名字节点上某一个韶光点的命名空间镜像和镜像的变革日志,然后会合并得到一个新的镜像,并将该结果发送回名字节点,在这个过程中,名字节点会通过这个接口,合营第二名字节点完成元数据的合并。
该接口也为HDFS均衡器balancer的正常事情供应一些信息。

NamespaceInfo.java----继续实现类:NamespaceInfo类实现了返回名字节点针对数据节点的握手;

UpgradeCommand.java----继续实现类:这是一个通用的分布式升级命令类;升级数据块命名实现;

hdfs.server.namenode(名字节点的实现)

BlockPlacementPolicy.java----抽象类:这个接口用于选择放置块副本的目标磁盘的所需的数目;

BlockPlacementPolicyDefault.java----继续实现类:这个类实现了选择放置块副本的目标磁盘的所需的数目;

BlockPlacementPolicyWithNodeGroup.java----继续实现类:这个类实现了在node-group层上选择放置块副本的目标磁盘的所需的数目;

BlockInfo.java----独立内存类:这个类掩护了块到它元数据的映射;

CancelDelegationTokenServlet.java----继续实现类:取消代表令牌做事;

CheckpointSignature.java----继续实现类:检讨点署名类;存贮信息的署名信息表定义;

ContentSummaryServlet.java----继续实现类:文件校验做事;

CorruptReplicasMap.java----独立内存类:存储文件系统中所有破坏的块的信息;

DatanodeDescriptor.java----继续实现类:DatanodeDescriptor类跟踪并统计了给定的数据节点上的信息,比如可用存储空间,上次更新韶光等等;数据节点的状态信息定义及实现;

DecommissionManager.java----独立内存类:管理节点的解除;

DfsServlet.java----抽象类:DFS做事的基类;Web办法操作DFS的代理接口;

EditLogInputStream.java----抽象类:一个通用的抽象类用来支持从持久型存储读取编辑日志数据;读取日志数据的类方法定义及实现;

EditLogOutputStream.java----继续实现类:一个通用的抽象类用来支持从持久型存储记录编辑日志数据;写日志数据的类方法定义及实现;

FileChecksumServlets.java----独立内存类:文件校验做事;文件较验web操作命令的代理实现;

FileDataServlet.java----继续实现类:文件数据web操作命令的代理实现;

FsckServlet.java----继续实现类:名字节点上fsck的web做事;文件系统检讨web操作命令的代理实现;

FSClusterStats.java----接口类:这个接口用于检索集群干系的统计;

FSDirectory.java----继续实现类:类FSDirectory实现了存储文件系统的目录状态;文件目录构造的定义及实现;

FSEditLog.java----独立内存类:FSEditLog类实现了掩护命名空间改动的日志记录;文件系统日志表的定义;

FSImage.java----继续实现类:FSImage实现对命名空间的编辑进行检讨点操作和日志记录操作;文件系统的目录、文件、数据的索引及关系信息定义;

FSInodeInfo.java----接口类:文件系统干系信息;

FSNamesystem.java----继续实现类:FSNamesystem类实现了为数据节点进行实际的记账事情;为数据节点命名的信息构造定义;

FSPermissionChecker.java----独立内存类:实现用于检测文件系统权限的类;

GetDelegationTokenServlet.java----继续实现类:获取委托令牌做事;

GetImageServlet.java----继续实现类:这个类用于在命名系统中检索文件;常日用于第二名字节点来检索镜像以及为周期性的检测点进行编辑文件;

Host2NodesMap.java----独立内存类:主机到节点的映射;

INode.java----继续实现类:这个抽象类包含了文件和目录索引节点的通用字段;节点根本信息构造定义;

INodeDirectory.java----继续实现类:表示目录的索引节点的类;

INodeDirectoryWithQuota.java----继续实现类:有配额限定的目录索引节点类;

INodeFile.java----继续实现类:目录索引节点文件;文件节点信息构造定义;

INodeFileUnderConstruction.java----继续实现类:建立目录索引节点文件;在创建之下的文件节点信息构造定义;

JspHelper.java----独立内存类:JSP实现赞助类;

LeaseExpiredException.java----继续实现类:创建的文件已过期非常;

LeaseManager.java----独立内存类:LeaseManager实现了写文件的租赁管理;这个类还供应了租赁规复的有用的静态方法;左券信息构造定义及实现;

ListPathsServlet.java----继续实现类:获取一个文件系统的元信息;

MetaRecoveryContext.java----独立内存类:正在进行的名字节点规复进程的高下文数据;

NameCache.java----独立内存类:缓存常常利用的名称以便再用;

NameNode.java----继续实现类:名字节点功能管理和实现类;名称节点的核心做事器类;

NamenodeFsck.java----独立内存类:这个类供应了DFS卷基本的检测;名称节点的系统检测类;

NameNodeMXBean.java----接口类:这个类是名字节点信息的JMX管理接口;

NotReplicatedYetException.java----继续实现类:文件还未赋值非常类;

PendingReplicationBlocks.java----独立内存类:这个类PendingReplicationBlocks实现了所有快复制的记录;正在复制数据块的信息表定义;

PermissionChecker.java----独立内存类:这个类实现了实行权限检讨操作;权限检讨表构造定义及实现;

RenewDelegationTokenServlet.java----继续实现类:续订令牌做事;

SafeModeException.java----继续实现类:当名字节点处于安全模式的时候抛出这个非常;客户端不能够修正名字空间直到安全模式关闭;

SecondaryNameNode.java----继续实现类:第二名字节点功能的管理和实现类;

SerialNumberManager.java----独立内存类:为用户和组管理名称到序列号的映射;

StreamFile.java----继续实现类:流文件类的实现;

TransferFsImage.java----继续实现类:这个类实现了从名字节点获取一个指定的文件的功能;通过http办法来获取文件的镜像信息;

UnderReplicatedBlocks.java----继续实现类:复制块的类的实现;复制完成后的块信息表定义;

UnsupportedActionException.java----继续实现类:操作不支持的非常;

UpgradeManagerNamenode.java----继续实现类:名字节点升级的管理;

UpgradeObjectNamenode.java----抽象类:名字节点工具更新类;数据节点的更新运行在单独的线程上;升级名称节点的工具信息;

hdfs.server.datanode(数据节点的实现)

BlockAlreadyExistsException.java----继续实现类:目标块已经存在非常;

BlockMetadataHeader.java----独立内存类:数据块头部构造定义及实现;

BlockReceiver.java----继续实现类:这个类实现了吸收一个块并写到自己的磁盘的功能,同时也可以复制它到其余一个磁盘;数据块吸收留器信息构造及实现写入到盘中;吸收一个数据块,并写到本地的磁盘,同时可能会拷贝到其他的节点上;

BlockSender.java----继续实现类:从磁盘读取块,并发送它到吸收的目的地;从磁盘中读数据块并发送到相应吸收者;

BlockTransferThrottler.java----独立内存类:调节数据块的传输;块传送时的调节参数配置表;

DataBlockScanner.java----继续实现类:数据块的扫描工具实现;DataBlockScanner拥有它单独的线程,能定时地从目前DataNode管理的数据块文件进行校验;实在最主要的方法便是verifyBlock;DataBlockScanner其他的赞助方法用于对DataBlockScanner管理的数据块文件信息进行增加/删除,排序操作;

DataNode.java----继续实现类:数据节点的功能的管理和实现;数据块的核心管理器;

DatanodeBlockInfo.java----独立内存类:这个类用于数据节点保持从数据块到它的元数据的映射的功能;建立块文件和其属于哪个FSVolume之间的映射关系;

DataNodeMXBean.java----接口类:数据节点信息的JMX管理接口的实现;

DataStorage.java----继续实现类:数据存储信息文件;

DataXceiver.java----继续实现类:用于处理输入/输出数据流的线程;

DataXceiverServer.java----继续实现类:用于吸收和发送数据块的做事;

FSDataset.java----继续实现类:FSDataset类实现管理数据块凑集的功能;

FSDatasetAsyncDiskService.java----独立内存类:这个类实现了每个卷上多个线程池的容器,以是我们能够轻松地调度异步磁盘操作;为每个数据块目录创建一个线程池,并用作为一个线程组,池的最小值为1 ,最大值为4;当前版本,只有delete 操作会将任务经由线程池调度来进行异步处理,读写操作都是调文件操作同步去实行的;

FSDatasetInterface.java----接口类:这是一个接口,这个接口实现了一个数据节点存储块的底层存储;FSDatasetInterface是DataNode对底局存储的抽象;

SecureDataNodeStarter.java----继续实现类:这个类实现在一个安全的集群中启动一个数据节点,在启动前须要得到特权资源,并把它们递交给数据节点;

UpgradeManagerDatanode.java----继续实现类:这个类实现了数据节点的升级管理;

UpgradeObjectDatanode.java----抽象类:这个类是数据节点升级工具的基类;数据节点升级运行在一个单独的线程中;

hdfs(客户真个实现)

BlockReader.java----接口类:这个接口供本地和远程块读取共享;

BlockReaderLocal.java----继续实现类:本地块读取;

ByteRangeInputStream.java----抽象类:为了支持HTTP字节流,每次都须要建立一个针对HTTP做事的新的连接;

ChecksumDistributedFileSystem.java----继续实现类:分布式文件系统检测;

DFSClient.java----独立内存类:DFSClient类能够连接到Hadoop文件系统并实行基本的文件操作;

DFSConfigKeys.java----继续实现类:这个类包含了HDFS中利用的常数;

DFSUtil.java----独立内存类:DFS实用工具;

DistributedFileSystem.java----继续实现类:DFS系统的抽象文件系统实现;分布式文件系统功能的实现;

HftpFileSystem.java----继续实现类:通过HTTP访问文件系统的协议的实行;采取HTTP协议来访问HDFS文件;

HsftpFileSystem.java----继续实现类:通过HTTPs访问文件系统的协议的实行;采取HTTPs协议来访问HDFS文件;

LeaseRenewer.java----独立内存类:更新租赁;

hdfs.server.namenode.metrics(名字节点上度量数据的网络功能)

FSNamesystemMBean.java----接口类:这个接口定义了获取一个名字节点的FSNamesystem状态的方法;取名称节点的文件状态信息;

NameNodeInstrumentation.java----继续实现类:名字节点规范类;

hdfs.server.datanode.metrics(数据节点上度量数据的网络功能)

DataNodeInstrumentation.java----继续实现类:数据节点的一些规范;

FSDatasetMBean.java----接口类:这个接口中定义了方法来获取一个数据节点的FSDataset的状态;数据集的职能定义;

3.运用包

包括hdfs.tools和hdfs.server.balancer,这两个包供应查询HDFS状态信息工具dfsadmin、文件系统检讨工具fsck和HDFS均衡器balancer(通过start-balancer.sh启动)的实现。

hdfs.tools(查询HDFS状态信息工具dfsadmin、文件系统检讨工具fsck的实现)

DelegationTokenFetcher.java----独立内存类:这个类实现了从当前的名字节点获取DelegationToken,并存储它到指定的文件当中;

DFSAdmin.java----继续实现类:这个类实现了供应一些DFS访问管理;管理员命令的实现;

DFSck.java----继续实现类:这个类实现了对DFS卷进行基本的检讨;文件系统检讨命令的实现;

HDFSConcat.java----独立内存类:HDFS串接;

hdfs.server.balancer(HDFS均衡器balancer的实现)

Balancer.java----继续实现类:负载均衡进程,各节点基于他来进行任务量的平衡;balance是一个工具,用于当一些数据节点全部利用或者有新的节点加入集群的时候,来平衡HDFS集群上的磁盘空间利用率;

4.WebHDFS干系包

包括hdfs.web.resources、hdfs.server.namenode.metrics.web.resources、hdfs.server.datanode.web.resources和hdfs.web共4个包。

WebHDFS是HDFS 1.0中引入的新功能,它供应了一个完全的、通过HTTP访问HDFS的机制。
比拟只读的hftp文件系统,WebHDFS供应了HTTP上读写HDFS的能力,并在此根本上实现了访问HDFS的C客户端和用户空间文件系统(FUSE)。