HDFS datanode心跳与运维中的实际案例
分布式系统的节点之间常采用心跳来维护节点的健康状态,如yarn的rm与nm之间,hdfs的nn与dn之间。
DataNode会定期(dfs.heartbeat.interval配置项配置,默认是3秒)向namenode发送心跳,
如果Namenode长时间没有接受到datanode发送的心跳,我们在50070的nn管理界面上就会看到它的lastcontact
字段越来越大,至到最后变为dead,namenode就会认为该DataNode失效。
ClientProtocol.sendHeartBeat方法就是用于心跳汇报的接口,除了携带标识DataNode身份的DataNodeRegistration
对象外,还包含数据节点上所有存储的状态,缓存的状态,正在写文件数据的连接数,读写数据使用的线程数等。
sendHeartBeat会返回一个heartBeatResponse对象,这个对象包含了Namenode向DataNode发送的名字节点指令,以及当前NameNode
的HA状态,即它是Active的还是standBy的,需要特别注意的是,在开启了HA的HDFS集群中,DataNode是需要同时向ACTIVE和standby的
NN发送心跳的,不过只有Active的NN才能向DN下发名字节点指令。
DataNode的启动过程
DataNode进程启动后与NN的交互包含三个部分,握手,注册与块汇报与缓存汇报。
DN启动时会首先通过datanodeProtocol.versionRequest获取NN的版本号以及存储信息等,然后DN会对NN的当前软件版本号和DN的当前软件版本号进行
比较,确保他们是一致的。当软件升级和NN格式化之后,这种比对一般是通不过的。
成功完成握手后,DN会通过DatanodeProtocol.register方法向NN注册,NN接收到注册请求后,会判断当前DN的配置是否属于集群,NN有白名单或黑名单与安全
配置,再确认他们之间的版本号是否一致。
注册成功后,DN就需要将本地的数据块以及缓存的数据块向上报到到NN,NN会利用这些信息重新建立内存中数据块与DN之间的对应关系。
DN启动成功后,通过心跳与NN交互,NN知道DN的活动状态以给其派发任务。NN会在DN的心跳信息中携带名字节点指令,指导DN进行数据块的复制,删除与恢复等操作。
当DN成功地添加了一个新的数据块或删除一个已有的数据块时,需要通过DatanodeProtocol.blockReeivedAndDeleted方法向NN汇报,NN接收到汇报之后,
会更新NN内存中数据块与数据节点之间的对应关系。
运维中遇到一个问题,版本CDH4,HA切换比较频繁,而且ZK检查到ACTIVE NN没有响应后,完成切换,但成为ACTIVE的NN又没有响应,又切换。
同时伴随的一个问题时,有部分DN节点启动后心跳信息一直收不到,LASTCONCAT一直变大,最后变为dead,经过查看DN的日志信息,发现
DN在scandatapool的时候卡在那里,根据我们上面的理解,是它在启动后扫描本地的数据块的时候时间过长,可能是因为内存不足,因为数据块扫描需要递归进行,
需要建立一个大的存储,然后调整Xmx内存为原来的两倍后问题解决。同时HA的频繁节换的问题也消失。
这个问题的原因是因为在一开始DN的机器维护的数据块少,消耗的内存不多,随着数据块的增多,DN需要的内存也在增加,如果内存给不到位,就容易卡死。
同样类似的问题,我们之前维护的时候发现NN切换并且NN启动的过程卡死,最后发现原因都是因为内存问题,不过NN是因为小文件过多,一亿多的inodes,造成加载过程过慢。
而且原来给的内存不够所致。这一点情况在维护的过程中一定要特别注意。
HDFS datanode心跳与运维中的实际案例的更多相关文章
- autohotkey在运维中的应用
AutoHotkey是一个自由.开源的宏生成器和自动化软件工具,它让用户能够自动执行重复性任务.AutoHotkey可以修改任何应用程序的用户界面(例如,把默认的Windows按键控制命令替 ...
- linux运维中的命令梳理(一)
在linux日常运维中,我们平时会用到很多常规的操作命令. 下面对常用命令进行梳理: 命令行日常系快捷键(不分大小写)CTRL + A 移动光标到行首CTRL + E 移动光标到行末CTRL + U ...
- DBA避坑宝典:Oracle运维中的那些事儿
对于Oracle运维中的那些事儿,我的最终目的:不是比谁更惨,而是能够从中吸取经验和教训. 从我的理解来看,我会从下面的几个方面来进行说明DBA运维中的一些事儿. 每个部分都是非常关键的,缺一不可,而 ...
- 漫谈ELK在大数据运维中的应用
漫谈ELK在大数据运维中的应用 圈子里关于大数据.云计算相关文章和讨论是越来越多,愈演愈烈.行业内企业也争前恐后,群雄逐鹿.而在大数据时代的运维挑站问题也就日渐突出,任重而道远了.众所周知,大数据平台 ...
- 安全运维中基线检查的自动化之ansible工具巧用
i春秋作家:yanzm 原文来自:安全运维中基线检查的自动化之ansible工具巧用 前几周斗哥分享了基线检查获取数据的脚本,但是在面对上百台的服务器,每台服务器上都跑一遍脚本那工作量可想而知,而且都 ...
- linux运维中的命令梳理(二)
回想起来,从事linux运维工作已近5年之久了,日常工作中会用到很多常规命令,之前简单罗列了一些命令:http://www.cnblogs.com/kevingrace/p/5985486.html今 ...
- 浅谈运维中的安全问题-FTP篇
写这一系列文章的动因很简单,在年前最后一个项目的时候在客户现场做了的几个安全加固.由于时间问题,很多东西就拿来主义没经过思考直接更改了,并未细细品味其中的原理和方法,所以特地搭建实验环境,分析下其中的 ...
- 运维中的日志切割操作梳理(Logrotate/python/shell脚本实现)
对于Linux系统安全来说,日志文件是极其重要的工具.不知为何,我发现很多运维同学的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本,大家似乎遗忘了Logrotate,争相发明自己的轮 ...
- 运维中的日志切割操作梳理(Logrotate/python/shell脚本实现)(转)
对于Linux系统安全来说,日志文件是极其重要的工具.不知为何,我发现很多运维同学的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本,大家似乎遗忘了Logrotate,争相发明自己的轮 ...
随机推荐
- 简单脱壳教程笔记(8)---手脱EZIP壳
本笔记是针对ximo早期发的脱壳基础视频教程,整理的笔记.本笔记用到的工具下载地址: http://download.csdn.net/detail/obuyiseng/9466056 EZIP壳 : ...
- Woody的Python学习笔记3
Python运算符 Python逻辑运算符 and布尔与-假设x为false.x and y返回false,否则它返回y的计算值. or 布尔或-假设x是true,它返回true.否则它返回y的计算值 ...
- jquery与javescript的区别(一)
一.找元素: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&g ...
- centos6上安装docker
yum -y install epel-releaseyum -y install docker-ioyum install device-mapper-event-libs # 必需安装这一步,否 ...
- 【BZOJ4606】[Apio2008]DNA DP
[BZOJ4606][Apio2008]DNA Description 分析如DNA序列这样的生命科学数据是计算机的一个有趣应用.从生物学的角度上说,DNA 是一种由腺嘌呤.胞嘧啶.鸟嘌呤和胸腺嘧啶这 ...
- 【BZOJ2879】[Noi2012]美食节 动态加边网络流
[BZOJ2879][Noi2012]美食节 Description CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食 ...
- js 操作对象的引用和操作实际对象的区分
JavaScript高级程序设计-第3版-中 有这么一段话: 在操作对象时,实际上是在操作对象的引用而不是实际的对象.为此,引用类型的值是按引用访问的①. ① 这种说法不严密,当复制保存着对象的某个变 ...
- bootstrap datetimepicker 日期插件超详细使用方法
日期时间选择器 目前,bootstrap有两种日历.datepicker和datetimepicker,后者是前者的拓展. Bootstrap日期和时间组件: 使用示例: 从左到右依次是十年视图.年视 ...
- Java基础之Calendar类、JNDI之XML
一.Calendar类 从JDK1.1版本开始,在处理日期和时间时,系统推荐使用Calendar类进行实现.在设计上,Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要 ...
- Struts文件下载(静态)
前言:在实际的开发中,我们可能需要动态下载和静态下载, 动态下载:例如我上传了一个文件,你想下载,那就必须动态生成下载链接,因为我服务器一开始是不知道我上传的东西是什么,放在那里, 静态下载:比如一些 ...