当前位置: 首页 > article >正文

【大数据】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

http://www.kler.cn/news/353877.html

相关文章:

  • IOS每次查询数据时,当前滚动的位置会跑到底部?
  • wsl: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理的解决方法
  • Python脚本之获取Splunk数据发送到第三方UDP端口
  • java01作业说明:
  • 机器学习:情感分析的原理、应用场景及优缺点介绍
  • 对TCP/IP、HTTP协议原理的分析和总结
  • C++学习笔记----9、发现继承的技巧(一)---- 使用继承构建类(4)
  • 雷达手势识别技术
  • C++ IO多路复用 poll模型
  • 前端学习-CSS的三大特性(十七)
  • python 爬虫 入门 一、基础工具
  • 分布式数据库环境(HBase分布式数据库)的搭建与配置
  • [算法日常] 逆序对
  • 音乐播放器项目专栏介绍​
  • Linux的kafka安装部署
  • 自动化测试与敏捷开发的重要性
  • docker (desktopcompose) download
  • KVM 建黑群晖
  • HarmonyOS NEXT 应用开发实战(六、组件导航Navigation使用详解)
  • JavaWeb Servlet--09深入:注册系统03--删除用户业务