Hadoop-集群维护

1、HDFS Safemode

退出安全模式的办法:

(1)强制离开

进入安全模式
hdfs dfsadmin -safemode enter
离开安全模式
hdfs dfsadmin -safemode leave
sudo -u hdfs hdfs dfsadmin -safemode leave
安全模式是否开启 on:开启 off关闭
hdfs dfsadmin -safemode get

(2)修改配置

修改dfs.safemode.threshold.pct,缺省是0.999,修改为一个比较小的值

2、NameNode Blocks Health

检测缺失的BLOCK块

hdfs fsck /

输出损坏的块及其所属的文件
hdfs fsck -list-corruptfileblocks

输出文件及其对应的块信息
hdfs fsck / | egrep -v '^\.+$' | grep -v eplica

查看上方命令返回的某一个块信息
hdfs fsck /user/hive/warehouse/sdata.db/s002_lm_pm_shd/dt=20191019/000106_0.snappy -locations -blocks -files

BLOCK修复办法

BLOCK部分副本损坏

(1)hadoop会在10分钟候自动检测并修复

主动发现阶段:
当数据块损坏后,DN节点执行directoryscan操作(间隔6小时)之前,不会发现损坏。
dfs.datanode.directoryscan.interval : 600
主动回复阶段:
在DN向NN进行blockreport(10分钟)前,都不会恢复数据块; 
dfs.blockreport.intervalMsec : 600000

当NN收到blockreport才会进⾏行行恢复操作(也就是10分钟之后)

(2)手工修复(推荐使用)

hdfs debug  recoverLease  -path /user/hive/warehouse/sdata.db/s002_lm_pm_shd/dt=20191019/000106_0.snappy -retries 10

扫描二维码关注公众号,回复: 13396919 查看本文章
获取损坏文件
hdfs fsck / |grep MISSING|awk '{print $1}' | cut -d : -f 1 > missing-file.txt

delete损坏文件
cat miss-file.txt | while read line;do hdfs fsck -delete $line;done

BLOCK全副本均损坏

  • 单副本(伪分布式),特别容易出现坏块,例如内存、磁盘、网络等各方面原因均能导致该现象出现。
  • 多副本,某些或某个BLOCK的所有副本全部丢失。

通过如下两类办法解决

  • 文件不重要
# 退出安全模式
hdfs dfsadmin -safemode leave
#删除损坏(丢失)的BLOCK
hdfs fsck -delete /path  
  • 文件很重要

场景一:若数据来源于其他Hadoop集群,重新获取BLOCK并上传至缺失目录

# 源Hadoop集群,获取BLOCK
hdfs dfs -get /user/hive/warehouse/sdata.db/s002_lm_pm_shd/dt=20191019/000106_0.snappy
# 丢失BLOCK的集群
hdfs dfs -put 000106_0.snappy /user/hive/warehouse/sdata.db/s002_lm_pm_shd/dt=20191019/

场景二:若数据为Hadoop内部生成,需要重新生成数据

需要注意BLOCK若为某张HIVE表的一部分时,需要对表进行重新生成,而非仅仅对HDFS文件的操作

处理完成后再次检查BLOCK

hdfs fsck -list-corruptfileblocks
hdfs fsck /

3、NameNode Last Checkpoint

修复完损坏文件后,手动执行一次Checkpoint

sudo -u hdfs hdfs dfsadmin -safemode enter
sudo -u hdfs hdfs dfsadmin -saveNamespace
sudo -u hdfs hdfs dfsadmin -safemode leave

猜你喜欢

转载自blog.csdn.net/docsz/article/details/118386508