`
zy19982004
  • 浏览: 661967 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
F6f66edc-1c1a-3859-b76b-a22e740b7aa7
Hadoop学习
浏览量:251958
社区版块
存档分类
最新评论

Hadoop学习二十八:Hadoop-hdfs FSNamesystem源码 成员变量

 
阅读更多

一. FSNamesystem概述

     FSNamesystem为DataNode做簿记工作,直接点就是到DataNode的请求都是经过FSNamesystem运算后的。FSNamesystem管理着几个主要的数据结构。

  1. 文件名 -> 数据块(存放在FSImage和日志中)
  2. 合法的数据块列表(上面关系的逆关系)
  3. 数据块 -> DataNode(只保存在内存中,根据DataNode发过来的信息动态建立)
  4. DataNode上保存的数据块(上面关系的逆关系)
  5. 最近发送过心跳信息的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;

 

 

 

0
0
分享到:
评论

相关推荐

    Hadoop学习总结之二:HDFS读写过程解析

    ### Hadoop学习总结之二:深入理解HDFS读写过程 #### 一、HDFS文件读取流程详解 Hadoop的分布式文件系统(HDFS)是大数据存储与处理的重要基石,其读写机制的设计旨在优化大规模数据集的访问效率与容错性。本文将...

    Hadoop学习总结之二:HDFS读写过程解析.doc

    本文将详细解析HDFS的读取和写入过程,基于标题"《Hadoop学习总结之二:HDFS读写过程解析》"和描述中提到的代码分析。 1. **文件的打开** 当客户端想要打开一个HDFS文件时,它会调用`DistributedFileSystem.open`...

    hadoop-src源代码

    二、Hadoop源码结构 Hadoop源代码的组织结构严谨,按照模块和功能进行划分。"org"目录下,包含了Hadoop的主要模块,如hadoop-common(通用模块)、hadoop-hdfs(HDFS模块)、hadoop-mapreduce(MapReduce模块)等。...

    hadoop-2.6.5-src

    Hadoop通过数据复制实现容错,源码中涉及到的数据复制逻辑在`org.apache.hadoop.hdfs.server.namenode.FSNamesystem`等类。此外,Hadoop的可扩展性体现在模块化设计和动态资源调整上。 7. **Hadoop安全机制** ...

    Hadoop分布式系统基础架构 v3.2.2-源码.zip

    例如,`org.apache.hadoop.hdfs.server.namenode.FSNamesystem`类是HDFS的核心,它负责元数据管理;而`org.apache.hadoop.mapreduce.v2.app.MRAppMaster`则是MapReduce作业的主要控制中心。 在解压密码为...

    高可用性的HDFS:Hadoop分布式文件系统深度实践

    第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源代码分析 pdf

    总结来说,Hadoop和HDFS是一个强大的分布式数据处理和存储平台,通过深入学习其源码可以更好地理解分布式系统的工作原理。Hadoop的可靠性和高效性得益于其容错机制、并行处理能力以及可扩展性。Hadoop适用于处理PB...

    Hadoop源代码分析(二三)

    通过分析其成员变量与方法,我们可以更好地理解HDFS是如何管理文件目录状态、数据块以及日志等关键信息的。 #### 二、FSDirectory概述 `FSDirectory`作为HDFS中的一个重要组成部分,主要用于保存HDFS的文件目录...

    hadoop源码分析

    这些操作在`org.apache.hadoop.hdfs.protocol`和`org.apache.hadoop.hdfs.server.namenode.FSNamesystem`中实现。 三、MapReduce源码详解 1. JobTracker与TaskTracker:MapReduce的JobTracker负责任务调度和资源...

    Hadoop编程思想

    Hadoop的核心组件包括**Hadoop Distributed File System (HDFS)** 和 **MapReduce**。Hadoop架构主要由以下几个关键部分组成: - **NameNode**: 存储元数据(metadata),如文件系统命名空间(文件名、目录名等)和...

    Hadoop源代码分析(三三)

    ### Hadoop源代码分析——DataNode与NameNode交互之心跳机制 #### 概述 Hadoop作为一款开源的大数据处理框架,在分布式存储方面扮演着重要角色。本文将深入剖析Hadoop内部实现的一个关键部分——DataNode与...

    hadoop源代码code归档整理

    源代码中可以找到如`org.apache.hadoop.hdfs.server.namenode.FSNamesystem`和`org.apache.hadoop.hdfs.server.datanode.DataNode`等关键类,它们负责文件系统的管理和数据存储。 2. MapReduce模块:主要关注`org....

    Hadoop源代码分析(三一)

    在深入探讨Hadoop源代码分析之前,我们先理解Hadoop的核心组件:HDFS(Hadoop Distributed File System),它是一个分布式文件系统,旨在处理和存储大量数据。本篇分析主要涉及HDFS的操作,如文件重命名、删除、创建...

    Software-Architecture-Project:分析hadoop的源代码

    副本策略由`org.apache.hadoop.hdfs.server.namenode.FSNamesystem`类管理,确保数据的安全性和可用性。 2. NameNode与DataNode:NameNode是HDFS的元数据管理节点,它维护文件系统命名空间和数据块信息。`org....

    Hadoop源代码分析(三四)

    在Hadoop中,`NameNode`是HDFS的核心组件之一,负责管理文件系统的命名空间以及客户端对文件的访问控制。为了维持文件系统的完整性,并确保数据块能够在集群中正确分布,`NameNode`依赖于`DataNode`定期发送的心跳...

    Hadoop源代码分析(三零)

    在Hadoop源代码分析的第三十章节中,主要探讨了HDFS(Hadoop Distributed File System)中的几个关键操作,包括`abandonBlock`、`addBlock`、`complete`等,这些都是与文件内容管理和写入流程密切相关的功能。...

    大数据平台运维架构实践.pdf

    Hadoop生态工具参数监控Metrics包括dfs.namenode.*、dfs.datanode.*、dfs.FSNamesystem.*、hbase.*、mapred.*、yarn.*、rpc.*、jvm.*、flume.*、spark.*等参数。 自动化 自动化是大数据平台运维架构实践的重要组成...

Global site tag (gtag.js) - Google Analytics