我是靠谱客的博主 含蓄山水,最近开发中收集的这篇文章主要介绍HDFS的心跳机制学习,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

HDFS的心跳机制学习

在HDFS的主/从架构中,NameNode 是主服务器,负责管理整个集群中的
DataNode,DataNode 是从服务器,负责执行任务。HDFS 中的通讯协议都是构建在 TCP/IP 协议之上,DataNode 使用 Datanode Protocol 接口与 NameNode 交互,而 Datanode Protocol 又是基于远程过程调用(RPC)之上的,这个 NameNode 与 DataNode 通信的过程就是 HDFS 的心跳机制。DataNode 通过心跳机制与 NameNode 保持通信, DataNode 周期性 (默认心跳间隔是3 s)地向 NameNode 发送心跳包信息,若 NameNode 在设置的时间阈值 (心跳间隔 )过后还没有检测到 DataNode 发来的心跳包信息,则 NameNode 认为该 DataNode 已经失效。DataNode与NameNode间的心跳机制如图1所示。
图1 心跳机制原理图
在这里插入图1图片描述

在 HDFS 集群启动后,集群中 DataNode 会主动向 NameNode 发送心跳包注册信息,注册信息中包括 DataNode 的名字、总容量、已用容量、剩余容量、数据传输端口等信息。注册完成后,DataNode 节点便每隔 3 秒钟向 NameNode 节点发送一次心跳信息,这个 3 秒钟的时间间隔是缺省值,可以通过修改hdfs-site.xml 配置文件中的 dfs.heartbeat.interval 属性值来修改心跳间隔时间。DataNode 类负责心跳信息的发送和来自 NameNode 执行指令的接收,通过分析 DataNode 类的源代码可知,在
DataNode 类中的 while 循环中调用 sentHeartbeat( ) 方法完成心跳信息的发送,这个 while 循环从 DataNode 服务器启动后开始运行,直到 HDFS
集群关闭或者 DataNode 节点失效时停止。关键代码如下所示:
while (should Run) {
try {
long start Time = now( );
if (startTime - lastHeartbeat > heartBeatInterval) {
last Heartbeat = startTime;
Datanode Command[ ] cmds =
namenode.send Heartbeat(dn Registration,
data.getCapacity( ),
data.getDfsUsed( ),
data.getRemaining( ),
xmitsInProgress.get( ),
getXceiverCount( ));

}
}
}
NameNode 接收到心跳包信息后,会调用 FSNamesystem 类的 handleHeartbeat( ) 方法处理心跳包信息,NameNode完成对心跳包的处理后, 会将DataNode 要进行的操作指令封装到DatanodeCommand 数组中作为 handleHeartbeat( )方法的返回值返回给 DataNode,如果不需要 DataNode 进行任何操作,则不会返回任何信息,此时 DataNode 也不会执行任何操作,然后等待 NameNode 发来的下一个指令集。
(声明:以上内容均为本人参考他人论文的内容,仅供自己学习记录使用,请勿用作商业用途。)

最后

以上就是含蓄山水为你收集整理的HDFS的心跳机制学习的全部内容,希望文章能够帮你解决HDFS的心跳机制学习所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部