今天早就回来了,然后偷懒了2个小时,现在才开始分析代码,之前在几篇文章里都有说将某些block加入到recentInvalidateSets,然后也没分析这个set具体的作用,以及后续的处理,今天就单独来说下他(看完代码才发现原来这么简单,其实应该在ReplicationMonitor中分析的,可惜当时太晚了没心思分析了)
分析之前先看下他的数据结构
//
// Keeps a Collection for every named machine containing
// blocks that have recently been invalidated and are thought to live
// on the machine in question.
// Mapping: StorageID -> ArrayList<Block>
//
private Map<String, Collection<Block>> recentInvalidateSets =
new TreeMap<String, Collection<Block>>();
key是datanode的唯一标示StorageID value是这个datanode上无效的block
之前的文章里已经说明了他的数据来源情况,今天只分析下对他的处理,对他的处理请求是在ReplicationMonitor这个后台任务线程中的computeInvalidateWork方法里执行的(实际方法是invalidateWorkForOneNode),在这个方法里会取出map里第一个datanode节点上所有无效的block,然后将这个block列表设置到表示这个datanode的DatanodeDescriptor对象的invalidateBlocks这个集合中,这个集合的数据结构如下:
/** A set of blocks to be invalidated by this datanode */
private Set<Block> invalidateBlocks = new TreeSet<Block>();
也就是说让datanode对象持有自身无效block列表,那么这个列表谁会关心呢,或者说什么时候会被用起来呢,追踪代码发现是datanode给namenode发送心跳信息时,namenode会依据自己保存的DatanodeDescriptor对象中invalidateBlocks这个集合来生成一个invalidate blocks的命令返回给datanode,同时将这些无效的block也给datanode,让datanode来处理这些无效的block。
分享到:
相关推荐
NameNode的核心功能主要实现在`FSNamesystem`类中,而`NameNode.java`则主要负责对外提供服务接口以及内部组件的管理和协调。 #### 三、NameNode.java成员变量详解 1. **`public FSNamesystem namesystem;`** - ...
`loadFSImage`在`FSNamesystem.java`的`initialize`方法中被调用,是系统初始化过程的重要步骤。 2. **`addFile`**: - 用途:用于创建文件或追加数据时创建`INodeFileUnderConstruction`节点。 - 实现细节:首先...
在HDFS源码中,FSImage类、FSEditLog类和FSNamesystem类是与NameNode的实现密切相关的类。FSImage类负责存储文件系统的元数据,FSEditLog类负责处理元数据变更的日志,而FSNamesystem类则封装了命名空间的实现。 在...
在Hadoop分布式文件系统(HDFS)中,文件的读写操作是整个系统的核心功能。本文将详细解析HDFS的读取和写入过程,基于标题"《Hadoop学习总结之二:HDFS读写过程解析》"和描述中提到的代码分析。 1. **文件的打开** ...
- 在`FSNamesystem`中,有一个关键的成员变量`FSDirectory dir`,它不仅负责读写硬盘上的`fsimage`和`edit`文件,还维护了一个树状结构,用以表示文件系统的目录和文件信息。 - 这个树状结构由`...
这些操作在`org.apache.hadoop.hdfs.protocol`和`org.apache.hadoop.hdfs.server.namenode.FSNamesystem`中实现。 三、MapReduce源码详解 1. JobTracker与TaskTracker:MapReduce的JobTracker负责任务调度和资源...
这个过程由`getAdditionalBlock`方法在`FSNamesystem`内部处理,它进行一系列的安全检查,如是否在安全模式、存储空间是否充足、租约状态、数据块副本数等。然后,通过`ReplicationTargetChooser`选择合适的数据节点...
`FSNamesystem`类中的`processReport`方法负责处理`DataNode`发来的Block Report。具体步骤如下: 1. **初步检查**:首先对传入的参数进行验证,确保它们的有效性。 2. **报告差异处理**:通过调用`...
这部分逻辑主要集中在`FSNamesystem.handleHeartbeat`方法中。具体步骤如下: 1. **查找DatanodeDescriptor**:首先通过`getDatanode`方法查找与传入注册信息相对应的`DatanodeDescriptor`实例。如果发现现有...
例如,`org.apache.hadoop.hdfs.server.namenode.FSNamesystem`类是HDFS的核心,它负责元数据管理;而`org.apache.hadoop.mapreduce.v2.app.MRAppMaster`则是MapReduce作业的主要控制中心。 在解压密码为...
Hadoop通过数据复制实现容错,源码中涉及到的数据复制逻辑在`org.apache.hadoop.hdfs.server.namenode.FSNamesystem`等类。此外,Hadoop的可扩展性体现在模块化设计和动态资源调整上。 7. **Hadoop安全机制** ...
3. `FSNamesystem`:HDFS的元数据管理系统,管理命名空间和文件块映射。源码展示了如何处理文件系统的增删改查操作以及数据块的分配和回收。 四、MapReduce源码解析 1. `hadoop-mapreduce`:包含JobTracker、...
源代码中可以找到如`org.apache.hadoop.hdfs.server.namenode.FSNamesystem`和`org.apache.hadoop.hdfs.server.datanode.DataNode`等关键类,它们负责文件系统的管理和数据存储。 2. MapReduce模块:主要关注`org....
此工具用于分析hdfs-audit日志文件中的hdfs请求,比如下面是一条完整的记录 2015-09-09 05:29:54,727 INFO FSNamesystem.audit: allowed=true ugi=data (auth:SIMPLE) ip=/192.128.10.15 cmd=open src=/user/data/....
这个操作首先通过调用`FSNamesystem`的`renameTo`方法开始,接着由`renameToInternal`处理,最终由`FSDirectory`的`renameTo`实现。如果操作成功,还会更新文件的租约名称,确保数据的一致性。 2. 文件删除: `...
副本策略由`org.apache.hadoop.hdfs.server.namenode.FSNamesystem`类管理,确保数据的安全性和可用性。 2. NameNode与DataNode:NameNode是HDFS的元数据管理节点,它维护文件系统命名空间和数据块信息。`org....
- **FSNamesystem**: 包含文件系统的所有元数据。 - **FSDirectory**: 文件系统的目录结构。 - **FSImage**: 存储文件系统的当前状态。 - **FSEditLog**: 记录对文件系统进行的所有更改操作。 - **INodeDirectory/...