一. FSNamesystem概述
FSNamesystem为DataNode做簿记工作,直接点就是到DataNode的请求都是经过FSNamesystem运算后的。FSNamesystem管理着几个主要的数据结构。
- 文件名 -> 数据块(存放在FSImage和日志中)
- 合法的数据块列表(上面关系的逆关系)
- 数据块 -> DataNode(只保存在内存中,根据DataNode发过来的信息动态建立)
- DataNode上保存的数据块(上面关系的逆关系)
- 最近发送过心跳信息的DataNode(LRU)
二. FSNamesystem成员变量
依次见下面
三. FSDirectory
一个文件系统,一个FSNamesystem 一个FSDirectory。FSNamesystem 初始化时会初始化FSDirectory。
public FSDirectory dir;
四. 权限相关
//本地文件的用户文件属主和文件组,可以通过hadoop.job.ugi设置,如果没有设置,那么将使用启动HDFS的用户(通过whoami获得)和该用户所在的组(通过groups获得)作为值。 private UserGroupInformation fsOwner; //对应配置项dfs.permissions.supergroup(默认是supergroup,启动hadoop所使用的用户通常是superuser),应用在defaultPermission中,是系统的超级组。 private String supergroup; //缺省权限,缺省用户为fsOwner;缺省用户组为supergroup;缺省权限为0777,可以通过dfs.upgrade.permission修改。 private PermissionStatus defaultPermission;
五. 系统内各种状态的数据块
//正在复制的数据块 volatile long pendingReplicationBlocksCount = 0L; //损坏的数据块 volatile long corruptReplicaBlocksCount = 0L; //需要复制的数据块 volatile long underReplicatedBlocksCount = 0L; //当前正在处理的复制工作数目 volatile long scheduledReplicationBlocksCount = 0L; //超过配额的数据块 volatile long excessBlocksCount = 0L; //正在删除的数据块 volatile long pendingDeletionBlocksCount = 0L; //保存需要进行复制的数据块 private UnderReplicatedBlocks neededReplications = new UnderReplicatedBlocks(); // We also store pending replication-orders. //保存正在复制的数据块的相关信息 private PendingReplicationBlocks pendingReplications; //保存每个DataNode上无效但还存在的数据块, StorageID -> ArrayList<Block>的对应关系。 private Map<String, Collection<Block>> recentInvalidateSets = new TreeMap<String, Collection<Block>>(); //保存每个DataNode上有效,但超过配额需要删除的数据, StorageID -> TreeSet<Block>的对应关系 Map<String, Collection<Block>> excessReplicateMap = new TreeMap<String, Collection<Block>>(); //保存失效(如:校验没通过)的Block -> DataNode的对应关系 public CorruptReplicasMap corruptReplicas = new CorruptReplicasMap();
六. 系统内DataNode的状态
//Block -> BlockInfo(INode, datanodes, previous BlockInfo, next BlockInfo)的对应 final BlocksMap blocksMap = new BlocksMap(DEFAULT_INITIAL_MAP_CAPACITY, DEFAULT_MAP_LOAD_FACTOR); //保存系统内所有的Datanode, StorageID -> DatanodeDescriptor的对应关系 NavigableMap<String, DatanodeDescriptor> datanodeMap = new TreeMap<String, DatanodeDescriptor>(); //保存所有目前活着的DataNode,线程HeartbeatMonitor会定期检查。 ArrayList<DatanodeDescriptor> heartbeats = new ArrayList<DatanodeDescriptor>(); private Host2NodesMap host2DataNodeMap = new Host2NodesMap();
七. 系统容量
//系统总容量/已使用容量/剩余容量 private long capacityTotal = 0L, capacityUsed = 0L, capacityRemaining = 0L; //系统总连接数,根据DataNode心跳信息跟新。 private int totalLoad = 0;
八. 租约管理器
//租约管理器 public LeaseManager leaseManager = new LeaseManager(this);
九. 复制因子
// The maximum number of replicates we should allow for a single block private int maxReplication; // How many outgoing replication streams a given node should have at one time private int maxReplicationStreams; // MIN_REPLICATION is how many copies we need in place or else we disallow the write private int minReplication; // Default replication private int defaultReplication;
十. 心跳周期
// heartbeatRecheckInterval is how often namenode checks for expired datanodes private long heartbeatRecheckInterval; // heartbeatExpireInterval is how long namenode waits for datanode to report // heartbeat private long heartbeatExpireInterval; //replicationRecheckInterval is how often namenode checks for new replication work private long replicationRecheckInterval;
十一. 网络拓扑结构
// datanode networktoplogy NetworkTopology clusterMap = new NetworkTopology(); private DNSToSwitchMapping dnsToSwitchMapping; // for block replicas placement ReplicationTargetChooser replicator;
十二. 线程
//HeartbeatMonitor thread Daemon hbthread = null; //LeaseMonitor thread public Daemon lmthread = null; //SafeModeMonitor thread Daemon smmthread = null; //Replication thread public Daemon replthread = null; //Replication metrics private ReplicationMonitor replmon = null;
相关推荐
### Hadoop学习总结之二:深入理解HDFS读写过程 #### 一、HDFS文件读取流程详解 Hadoop的分布式文件系统(HDFS)是大数据存储与处理的重要基石,其读写机制的设计旨在优化大规模数据集的访问效率与容错性。本文将...
本文将详细解析HDFS的读取和写入过程,基于标题"《Hadoop学习总结之二:HDFS读写过程解析》"和描述中提到的代码分析。 1. **文件的打开** 当客户端想要打开一个HDFS文件时,它会调用`DistributedFileSystem.open`...
二、Hadoop源码结构 Hadoop源代码的组织结构严谨,按照模块和功能进行划分。"org"目录下,包含了Hadoop的主要模块,如hadoop-common(通用模块)、hadoop-hdfs(HDFS模块)、hadoop-mapreduce(MapReduce模块)等。...
Hadoop通过数据复制实现容错,源码中涉及到的数据复制逻辑在`org.apache.hadoop.hdfs.server.namenode.FSNamesystem`等类。此外,Hadoop的可扩展性体现在模块化设计和动态资源调整上。 7. **Hadoop安全机制** ...
例如,`org.apache.hadoop.hdfs.server.namenode.FSNamesystem`类是HDFS的核心,它负责元数据管理;而`org.apache.hadoop.mapreduce.v2.app.MRAppMaster`则是MapReduce作业的主要控制中心。 在解压密码为...
第1章 HDFS HA及解决方案 1.1 HDFS系统架构 1.2 HA定义 1.3 HDFS HA原因分析及应对措施 1.3.1 可靠性 1.3.2 可维护性 1.4 现有HDFS HA解决方案 1.4.1 Hadoop的元数据备份方案 1.4.2 Hadoop的SecondaryNameNode方案 ...
总结来说,Hadoop和HDFS是一个强大的分布式数据处理和存储平台,通过深入学习其源码可以更好地理解分布式系统的工作原理。Hadoop的可靠性和高效性得益于其容错机制、并行处理能力以及可扩展性。Hadoop适用于处理PB...
通过分析其成员变量与方法,我们可以更好地理解HDFS是如何管理文件目录状态、数据块以及日志等关键信息的。 #### 二、FSDirectory概述 `FSDirectory`作为HDFS中的一个重要组成部分,主要用于保存HDFS的文件目录...
这些操作在`org.apache.hadoop.hdfs.protocol`和`org.apache.hadoop.hdfs.server.namenode.FSNamesystem`中实现。 三、MapReduce源码详解 1. JobTracker与TaskTracker:MapReduce的JobTracker负责任务调度和资源...
Hadoop的核心组件包括**Hadoop Distributed File System (HDFS)** 和 **MapReduce**。Hadoop架构主要由以下几个关键部分组成: - **NameNode**: 存储元数据(metadata),如文件系统命名空间(文件名、目录名等)和...
### Hadoop源代码分析——DataNode与NameNode交互之心跳机制 #### 概述 Hadoop作为一款开源的大数据处理框架,在分布式存储方面扮演着重要角色。本文将深入剖析Hadoop内部实现的一个关键部分——DataNode与...
源代码中可以找到如`org.apache.hadoop.hdfs.server.namenode.FSNamesystem`和`org.apache.hadoop.hdfs.server.datanode.DataNode`等关键类,它们负责文件系统的管理和数据存储。 2. MapReduce模块:主要关注`org....
在深入探讨Hadoop源代码分析之前,我们先理解Hadoop的核心组件:HDFS(Hadoop Distributed File System),它是一个分布式文件系统,旨在处理和存储大量数据。本篇分析主要涉及HDFS的操作,如文件重命名、删除、创建...
副本策略由`org.apache.hadoop.hdfs.server.namenode.FSNamesystem`类管理,确保数据的安全性和可用性。 2. NameNode与DataNode:NameNode是HDFS的元数据管理节点,它维护文件系统命名空间和数据块信息。`org....
在Hadoop中,`NameNode`是HDFS的核心组件之一,负责管理文件系统的命名空间以及客户端对文件的访问控制。为了维持文件系统的完整性,并确保数据块能够在集群中正确分布,`NameNode`依赖于`DataNode`定期发送的心跳...
在Hadoop源代码分析的第三十章节中,主要探讨了HDFS(Hadoop Distributed File System)中的几个关键操作,包括`abandonBlock`、`addBlock`、`complete`等,这些都是与文件内容管理和写入流程密切相关的功能。...
Hadoop生态工具参数监控Metrics包括dfs.namenode.*、dfs.datanode.*、dfs.FSNamesystem.*、hbase.*、mapred.*、yarn.*、rpc.*、jvm.*、flume.*、spark.*等参数。 自动化 自动化是大数据平台运维架构实践的重要组成...