任务目的

  • 了解心跳机制流程
  • 知晓 NameNode 感知 DataNode 掉线死亡的时长计算公式
  • 学会在配置文件中设置心跳机制
  • 掌握开启 HDFS 垃圾回收机制的方法

任务清单

  • 任务1:Hadoop 心跳机制
  • 任务2:垃圾回收机制

详细任务步骤

任务1:Hadoop 心跳机制

1.1 心跳机制简介

  现在有这样一个应用场景:

  在长连接下,有可能很长一段时间都没有数据往来。理论上说,这个连接是一直保持连接的,但是实际情况中,如果中间节点出现什么故障是难以知道的。更要命的是,有的节点(防火墙)会自动把一定时间之内没有数据交互的连接给断掉。在这个时候,就需要我们的心跳包了,用于维持长连接。

  那么,什么是心跳机制呢?

  心跳机制就是每隔几分钟发送一个固定信息给服务端,服务端收到后回复一个固定信息,如果服务端几分钟内没有收到客户端信息则视客户端断开。

  发包方:可以是客户也可以是服务端,看哪边实现方便合理。

  心跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着。事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一个空包。心跳包主要也就是用于长连接的保活和断线处理。一般的应用下,判定时间在30-40秒比较不错,如果实在要求高,可以设置在6-9秒之间。

  Hadoop心跳机制解析:

  • Hadoop 集群是 Master/Slave 结构, Master 中有 NameNode 和 ResourceManager, Slave 中有 Datanode 和 NodeManager;
  • Master 启动的时候会启动一个 IPC(Inter-Process Comunication,进程间通信) Server 服务,等待 Slave 的链接;
  • Slave 启动时,会主动链接 Master 的 IPC Server 服务,并且每隔 3 秒链接一次 Master,这个间隔时间是可以调整的,参数为 dfs.heartbeat.interval,这个每隔一段时间去链接一次的机制,我们形象地称为心跳
  • Slave 通过心跳汇报自己的信息给 Master, Master 也通过心跳给 Slave 下达命令; NameNode 通过心跳得知 DataNode 的状态,ResourceManager 通过心跳得知 NodeManager 的状态;
  • 如果 Master 长时间都没有收到 Slave 的心跳,就认为该 Slave 挂掉了!!!!!

1.2 心跳机制配置

  NameNode 感知到 DataNode 掉线死亡的时长计算:

  HDFS 默认的超时时间为 10 分钟+30 秒,这里暂且定义超时时间为 timeout。 计算公式为:

timeout = 2*dfs.namenode.heartbeat.recheck-interval+10*dfs.heartbeat.interval
  • dfs.namenode.heartbeat.recheck-interval:重新检查时长,默认为 5 分钟
  • dfs.heartbeat.interval:DataNode的心跳检测间隔时间,默认的大小为 3 秒

  我们可以查看一下 Hadoop 当前版本的 hdfs-default.xml 配置项:

参数名 描述
dfs.namenode.heartbeat.recheck-interval 300000 This time decides the interval to check for expired datanodes. With this value and dfs.heartbeat.interval, the interval of deciding the datanode is stale or not is also calculated. The unit of this configuration is millisecond.
dfs.heartbeat.interval 3 Determines datanode heartbeat interval in seconds.

  需要注意的是 hdfs-default.xml 配置文件中的 dfs.namenode.heartbeat.recheck-interval 的单位为毫秒,dfs.heartbeat.interval 的单位为

  示例:如果 dfs.namenode.heartbeat.recheck-interval 设置为 15000(毫秒), dfs.heartbeat.interval 设置为 3(秒),则总的超时时间为 60 秒。

  可以在 hdfs-site.xml 配置文件中配置这两个参数,进行验证:

<property>
<name>dfs.namenode.heartbeat.recheck-interval</name>
<value>15000</value>
</property> <property>
<name>dfs.heartbeat.interval</name>
<value>3</value>
</property>

  注意:在修改配置文件之前需要将 Hadoop 集群关闭,修改完成再重启 Hadoop 集群,此时修改的配置文件才会生效。

  重启 HDFS 集群后,此时我们关闭本机上的 DataNode 进程进行验证。关闭的命令如下:

kill -9 pid

  解析:

  • kill pid:正常停止进程,并释放进程所占用的资源
  • kill -9:表示强制杀死该进程

  在本机上执行以上命令,效果如下所示:

图1

  通过宿主机的浏览器访问 http://localhost:50070 进入 HDFS Web UI 界面,选择“Datanodes”选项查看 DataNode 列表信息,不断刷新发现 Last contact 的值不断增大:

图2

  因为我们设置的总的超时时间为 60 秒,所以 NameNode 在连续 60 秒中没有得到 DataNode 的信息才会认为当前的 DtaNode 宕机:

图3

任务2:垃圾回收机制

  何为垃圾回收?

  即开启垃圾回收站,把删除的文件首先放置在回收站中,等待配置的时间结束,进行真正的数据删除。

  默认情况下,HDFS 的垃圾回收机制是没有开启的,但是 HDFS 是可以开启垃圾回收机制的。

  启动 HDFS 上的垃圾回收机制只需要配置两个参数:

  • 第一个参数:fs.trash.interval:表示检查点被删除之前的分钟数,默认为0,单位为分钟。如果为0,则表示禁用垃圾回收功能。这里我们可以设置为1440分钟,即1天,保留在垃圾回收站的文件或文件夹超过1天后会自动删除。在生产上的 HDFS 垃圾回收机制是必须开启的,一般设置成7天或者14天,设置更长。

  • 第二个参数:fs.trash.checkpoint.interval,表示垃圾检查点之间的分钟数,默认为 0,单位为分钟。该值应该小于或等于 fs.trash.interval,如果为 0,则将该值设置为 fs.trash.interval 的值,所以生产上我们直接设置为 0。每次检查点运行时,它都会创建一个新的检查点,并删除超过 fs.trash.interval 分钟前创建的检查点。

  HDFS 垃圾回收机制配置:

  我们需要在配置文件 core-site.xml 中设置回收机制:

<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property><property>
<name>fs.trash.checkpoint.interval</name>
<value>0</value>
</property>

  注意:在修改配置文件之前需要将 Hadoop 集群关闭,修改完成再重启 Hadoop 集群,此时修改的配置文件才会生效。

  重启集群后,试着删除 HDFS 集群上的一些文件进行测试:

图4

  从上图中可以看出,删除的文件已被移动到垃圾回收站里面,默认的地址为 “/user/搭建集群的用户名/.Trash/ ”。若是想要恢复文件,直接使用 cp 或者 mv 命令即可。

图5

  存放在垃圾回收站的文件一旦超过了设置的时间,就会自动删除!!!

4.1 心跳机制和垃圾回收机制相关推荐

  1. JVM内存管理机制和垃圾回收机制

    JVM内存管理机制和垃圾回收机制 JVM结构 图片描述: java源码编译成class文件 class文件通过类加载器加载到内存 其中方法区存放的是运行时的常量.静态变量.类信息等,被所有线程共享 堆 ...

  2. python 内存回收机制_Python垃圾回收机制是什么

    不同于C/C++,像Python这样的语言是不需要程序员写代码来管理内存的,它的GC(Garbage Collection)机制 实现了自动内存管理.GC做的事情就是解放程序员的双手,找出内存中不用的 ...

  3. PHP内存管理机制与垃圾回收机制

    转载:https://www.cnblogs.com/zk0533/p/5667122.html PHP内存管理机制 var_dump(memory_get_usage()); //获取内存 $a = ...

  4. python内存管理机制错误_Python内存管理机制和垃圾回收机制的简单理解

    一.内存管理机制 1.由c开发出来的cpython 2.include / objests 3.需要下载python源码包 4.Pyobject:float PyVarObject: 5.在pytho ...

  5. jvm垃圾回收机制_JVM 垃圾回收机制之堆的分代回收

    JVM垃圾回收机制之堆的分代回收 前言 前文我们了解了Java的GC机制,对于堆中的对象,JVM采用引用计数和可达性分析两种算法来标记对象是否可以清除,本文中我们还会了解到JVM将对分成了不同的区域, ...

  6. gc机制 php7_PHP7垃圾回收机制详解(附GC处理完整流程图)

    垃圾回收: 简称GC.顾名思义,就是废物重利用的意思. 说垃圾回收机制之前,先接触一下内存泄漏. 内存泄漏: 某大神重口味充满画面感的形象解释: 大概意思就是申请了一块地儿拉了会儿屎,拉完后不收拾,那 ...

  7. php7垃圾回收机制l_PHP7 垃圾回收机制(GC)解析

    垃圾回收机制 垃圾回收机制是一种动态存储分配方案.它会自动释放程序不再需要的已分配的内存块. 自动回收内存的过程叫垃圾收集.垃圾回收机制可以让程序员不必过分关心程序内存分配,从而将更多的精力投入到业务 ...

  8. python中垃圾回收机制_python 垃圾回收机制

    首先我们要说是 以引用计数为主 标记清楚和分代回收为辅 接下来分以下几个方面解释 一 引用计数 每个对象内部都维护了一个值,该值记录这此对象被引用的次数,如果次数为0,则Python垃圾回收机制会自动 ...

  9. java对于垃圾回收机制[GC垃圾回收机制] 为什么有GC还会有内存溢出呢?

    java垃圾回收机制 来源于书本和工作中的总结. 内存泄露 如果分配出去的内存得不到释放,及时回收,就会引起系统运行速度下降,甚至导致程序瘫痪,这就是内存泄露 GC机制 java内存分配和回收 都是j ...

最新文章

  1. 免费教材丨第48期:业界大牛中文教学视频《深度学习:进阶》第25-28讲
  2. windows下cipher和efsdump工具的初步使用
  3. 【Paper】2020_GrHDP Solution for Optimal Consensus Control of Multiagent Discrete-Time Systems
  4. php ajax邮箱,PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
  5. LeetCode 1805. 字符串中不同整数的数目(哈希set)
  6. java中的single_解析java泛型(一)
  7. javascript-字典形态对象与数组形态对象
  8. python显示日历_python显示日期
  9. ruby-gems 常用命令笔记
  10. 薄荷Toolbar(ActionBar)的适配方案
  11. MySQL数据库企业级应用实践(主从复制)
  12. 微信开发者工具小技巧——快速打开微信程序API文档。
  13. 可以讨论HTML5的QQ群有哪些,QQ群有哪些种类你都知道吗?
  14. 存储容量byte 流量单位byte
  15. 使用Office2013打开文档时,弹出“正在与服务器联系以获取信息”对话框问题
  16. css3 背景模糊属性 背景滤镜 backdrop-filter
  17. 阿里云盾技术强在哪里?轻松防御DDoS、CC攻击 1
  18. 截图/贴图神器—Snipaste,下载地址
  19. Python学习(4)——数学类问题解答
  20. Java实现 幸运数字

热门文章

  1. Linq之IQueryable与IEnumerable
  2. 【django接口自动化1】环境搭建
  3. 亚马逊违反受限商品申诉模板,亚马逊二手产品申诉
  4. 【vue3.0学习】父传子 子传父
  5. 有意思的shell命令行提示符
  6. 第四回 还君明珠双泪垂,恨不相逢未嫁时
  7. The missing semester of your CS education--命令行环境
  8. 服务器的丢包率一般与什么有关
  9. 如何在海外做游戏代理?
  10. 为什么不建议使用免费的IP代理?