返回顶部
首页 > 资讯 > 前端开发 > node.js >DataNode是怎么向NameNode发送心跳得
  • 278
分享到

DataNode是怎么向NameNode发送心跳得

2024-04-02 19:04:59 278人浏览 安东尼
摘要

这篇文章主要讲解了“Datanode是怎么向NameNode发送心跳得”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“DataNode是怎么向NameNode

这篇文章主要讲解了“Datanode是怎么向NameNode发送心跳得”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“DataNode是怎么向NameNode发送心跳得”吧!

一、分布式系统中的心跳技术

心跳是分布式技术中常用的技术手段。心跳,顾名思义,就是以固定的频率向其他节点汇报当前节点状态的方式。收到心跳,一般可以认为发送心跳的这个节点在当前的网络拓扑中是良好的。

当然,心跳汇报时,一般也会携带一些附加的状态、元数据信息、当前节点的信息,以便其他节点管理。

心跳有两种方式:

  • 单向的 heartbeat;

  • 交互的 ping-pong;

第一种方式下,target 进程需要定时给 detector 发送消息,告知自己的存活性。而 detector 无需给 target  回复任何消息,只是每隔一段时间去检测 target 进程有没有汇报。

第二种方式更为常见,比如我们的 Redis 就是采用这种方式:

detector -> target: Are you ok? target -> detector: Yeah, pretty Good.

Detector 发起检测,如果 target 连续 N 次不回复消息,那么 detector 就认为其处于 non-active 状态。

那么常用的心跳检测机制有哪些:

(1)传统的周期检测心跳机制

其检测方法很粗暴:设定一个超时时间 T,只要在 T 之内没有收到对方的心跳包便可认为对方宕机,方法简单有效,使用比较广泛。

所以这个方法的重点就在于这个超时时间 T  的设置,设置的太短了,有可能会因为当前网络阻塞导致误判,让这个节点下线,产生其他不必要的后果;设置的太长,会导致判断“迟缓”,所以需要综合各种情况来权衡和设定。

hdfs 就是使用的这种心跳机制。

(2)累积失效检测机制

随着网路负载的加大,Server 心跳的接收时间可能会大于上限值 T;但当网络压力减少时,心跳接收时间又会小于 T ,如果用一成不变的T  来反映心跳状况,则会造成判断”迟缓“或误判。这个时候我们可以计算心跳延迟的概率,用这个概率来判断是否发生故障,提高准确性。

二、DataNode 是如何向 NameNode 发送心跳的

我们从 hadoop 源码看 DataNode 是如何发送心跳的

1、从 DataNode 类的 main 方法开始

DataNode是怎么向NameNode发送心跳得

2、创建 DataNode

DataNode是怎么向NameNode发送心跳得

3、实例化 DataNode

DataNode是怎么向NameNode发送心跳得

4、创建实例

DataNode是怎么向NameNode发送心跳得

5、 new 了 DataNode

DataNode是怎么向NameNode发送心跳得

6、 这个方法构造函数有点长,拉到最下面

DataNode是怎么向NameNode发送心跳得

7、然后来到这个方法里

这个方法表面看起来是刷新 NameNode,实际上里面做了两件事情,把自己注册到 NameNode 上,另外一件事情是向 NameNode  定时发送心跳。

DataNode是怎么向NameNode发送心跳得

8、点进去,现在是在 BlockPoolManager 里面

DataNode是怎么向NameNode发送心跳得

9、再来到这个方法里

DataNode是怎么向NameNode发送心跳得

10、发现它在遍历这个 BPOfferService

DataNode是怎么向NameNode发送心跳得

这里大致说明一下 offerServices 是个什么数据结构

用一张图来表示吧

DataNode是怎么向NameNode发送心跳得

那个 offerServices 其实装的就是最左边的 BPOfferService。

每个 BPOfferService 里面有两个 BpServiceActor,每个 BpServiceActor 对应一个 NameNode。

如果是上图中的高可用,那么一主一备两个 NameNode,分别对应一个 BpServiceActor。

所以遍历 offerService 其实就是在遍历整个集群每个联邦的每个 NameNode 节点。

11、开始遍历(当前类:BpOfferService)

DataNode是怎么向NameNode发送心跳得

12、线程 start(当前类:BPServiceActor)

DataNode是怎么向NameNode发送心跳得

再点进去已经是 Thread 的方法了,可见它其实是个线程。

那我们应该看这个类的 run 方法。

13、线程的运行内容

run 方法的上半部分是往 NameNode 注册,下半部分是发送心跳

DataNode是怎么向NameNode发送心跳得

14、发送心跳

DataNode是怎么向NameNode发送心跳得

可以看到这是一个 while 循环,每隔一段时间(dnConf.heartBeatInterval = 3秒)就会执行一次

可以看到 DataNode 的心跳就是采用了周期性检测机制,每隔 3 s ,往所有的 NameNode 发送心跳。

15、再点进去,已经是 NameNode 的 proxy 代理方法了。

DataNode是怎么向NameNode发送心跳得

因为它是靠 rpc 通信的,此时 DataNode 是客户端,NameNode 是服务端。

这个时候,我们应该看 NameNodeRpcServer 方法,具体的实现是在这个方法里的。

16、看服务端的处理,此时我们在 NameNodeRpcServer 类中

DataNode是怎么向NameNode发送心跳得

这个方法里的具体就不看了,(其实也很重要的的)。

大致就是把 DataNode 心跳包的基本信息(比如本节点的存储容量信息等)更新到 NameNode 对应的结构中。

并且更新上一次心跳时间,以便下次判断 DataNode 是否心跳超时。

其实心跳就是这么朴素了。

最后,NameNode 会在心跳的响应中,告诉 DataNode 应该做些什么事情,比如把本节点的 Block 备份到其他节点上去。

也就是说,NameNode 本身不会和 DataNode 通信,而是在心跳信息中告诉 DataNode 该做什么。

感谢各位的阅读,以上就是“DataNode是怎么向NameNode发送心跳得”的内容了,经过本文的学习后,相信大家对DataNode是怎么向NameNode发送心跳得这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: DataNode是怎么向NameNode发送心跳得

本文链接: https://lsjlt.com/news/83386.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • DataNode是怎么向NameNode发送心跳得
    这篇文章主要讲解了“DataNode是怎么向NameNode发送心跳得”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“DataNode是怎么向NameNode...
    99+
    2024-04-02
  • seam+jsf开发心得是什么
    这期内容当中小编将会给大家带来有关seam+jsf开发心得是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Seam全称是Jboss Seam,是一个Java EE 5框架。JSF是一种标准的 J2EE...
    99+
    2023-06-17
  • 向腾讯云服务器发送文件怎么发送
    如果您想向腾讯云服务器发送文件,您可以按照以下步骤操作: 打开腾讯云服务器的客户端(例如 ChatGPT Client)。 选择您要发送的文件,并输入接收方的 URL。 如果您需要向接收方发送消息,则可以在文件名称下方输入消息文本。 点...
    99+
    2023-10-27
    腾讯 服务器 文件
  • 向腾讯云服务器发送文件怎么发送不了
    其次,你需要检查你的邮箱是否开启SMTP服务,确保你使用的邮箱是开启SMTP服务的。你可以在腾讯通RTX管理器中打开配置向导-服务器允许状态,停止所有服务,然后在服务停止后,打开腾讯通安装目录内的设置文件,检查邮箱是否开启SMTP服务。 ...
    99+
    2023-10-27
    腾讯 服务器 文件
  • Ajax怎么向服务器发送请求
    本文小编为大家详细介绍“Ajax怎么向服务器发送请求”,内容详细,步骤清晰,细节处理妥当,希望这篇“Ajax怎么向服务器发送请求”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 ...
    99+
    2024-04-02
  • 向腾讯云服务器发送文件怎么发
    如果您想向腾讯云服务器发送文件,可以按照以下步骤操作: 在本地计算机上打开腾讯云服务器,并登录账户。 在“工具”菜单中选择“文件共享”。 在弹出的对话框中选择“创建新的工作簿”。 在弹出的新工作簿对话框中,填写您要在服务器上传送的文件的...
    99+
    2023-10-27
    腾讯 服务器 文件
  • 使用pbdigg的心得感受是怎么样的
    使用pbdigg的心得感受是怎么样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。接触PBdIGG到今天已经是第六天了,有很多心得分享给大家,首先我觉得它是一款非常y优秀的ph...
    99+
    2023-06-12
  • python向串口发送指令的方法是什么
    要向串口发送指令,可以使用Python的`pyserial`库。下面是一个简单的示例代码,演示如何打开串口并发送指令:```pyth...
    99+
    2023-10-10
    python
  • qt子线程怎么向主线程发送信号
    在Qt中,子线程不能直接与主线程通信,因为Qt是基于事件循环机制的。一般情况下,需要借助信号和槽机制来实现子线程向主线程发送信号。以...
    99+
    2023-09-13
    qt
  • 向腾讯云服务器发送文件怎么发不出去
    确认网络连接是否稳定:当您在向腾讯云服务器发送文件时,您需要确保您的网络连接稳定,否则可能会导致文件无法正常发送。如果您的网络连接不稳定,您可以尝试使用其他网络连接来尝试发送文件。 检查网络配置是否正确:如果您的网络配置不正确,可能会导致...
    99+
    2023-10-27
    腾讯 不出去 服务器
  • kafka怎么判断是否发送成功
    在 Kafka 中,生产者发送消息后,可以通过以下几种方式判断消息是否发送成功: 同步发送方式:生产者调用 send() 方法后,...
    99+
    2023-10-20
    kafka
  • 怎么通过HTML的表单向服务器发送数据
    本篇内容介绍了“怎么通过HTML的表单向服务器发送数据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!简单的表单实例:GET方法以下是一个通过...
    99+
    2023-06-08
  • 向腾讯云服务器发送文件失败怎么办
    1. 检查网络连接 如果向腾讯云服务器发送文件失败,首先要检查您的网络连接是否正常。确保您的计算机或设备已连接到互联网,并且网络连接稳定。您可以尝试访问其他网站或使用其他网络应用程序来确认网络连接是否正常。 2. 检查服务器配置 确保您的...
    99+
    2023-10-27
    腾讯 服务器 文件
  • Linux怎么在关机前向用户发送自定义消息
    今天小编给大家分享一下Linux怎么在关机前向用户发送自定义消息的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。作为一名系统管...
    99+
    2023-06-27
  • SpringBoot怎么整合WebSocket实现后端向前端发送消息
    这篇文章主要讲解了“SpringBoot怎么整合WebSocket实现后端向前端发送消息”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot怎么整合WebSocket实现后端向...
    99+
    2023-07-05
  • jQuery怎么通过Ajax向PHP服务端发送请求并返回JSON数据
    这篇文章主要介绍“jQuery怎么通过Ajax向PHP服务端发送请求并返回JSON数据”,在日常操作中,相信很多人在jQuery怎么通过Ajax向PHP服务端发送请求并返回JSON数据问题上存在疑惑,小编查...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作