`
mafish
  • 浏览: 10257 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Hadoop 中的 NameNode 和 DataNode 之间的心跳机制

阅读更多

最近需要在 Hive 中实现 C/S 端的心跳,而心跳在 Hadoop 中被广泛使用,因此首先要清楚 Hadoop 中的心跳是如何实现的。在 Hadoop 中,NameNode 和 DataNode 之间、JobTracker 和 TaskTracker 之间都会有心跳信息,选取前者进行分析。

Hadoop 中通过心跳消息来确定 DataNodes 的有效性。对于超过时间未收到心跳消息的 DataNodes,系统认定这些 DataNodes 已经失效,将其从系统中移除。

心跳消息由 DataNode 发起,DataNode 是一个 Runnable 的对象,在系统运行的时候作为 Daemon 运行,

public static void runDatanodeDaemon(DataNode dn) throws IOException {
    if (dn != null) {
      //register datanode
      dn.register();
      dn.dataNodeThread = new Thread(dn, dnThreadName);
      dn.dataNodeThread.setDaemon(true); // needed for JUnit testing
      dn.dataNodeThread.start();
    }
  }


在 DataNode 的 run() 方法中会调用 offerservice() 方法,而在这个方法中会
定期发送心跳消息:

 

  public void offerService() throws Exception {
  ...
    while (shouldRun) {
      ...
      if (startTime - lastHeartbeat > heartBeatInterval) {
          //
          // All heartbeat messages include following info:
          // -- Datanode name
          // -- data transfer port
          // -- Total capacity
          // -- Bytes remaining
          //
          lastHeartbeat = startTime;
          DatanodeCommand[] cmds = namenode.sendHeartbeat(dnRegistration,
                                                       data.getCapacity(),
                                                       data.getDfsUsed(),
                                                       data.getRemaining(),
                                                       xmitsInProgress.get(),
                                                       getXceiverCount());
          myMetrics.heartbeats.inc(now() - startTime);
          //LOG.info("Just sent heartbeat, with name " + localName);
          if (!processCommand(cmds))
            continue;
        }
      ...
    }
  }
 

上述代码中的 namenode.sendHeartbeat() 方法是一个 对 namenode 的 RPC 调用,在 NameNode 类中的 sendHeartbeat() 方法中被处理。 该方法将最终调用 namesystem.handleHeartbeat(...) 来对心跳消息进行处理,更新心跳消息列表。

在 FSNamesystem 类中有一个 HeartbeatMonitor 子类,这是一个 Runnable 对象,用于定期的检查已经接受到的心跳消息,确定哪些 DataNode 已经失效,然后将失效的 DataNode 从系统中移除。

 

至此,一个完整的心跳消息的发起,汇总,处理的过程完成。


总结:Hadoop 中的心跳消息由 DataNode 发起,在 NameNode 中进行处理,最终由 HeartbeatMonitor 进行维护。

1
1
分享到:
评论

相关推荐

    大数据+NameNode和DataNode工作机制+Hadoop的环境搭建学习

    大数据Hadoop的环境搭建学习中需要明白什么是NameNode和DataNode,以及他们的创建和使用。只有安装和创建好NameNode和DataNode,并进行测试可以打开和运行,才完成了Hadoop的环境搭建基础的一个部分,除此之外,还有...

    hadoop2.0 2个namenode 2个datanode 部署

    在这个部署中,我们使用 Hadoop 2.0 在两个 Ubuntu 服务器上部署了双 Namenode 双 Datanode 集群,实现了高可用性和负载均衡。这种架构可以满足大规模数据存储和处理的需求,适合大数据应用场景。

    HDFS的概念-namenode和datanode.pdf

    HDFS设计的目标是处理海量数据,其架构基于两个核心节点:Namenode和Datanode,这两者共同构成了HDFS的核心运作机制。 Namenode,作为HDFS的管理者,负责维护整个文件系统的命名空间,即文件系统树以及其中的所有...

    基于hadoop的分布式存储平台的搭建与验证毕业论文.doc

    7. NameNode 和 DataNode 之间的通信机制:论文介绍了 NameNode 和 DataNode 之间的通信机制,包括心跳机制、块报告机制等。 8. Hadoop 集群的优化和维护:论文讨论了 Hadoop 集群的优化和维护,包括性能优化、故障...

    Hadoop Namenode性能诊断及优化

    然而,即使拥有如此强大的硬件配置,NameNode仍面临诸多性能问题,如CPU利用率仅达到30%,每秒处理文件操作(FileOps)和心跳(Heartbeat)的数量约为1.5万个,平均RPC处理时间3毫秒,平均RPC队列时间60毫秒等。...

    hadoop相关图片.rar

    - "namenode和datanode心跳机制.png":可能是一张图解,清楚地显示了心跳消息在Namenode和Datanode之间的传递,以及Namenode如何基于这些信息管理集群状态。 这些图片对于理解和教学Hadoop的运作机制非常有帮助,...

    HDFS体系结构(NameNode、DataNode详解)

    3. 高可用性:HDFS使用副本机制和心跳机制,确保数据的可用性和可靠性。 4. 高性能:HDFS使用分布式存储和并行处理,提高了数据处理的速度和效率。 HDFS命令 HDFS提供了多种命令来管理和维护HDFS文件系统,例如: ...

    Hadoop守护者:NameNode与DataNode故障恢复全攻略

    Hadoop是一个开源框架,由Apache软件基金会开发,用于在普通硬件集群上存储和处理大量数据。它的核心组件包括: 1. **Hadoop Distributed File System (HDFS)** - 一个分布式文件系统,设计用于在多个服务器上存储...

    NameNode职责.pptx

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

    Hadoop HDFS原理分析,技术详解

    HDFS的高可用集群配置是指在NameNode和DataNode之间实现高可用的配置,通过设置多个NameNode和DataNode来实现高可用性和可扩展性。 HDFS是Hadoop项目的一部分,是一个分布式文件管理系统,具有高容错性、可扩展性和...

    Hadoop中namenode和secondarynamenode工作机制讲解

    了解了namenode和secondarynamenode的工作机制之后,我们可以看到,在Hadoop系统中,通过这样的设计既保证了系统的高可用性,又确保了元数据的稳定性和一致性。这种机制是Hadoop处理大数据时能够保持高效和稳定运行...

    hadoop集群部署

    "Hadoop 集群部署" Hadoop 是一种基于分布式计算的开源框架,主要用于...部署 Hadoop 集群需要准备好虚拟机环境、虚拟机节点、hosts 文件、Hadoop 软件包、namenode、datanode 等组件,并进行相应的配置和启动操作。

    hadoop常见问题及解决办法

    Hadoop是一个基于Apache的开源大数据处理框架,广泛应用于大数据处理、数据分析和机器学习等领域。然而,在使用Hadoop时,经常会遇到一些常见的问题,这些问题可能会导致Hadoop集群无法正常工作或者性能下降。因此,...

    hadoop集群配置范例及问题总结.pdf

    Hadoop集群需要NameNode和DataNode两个角色,分别负责管理HDFS文件系统和数据存储。NameNode负责管理文件系统的命名空间,DataNode负责存储数据。推荐将NameNode和JobTracker设置在同一台机器上,以提高性能。 四、...

    Hadoop datanode重新加载失败无法启动解决.docx

    namespaceID是Hadoop分布式安装中非常重要的一个概念,它是namenode和datanode之间的关联关键。如果namespaceID不一致,datanode将无法正常加载。这也是datanode加载失败的主要原因之一。 知识点3: 解决datanode...

    Hadoop datanode启动失败:Hadoop安装目录权限的问题

    这一问题通常表现为,在尝试启动Hadoop集群时,Datanode无法正常启动,并且在访问NameNode的Web界面时发现缺少Datanode的相关信息。这种情况会严重影响Hadoop集群的可用性和数据处理能力。 #### 二、原因分析 根据...

    大数据技术课程设计.docx

    任务一:完成Hadoop集群部署前环境的准备工作 1.1 虚拟机环境准备 1. 安装虚拟机 2. 克隆虚拟机 3. 修改网络配置 4. 修改主机名和映射 5. 关闭防火墙 1.2 安装JDK 1.3 安装Hadoop 1.4 集群配置 1. 编写集群分发脚本...

Global site tag (gtag.js) - Google Analytics