【大数据】HDFS DataNode节点下线

适用范围

hdfs分批次Decommission下线操作

使用背景:

在对datanode节点分批次做Decommission下线过程中,当datanode状态已经为Decommissioned状态时然后停止进程,若此时立即进行下一批次的下线,上一批次的datanode被从exclude文件中删除刷新,此时的datanode依然是会被分配读取数据的,会造成块的丢失状态。所以datanode真正被正式下线的标志是在两个namenode的日志里出现“BLOCK* removeDeadDatanode: lost heartbeat ”。

执行下线命令

登录namenode节点,分别在两台namenode做刷新

将下线的主机名加入/home/bigdata/software/hadoop/etc/hadoop/excludes文件,执行
hdfs dfsadmin -refreshNodes
将拷贝excludes到另一台namenode节点,执行
hdfs dfsadmin -refreshNodes

停datanode进程

等待50070界面Decommissioning 块搬移完成,处于Decommissioned状态。停相应的datanode进程

hadoop-daemon.sh stop datanode

并且需要关闭掉dn_alive.sh datanode保活脚本

判定下线完成标准

等待大约630秒+3min 后,namenode的日志里会出现:BLOCK* removeDeadDatanode: lost heartbeat
判断lost heartbeat是否出现(由脚本手动执行判断)
已经出现则将exclude清除,再加入下一批要下线Decommission的机器。(循环到第一步)
hdfs dfsadmin -refreshNodes

5.清空数据hdfs yarn logs目录
删除不需要的数据目录

附加:判定 lost heartbeat脚本 check_heartbeat.sh
使用方法:
将要判定的ip地址贴入 list ;然后执行
list里一定是ip地址,不能是主机名。namenode日志打出来的就是ip地址

#!/bin/sh

tstamp=`date -d '1 hour ago' +%Y-%m-%d-%H`
local_old_log=/home/bigdata/hadoop/logs/hadoop-bigdata-namenode-myhadoop1.log.${tstamp}
local_cur_log=/home/bigdata/hadoop/logs/hadoop-bigdata-namenode-myhadoop1.log
ssh_old_log=/home/bigdata/hadoop/logs/hadoop-bigdata-namenode-myhadoop2.log.${tstamp}
ssh_cur_log=/home/bigdata/hadoop/logs/hadoop-bigdata-namenode-myhadoop2.log

standby_ip=myhadoop2

for ip in `cat list`;
do
ssh ${standby_ip} -n "grep 'lost heartbeat' ${ssh_cur_log}|grep -w ${ip}" > /dev/null
ssh_cur_stat=$?
if [ ${ssh_cur_stat} -ne 0 ];then
ssh ${standby_ip} -n "grep 'lost heartbeat' ${ssh_old_log}|grep -w ${ip}" > /dev/null
ssh_cur_stat=$?
fi

grep 'lost heartbeat' ${local_cur_log}|grep -w ${ip} > /dev/null
cur_stat=$?
if [ ${cur_stat} -ne 0 ];then
grep 'lost heartbeat' ${local_old_log}|grep -w ${ip} > /dev/null
cur_stat=$?
fi

if [ ${ssh_cur_stat} -eq 0 -a ${cur_stat} -eq 0 ];then
echo "${ip}主备节点都下线完毕"
fi
if [ ${ssh_cur_stat} -ne 0 -a ${cur_stat} -ne 0 ];then
echo "${ip}主备节点都未下线完毕"
fi
if [ ${ssh_cur_stat} -ne 0 -a ${cur_stat} -eq 0 ];then
echo "${ip}当前节点下线完毕,另外节点未下线"
fi
if [ ${ssh_cur_stat} -eq 0 -a ${cur_stat} -ne 0 ];then
echo "${ip}当前节点未下线,另外节点下线完毕"
fi

done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jaeger1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值