`

namenode任务线程之HeartbeatMonitor

 
阅读更多

上篇分析了PendingReplicationMonitor   这次分析HeartbeatMonitor

 

看到这个类名,给我的第一印象就是server端定时心跳client端,其实在以前的话都是这么来做的,但是当client端太多的时候就不适合这种心跳检测模式了,改而换成client给server端发送心跳信息,server端只是负责接收心跳而已,他只是需要在一个端口listen心跳信息即可,如果在一定时间内没收到心跳信息就认为这个client挂了,这种实现方式在client多的情况下很有效,而且对server端的压力大大降低。

 

好了有了上面的铺垫,那么我们来看看HeartbeatMonitor具体做了什么

首先我们定位到具体执行心跳检测的方法上heartbeatCheck,然后看下他的java doc

 /**
   * Check if there are any expired heartbeats, and if so,
   * whether any blocks have to be re-replicated.
   * While removing dead datanodes, make sure that only one datanode is marked
   * dead at a time within the synchronized section. Otherwise, a cascading
   * effect causes more datanodes to be declared dead.
   */
  void heartbeatCheck() 

   注释说的很明白我就不翻译了,我们来看看程序的具体实现逻辑,所有的心跳信息都存放在一个列表中,

 

/**
   * Stores a set of DatanodeDescriptor objects.
   * This is a subset of {@link #datanodeMap}, containing nodes that are 
   * considered alive.
   * The {@link HeartbeatMonitor} periodically checks for outdated entries,
   * and removes them from the list.
   */
  ArrayList<DatanodeDescriptor> heartbeats 

    那么这些心跳数据从何而来呢,顺腾摸瓜最后到了DataNode,调用过程如下

 

DataNode.create()------->NameNode.register()------->FSNamesystem.registerDatanode

 

   首先看下心跳的间隔时间和过期时间

 

 long heartbeatInterval = conf.getLong("dfs.heartbeat.interval", 3) * 1000;

 this.heartbeatRecheckInterval = conf.getInt(
        "heartbeat.recheck.interval", 5 * 60 * 1000); // 5 minutes  心跳检测一次dataNode的心跳信息
 
this.heartbeatExpireInterval = 2 * heartbeatRecheckInterval +
      10 * heartbeatInterval;                                    //datanode的心跳过期时间 超过这个时间的就认为死了

 

  检测分2步

 

1:// locate the first dead node.
比较 datanode发来的心跳信息更新时间 与 过期时间 确定是否已经是死datanode

2:如果是死节点则进一步执行一些与这个节点相关的操作
例如 : 1)删除心跳检测信息
           2)更新统计信息
           3)删除块映射信息
           4)从无效集合中删除该节点信息(这个无效节点是干啥的?)
           5)删除节点集群中该节点的信息(这个信息是干啥的?)
 

上面只是在datanode创建的时候发送的心跳信息,其实在正常运行过程中也是需要发送心跳信息的:

发送过程如下:

DataNode.create------->DataNode.start------->DataNode.offerService---->NameNode.sendHeartbeat---->FSNamesystem.handleHeartbeat

 在handleHeartbeat中主要通过更新DatanodeDescriptor这个对象实现的,因为同一个DatanodeDescriptor既放在

heartbeats列表中又放在datanodeMap中,引用是一个。

 

然后这里有一点不好的是其实列表里的对象是没有重复的,那就应该使用set了,结果搞了个list,equal只比较了name和storageID

 

 

分享到:
评论

相关推荐

    NameNode职责.pptx

    NameNode是Hadoop分布式文件系统HDFS的核心组件之一,负责维护文件系统的元数据。下面是NameNode的职责和相关知识点: NameNode的职责 NameNode是HDFS的中心节点,负责维护文件系统的命名空间。它的主要职责包括:...

    Hadoop Namenode性能诊断及优化

    2. **jstack+脚本**:通过jstack工具获取NameNode进程中的线程快照,并结合脚本自动化分析这些快照,寻找可能的死锁或阻塞情况。 3. **利用x86 PMU的Profiling工具**:利用Oprofile或Intel Vtune等工具对NameNode...

    Namenode瓶颈解决方案

    文件名“都是海量惹得祸 之 大家来聊Namenode瓶颈解决方案.pptx”表明这是一个关于Namenode问题的演讲或报告,可能详细阐述了大数据量对Namenode的影响,分析了问题的根源,并提供了具体的解决方案。 在实际解决...

    hadoop2.0 2个namenode 2个datanode 部署

    Hadoop 2.0 双 Namenode 双 Datanode 部署 Hadoop 是一个开源的大数据处理框架,它提供了分布式文件系统(HDFS)和Map/Reduce 计算框架。 在这个部署中,我们将使用 Hadoop 2.0 在两个 Ubuntu 服务器上部署双 ...

    HDFS中NameNode节点的配置、备份和恢复.doc

    HDFS 中 NameNode 节点的配置、备份和恢复 HDFS(Hadoop Distributed File System)是 Hadoop 生态系统中的分布式文件系统,它提供了高效、可靠、可扩展的文件存储解决方案。 NameNode 是 HDFS 集群中的中心服务器...

    namenode启动失败参考

    在Hadoop分布式文件系统(HDFS)中,Namenode是关键组件,它负责元数据管理,包括文件系统的命名空间和文件的块映射信息。当Namenode启动失败时,通常与fsimage和edits文件有关,这些文件是Namenode存储元数据的重要...

    NameNode机制.docx

    NameNode作为Hadoop分布式文件系统(HDFS)的核心组件之一,负责管理整个文件系统的命名空间以及客户端的文件访问。为了保证元数据的安全性和持久性,NameNode在运行过程中需要将元数据保存在内存中,并同时在磁盘中...

    Hadoop之NameNode Federation图文详解

    Hadoop之NameNode Federation图文详解 Hadoop的NameNode Federation是HDFS(Hadoop Distributed File System)中的一种架构设计,旨在解决NameNode的扩展性、隔离性和性能问题。本篇文章将对NameNode Federation的...

    namenode元数据管理机制

    hdfs的namenode的元数据管理机制,简要画出了元数据管理的流程分析

    Hadoop Namenode恢复

    Hadoop Namenode 是 Hadoop 分布式文件系统的核心组件之一,负责管理文件系统的命名空间。然而,在生产环境中,namenode 的崩溃可能会导致整个集群的不可用。因此,namenode 的恢复是非常重要的。本文将详细介绍 ...

    hadoop NameNode 源码解析

    Hadoop 的 NameNode 是 Hadoop 分布式文件系统(HDFS)的核心组件之一,负责管理文件系统的 namespace 和数据块的存储位置。在本文中,我们将深入探讨 Hadoop NameNode 的源码,了解其启动过程、配置加载、RPC ...

    hadoop namenode双机热备

    在IT行业中,高可用性是关键,特别是在大数据处理领域,Hadoop作为分布式计算框架,其NameNode节点的稳定性至关重要。"hadoop namenode双机热备"是为确保Hadoop集群持续运行而采取的一种重要策略,通过双机热备可以...

    11_尚硅谷大数据之HDFS_NameNode和SecondaryNameNode1

    在Hadoop大数据存储系统中,HDFS(Hadoop Distributed File System)是核心组件之一,用于分布式存储大量数据。NameNode是HDFS的核心节点,负责管理文件系统的元数据,包括文件和目录的命名空间以及文件的块映射信息...

    【HDFS篇08】NameNode故障处理1

    在分布式文件系统Hadoop的HDFS(Hadoop Distributed File System)中,NameNode是核心组件,负责元数据的管理,包括文件系统命名空间和文件块的映射信息。当NameNode发生故障时,数据的可用性和系统的稳定性都会受到...

    NameNode及SecondaryNameNode分析

    NameNode及SecondaryNameNode分析

    HDFS的概念-namenode和datanode.pdf

    《HDFS的概念——Namenode和Datanode详解》 Hadoop分布式文件系统(HDFS)是Apache Hadoop项目的核心组件,为大数据处理提供了高效、可靠的分布式存储解决方案。HDFS设计的目标是处理海量数据,其架构基于两个核心...

    (orc + snappy / zlib ) 多线程并行合并小文件工具类 (出自:flink自定义合并orc小文件处)

    小文件指的是大小相对较小的文件,它们在分布式系统中可能导致大量的数据块,增加NameNode的内存负担,降低I/O效率。为了解决这个问题,我们可以采用各种合并策略,其中一种是通过多线程并行合并小文件。本项目提供...

    【HDFS篇07】NameNode和SecondearyNameNode1

    HDFS(Hadoop Distributed File System)是Apache Hadoop项目的核心组件之一,它为大数据存储提供了一个可靠的、可扩展的分布式文件系统。在HDFS中,NameNode是主节点,负责管理文件系统的元数据,而...

    HDFS之NameNode分析

    大家都知道HDFS的架构由NameNode,SecondaryNameNode和DataNodes组成,其源码类图如下图所示:正如上图所示,NameNode和DataNode继承了很多的protocol用于彼此间的通信,其实nameNode还实现了...实现了ClientProtocol...

Global site tag (gtag.js) - Google Analytics