(1)NameNode保存的两种信息:文件和block的映射、block和DataNode的映射。文件和block的映射,固化在磁盘上。而block和DataNode的映射在DataNode启动时上报给NameNode
(2)DatanodeProtocol:用于DataNode来调用NameNode上的方法,情景是DataNode向NameNode通信,方法参数传递到NameNode上;
ClientProtocol:提供给客户端,用于访问NameNode。它包含了文件角度上的HDFS功能。和GFS一样,HDFS不提供POSIX形式的接口,而是使用了一个私有接口。一般来说,程序员通过org.apache.hadoop.fs.FileSystem来和HDFS打交道,不需要直接使用该接口;
NamenodeProtocol:用于从NameNode到NameNode的通信;
InterDatanodeProtocol:用于DataNode和DataNode通信,只有一个updateBlock(Block oldblock, Block newblock, boolean finalize)方法;
ClientDatanodeProtocol:用于Client和DataNode之间通信,只有recoverBlock(Block block, boolean keepLength,
DatanodeInfo[] targets)方法,但是Client和DataNode之间应该不只这些,需要到后面看到读写的情况在仔细分析;
(3)INode是一个抽象类,它的两个字类,分别对应着目录(INodeDirectory)和文件(INodeFile)。INodeDirectoryWithQuota,如它的名字隐含的,是带了容量限制的目录。INodeFileUnderConstruction,抽象了正在构造的文件,当我们需要在HDFS中创建文件的时候,由于创建过程比较长,目录系统会维护对应的信息。
INode中的成员变量有:name,目录/文件名;modificationTime和accessTime是最后的修改时间和访问时间;parent指向了父目录;permission是访问权限。HDFS采用了和UNIX/Linux类似的访问控制机制。系统维护了一个类似于UNIX系统的组表(group)和用户表(user),并给每一个组和用户一个ID,permission在INode中是long型,它同时包含了组和用户信息。
INode中的抽象方法:collectSubtreeBlocksAndClear,用来收集INode所有孩子的block,因为INode可能是文件或者目录,目录的话就不含有Block,而文件则有多个Block,返回值为文件的个数而非Block的个数;computeContentSummary用于递归计算INode包含的一些相关信息,如文件数,目录数,占用磁盘空间。
(4)INodeDirectory是INode的子类,里面有List<INode> children,因为目录下既有目录也有文件。
(5)INodeDirectoryWithQuota进一步加强了INodeDirectory,限制了INodeDirectory可以使用的空间。
(6)INodeFile是HDFS中的文件,BlockInfo blocks[]对应这个文件的列表,BlockInfo增强了Block类。
(7)INodeFileUnderConstruction保存了正在构造的文件的一些信息,包括clientName,这是目前拥有租约的节点名(创建文件时,只有一个节点拥有租约,其他节点配合这个节点工作)。clientMachine是构造该文件的客户端名称,如果构造请求由DataNode发起,clientNode会保持相应的信息,targets保存了配合构造文件的所有节点。租约就是一次操作的许可证,只在一个节点中持有。
(8)BlocksMap:Whose essential functions round aroud Map<Block, BlockInfo>.This class maintains the map from a block to its metadata. block's metadata currently includes INode it belongs(INodeFile) to and the datanodes that store the block(DatanodeDescriptor). BlockInfo contains INodeFile and DatanodeDescriptor which enhances Block.
(9)NameNode需要知道DataNode的信息,最基本的是DatanodeID(hostname:portNumber,unique per cluster storageID(貌似没有什么用),infoserver的端口,ipcserver的端口)
(10)再加一些信息变成DatanodeInfo增加了一些动态信息(容量等),再加上一些Block的动态信息变成DatanodeDescriptor,DatanodeDescriptor包含了两个BlockQueue,分别记录了该DataNode上准备复制(replicateBlocks)和Lease恢复(recoverBlocks这个操作有些不明白)的BlockTargetPair(Block和多个目的DataNode的结构)。同时还有一个Block集合,保存的是该DataNode上已经失效的Block。DatanodeDescriptor提供一系列方法,用于操作上面保存的队列和集合。也提供get*Command方法,用于生成发送到DataNode的命令。当NameNode收到DataNode对现在管理的Block状态的汇报是,会调用reportDiff,找出和现在NameNode上的信息差别,以供后续处理用。
相关推荐
Federation则允许多个独立的NameSpace并行运行,提高了系统的扩展性。 4. **S3A文件系统客户端**:增强了对Amazon S3云存储的支持,提供了更好的性能和可靠性。 5. **网络优化**:包括TCP连接复用、更快的数据传输...
1. `core-site.xml`:这个文件主要用于设置Hadoop的核心参数,如命名空间(namespace)的默认值、文件系统的默认实现、I/O操作的相关配置等。例如,`fs.defaultFS`属性指定默认的文件系统,通常是HDFS的URL;`io....
- 在硬盘上保存的信息包括:命名空间镜像(namespace image)和修改日志(edit log)。 - 跟踪文件包含哪些数据块以及它们位于哪些数据节点上,这些信息在系统启动时通过数据节点收集。 - **数据节点(Datanode)*...
- HDFS Federation:支持多个NameSpace,增强了系统的可扩展性。 - DataNode心跳检测优化:减少了网络通信开销,提升了系统性能。 3. **在Win7上安装Hadoop**: - 安装Java运行环境(JRE):Hadoop依赖Java,...
如果你想在非默认命名空间下运行Tiller,可以使用`--tiller-namespace`选项。 4. **设置私有仓库**:私有仓库通常由Minio这样的对象存储服务提供支持。安装Minio后,可以通过其提供的RESTful API创建一个新的bucket...
HDFS则通过Access Control Lists和Namespace Encryption提供文件级别的授权。 4. 加密:HDFS的Transparent Data Encryption(TDE)功能使得数据在存储时自动加密,增强了数据的保密性。同时,Hadoop还支持SSL通信,...
HDFS提供了高容错性和高可用性,通过NameNode HA(High Availability)和Federation特性,可以实现NameNode的热备份和多NameSpace管理,进一步提升了系统的稳定性和可扩展性。此外,HDFS在性能上也有所提升,例如...
- **Namespace**:文件系统的命名空间,包含文件和目录的元数据信息。 - **Shell**:提供了一系列命令行工具,用于与HDFS进行交互。 - **Fsimage & EditLog**:NameNode使用这两个文件来维护元数据信息的持久化。`...
<description>namenode SAVE hdfs NAMESPACE BYTES <name>dfs.data.dir <value>/usr/hadoop/hdfs/data <description>datanode DATA STORAGE <name>dfs.replication <value>1 <description>NUMBER OF ...
Namenode 负责维护文件系统的命名空间(namespace),即文件和目录的结构,以及数据块到Datanodes的映射关系。同时,Namenode 还负责处理客户端的读写请求,并监控 Datanodes 的心跳和块状态报告,确保数据的健康...
The basis of this solution is to have one or more mirror Hadoop clusters which will be continuously updated with the data from the primary cluster in either a synchronous method or an asynchronous ...
Federation则是为了提升NameNode的横向扩展能力,通过划分多个名称空间(Namespace),每个名称空间由一个独立的NameNode管理,降低了单一NameNode的负担。这种架构下,用户可以根据需要创建和管理不同的名称空间,...
Hadoop的namespace包含了文件系统的目录树结构和相关元数据信息。为了保证系统在发生故障时的namespace不丢失,Active NameNode在进行任何修改时,相关的元数据变动都需要记录到共享存储设备中的日志文件里。Standby...
- **命名空间镜像(namespace image)**: 保存文件系统的元数据信息。 - **修改日志(edit log)**: 记录文件系统的变化。 - **数据块分布信息**: 保存每个文件包含哪些数据块及其所在的Datanode位置。 - **Datanode*...
using namespace std; int main() { string key; string value; map, int> word2count; map, int>::iterator it; while (std::cin >> key) { std::cin >> value; it = word2count.find(key); if (it != ...
这个文件是Hadoop的核心配置,它定义了Hadoop的基本行为,如命名空间(namespace)的默认值,I/O设置以及HDFS操作的相关参数。其中最重要的配置项可能是`fs.defaultFS`,它指定了Hadoop应用程序访问的默认文件系统。...
Hadoop Streaming是一个非常有用的工具,它能够使得任何用编程语言实现的程序能够在Hadoop MapReduce框架中运行。Hadoop Streaming利用标准输入和标准输出来实现程序与MapReduce框架之间的通信。这个特性使得已经...
- **HDFS Federation**:允许多个NameSpace并存,进一步提高系统的扩展性和可用性。 通过研究Hadoop文件系统源代码,我们可以深入了解分布式文件系统的实现细节,这对于优化Hadoop集群的性能、设计更高效的分布式...
7. **安全与权限**:Hadoop的安全机制,如Kerberos认证、HDFS的ACLs和Namespace Quotas等,确保数据安全和访问控制。 8. **性能优化**:包括数据压缩、Block大小调整、Mapper/Reducer数量配置、数据本地化等手段,以...
- **NameNode**:负责管理文件系统的命名空间(Namespace)和客户端请求。它保存了文件系统的元数据,包括文件和目录的层次结构、文件块列表及其位置信息等。 - **DataNode**:用于存储实际的数据块。每个DataNode...