`

第七章:小朱笔记hadoop之源码分析-hdfs分析 第四节:namenode-HeartbeatMonitor

 
阅读更多

第七章:小朱笔记hadoop之源码分析-hdfs分析

第四节:namenode分析

4.5 namenode心跳检测分析HeartbeatMonitor

      DataNode节点在注册时候就开始定期向NameNode节点发送心跳包,以此来告知 NameNode节点自己当前还是可用的,同时从NameNode节点那里得到对自己的控制命令并执行。然而,当一个 DataNode节点没有按时向NameNode节点发送心跳包时,NameNode就会判定这个数据节点已经不可用了,并清除与之相关的数据信息(比如 在改数据节点上的数据块信息)。自然NameNode也再不会把该数据节点分配给客户端使用了。 FSNamesystem$HeartbeatMonitor后台工作线程,用于定期的检查已经接受到的心跳消息,确定哪些 DataNode 已经失效,然后将失效的 DataNode 从系统中移除。 Hadoop 中的心跳消息由 DataNode 发起,NameNode 中进行处理,最终由 HeartbeatMonitor 进行维护。

 

    // 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;  
      
    ......
      
    this.heartbeatRecheckInterval = conf.getInt("heartbeat.recheck.interval", 5 * 60 * 1000); // 5 minutes  
    this.heartbeatExpireInterval = 2 * heartbeatRecheckInterval +10 * heartbeatInterval;  
         

heartbeatExpireInterval的值等于2个检查周期+10个心跳周期
HeartbeatMonitor 默认每隔5s运行一次,主要有两个工作:

(1)heartbeatCheck

 (a)检测datanode是否正常运行
 (b)默认每隔5分钟执行一次,可以通过heartbeat.recheck.interval进行配置   
 (c)遍历heartbeats中保存的datanode列表,判断datanode是否已经超时。超时时间根据heartbeatExpireInterval进行判断,若是超时,则将它从datanodeMap从清除。

(2)updateAccessKey

 (a)调用BlockTokenSecretManager.updateKeys,更新currentKey

 

    /** 
     * Periodically calls heartbeatCheck() and updateAccessKey() 
     *  
     * 周期性地调用FSNamesystem类定义的heartbeatCheck方法,来监视Datanode结点发送的心跳状态信息,并做出处理 
     */  
    class HeartbeatMonitor implements Runnable {  
      private long lastHeartbeatCheck;  
      private long lastAccessKeyUpdate;  
      /** 
       */  
      public void run() {  
        while (fsRunning) {  
          try {  
            long now = now();  
            if (lastHeartbeatCheck + heartbeatRecheckInterval < now) {  
              heartbeatCheck();  
              lastHeartbeatCheck = now;  
            }  
            if (isAccessTokenEnabled && (lastAccessKeyUpdate + accessKeyUpdateInterval < now)) {  
              updateAccessKey();  
              lastAccessKeyUpdate = now;  
            }  
          } catch (Exception e) {  
            FSNamesystem.LOG.error(StringUtils.stringifyException(e));  
          }  
          try {  
            Thread.sleep(5000);  // 5 seconds  
          } catch (InterruptedException ie) {  
          }  
        }  
      }  
    }  

 

 

 判断dadanode死亡逻辑:NameNode节点是根据数据节点上一次发送的心跳包时间和现在的时间差是否超出heartbeatExpireInterval来判断它是否已dead。

    private boolean isDatanodeDead(DatanodeDescriptor node) {  
       return (node.getLastUpdate() <  
               (now() - heartbeatExpireInterval));  
     }  

 

 

 

 

分享到:
评论

相关推荐

    hadoop-hdfs-client-2.9.1-API文档-中文版.zip

    赠送jar包:hadoop-hdfs-client-2.9.1.jar 赠送原API文档:hadoop-hdfs-client-2.9.1-javadoc.jar 赠送源代码:hadoop-hdfs-client-2.9.1-sources.jar 包含翻译后的API文档:hadoop-hdfs-client-2.9.1-javadoc-...

    hadoop-hdfs-client-2.9.1-API文档-中英对照版.zip

    赠送jar包:hadoop-hdfs-client-2.9.1.jar; 赠送原API文档:hadoop-hdfs-client-2.9.1-javadoc.jar; 赠送源代码:hadoop-hdfs-client-2.9.1-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-client-2.9.1.pom;...

    hadoop-hdfs-2.7.3-API文档-中英对照版.zip

    赠送jar包:hadoop-hdfs-2.7.3.jar; 赠送原API文档:hadoop-hdfs-2.7.3-javadoc.jar; 赠送源代码:hadoop-hdfs-2.7.3-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-2.7.3.pom; 包含翻译后的API文档:hadoop...

    hadoop-hdfs-2.5.1-API文档-中文版.zip

    赠送jar包:hadoop-hdfs-2.5.1.jar; 赠送原API文档:hadoop-hdfs-2.5.1-javadoc.jar; 赠送源代码:hadoop-hdfs-2.5.1-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-2.5.1.pom; 包含翻译后的API文档:hadoop...

    hadoop-hdfs-2.6.5-API文档-中文版.zip

    赠送jar包:hadoop-hdfs-2.6.5.jar; 赠送原API文档:hadoop-hdfs-2.6.5-javadoc.jar; 赠送源代码:hadoop-hdfs-2.6.5-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-2.6.5.pom; 包含翻译后的API文档:hadoop...

    hadoop-hdfs-2.7.3-API文档-中文版.zip

    赠送jar包:hadoop-hdfs-2.7.3.jar; 赠送原API文档:hadoop-hdfs-2.7.3-javadoc.jar; 赠送源代码:hadoop-hdfs-2.7.3-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-2.7.3.pom; 包含翻译后的API文档:hadoop...

    hadoop-hdfs-2.5.1-API文档-中英对照版.zip

    赠送jar包:hadoop-hdfs-2.5.1.jar; 赠送原API文档:hadoop-hdfs-2.5.1-javadoc.jar; 赠送源代码:hadoop-hdfs-2.5.1-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-2.5.1.pom; 包含翻译后的API文档:hadoop...

    hadoop-hdfs-2.6.5-API文档-中英对照版.zip

    赠送jar包:hadoop-hdfs-2.6.5.jar; 赠送原API文档:hadoop-hdfs-2.6.5-javadoc.jar; 赠送源代码:hadoop-hdfs-2.6.5-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-2.6.5.pom; 包含翻译后的API文档:hadoop...

    hadoop-hdfs-2.9.1-API文档-中英对照版.zip

    赠送jar包:hadoop-hdfs-2.9.1.jar; 赠送原API文档:hadoop-hdfs-2.9.1-javadoc.jar; 赠送源代码:hadoop-hdfs-2.9.1-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-2.9.1.pom; 包含翻译后的API文档:hadoop...

    hadoop-hdfs-2.9.1-API文档-中文版.zip

    赠送jar包:hadoop-hdfs-2.9.1.jar 赠送原API文档:hadoop-hdfs-2.9.1-javadoc.jar 赠送源代码:hadoop-hdfs-2.9.1-sources.jar 包含翻译后的API文档:hadoop-hdfs-2.9.1-javadoc-API文档-中文(简体)版.zip 对应...

    hadoop最新版本3.1.1全量jar包

    hadoop-annotations-3.1.1.jar hadoop-common-3.1.1.jar hadoop-mapreduce-client-core-3.1.1.jar hadoop-yarn-api-3.1.1.jar hadoop-auth-3.1.1.jar hadoop-hdfs-3.1.1.jar hadoop-mapreduce-client-hs-3.1.1.jar ...

    hadoop源码分析-HDFS&MapReduce

    1. **NameNode与DataNode**:HDFS的核心组件包括NameNode和DataNode。NameNode作为元数据管理节点,存储文件系统的命名空间信息和文件的块映射信息。DataNode则是数据存储节点,负责存储实际的数据块。源码中,...

    Hadoop 3.x(HDFS)----【HDFS 的 API 操作】---- 代码

    Hadoop 3.x(HDFS)----【HDFS 的 API 操作】---- 代码 Hadoop 3.x(HDFS)----【HDFS 的 API 操作】---- 代码 Hadoop 3.x(HDFS)----【HDFS 的 API 操作】---- 代码 Hadoop 3.x(HDFS)----【HDFS 的 API 操作】--...

    hadoop常见问题及解决办法

    Hadoop常见问题及解决办法汇总 Hadoop是一个基于Apache的开源大数据处理框架,广泛应用于大数据处理、数据分析和机器学习等领域。然而,在使用Hadoop时,经常会遇到一些常见的问题,这些问题可能会导致Hadoop集群...

    hadoop-hdfs-2.4.1.jar

    hadoop-hdfs-2.4.1.jar

    hadoop-hdfs-2.7.3

    hadoop-hdfs-2.7.3搭建flume1.7需要用到的包,还有几个包也有提供

    hadoop-hdfs-2.7.7.jar

    flume 想要将数据输出到hdfs,必须要有hadoop相关jar包。本资源是hadoop 2.7.7版本

    hadoop-hdfs-2.2.0.jar

    hadoop-hdfs-2.2.0.jar 点击下载资源即表示您确认该资源不违反资源分享的使用条款

Global site tag (gtag.js) - Google Analytics