关于HDFS元数据块丢失解决办法

缘由:

由于失误,误将hadoop.tmp.dir指定文件夹下的filecache文件删除了,由此导致存储在hdfs集群的元数据丢失,造成hadoop集群启动之后一直处于安全模式开启状态。

//查询Hadoop集群安全模式状态
[hadoop@hadoop01 ~]$hdfs dfsadmin -safemode get

//开启Hadoop集群安全模式状态
[hadoop@hadoop01 ~]$hdfs dfsadmin -safemode enter

//关闭Hadoop集群安全模式状态
[hadoop@hadoop01 ~]$hdfs dfsadmin -safemode leave

查看原因及解决办法如下:

1 我如何知道hadoop hdfs文件系统是否有损坏的块,如何修复它?

确定这一点的最简单方法是在文件系统上运行fsck。如果已经设置了hadoop环境变量,那么应该能够使用/路径(如果不是hdfs://ip.or.hostname:50070/)。

// 执行以下命令查看是否有块缺失
[hadoop@hadoop01 ~]$  hdfs fsck /

// 或者:

[hadoop@hadoop01 ~]$hdfs fsck hdfs://ip.or.hostname:50070/

如果执行上面命令完毕之后,结果如下:

.............................Status: CORRUPT
 Total size: 3453345169348 B (Total open files size: 664 B)
 Total dirs: 15233
 Total files: 14029
 Total symlinks: 0 (Files currently being written: 8)
 Total blocks (validated): 40961 (avg. block size 84308126 B) (Total open file blocks (not validated): 8)
 ********************************
 CORRUPT FILES: 2
 MISSING BLOCKS: 2      // 丢失块数
 MISSING SIZE: 15731297 B    // 此处显示丢失块总大小
 CORRUPT BLOCKS: 2
 ********************************
 Corrupt blocks: 2
 Number of data-nodes: 12
 Number of racks: 2
FSCK ended at Fri Mar 27 XX:03:21 UTC 201X in XXX milliseconds

The filesystem under path '/' is CORRUPT

2 我如何知道哪些文件的块是损坏的?

运行以下命令可以查出哪些块丢失:(显示信息比较多)

//  运行下列命令

[hadoop@hadoop01 ~]hdfs fsck / | egrep -v '^\.+$' | grep -v replica | grep -v Replica

//或者

[hadoop@hadoop01 ~]hdfs fsck hdfs://ip.or.host:50070/ | egrep -v '^\.+$' | grep -v replica | grep -v Replica

这将列出受影响的文件,输出信息可能很多,将显示当前可能存在未充分复制块的文件(不一定是有问题的块)。输出应该包括所有受影响文件的类似内容。

//输出信息如下

/path/to/filename.fileextension: CORRUPT blockpool BP-1016133662-10.29.100.41-1415825958975 block blk_1073904305

/path/to/filename.fileextension: MISSING 1 blocks of total size 15620361 B

................

//  此处“/path/to/filename.fileextension”即为,你丢失块的文件路径

下一步是确定文件的重要性,是否可以直接删除并复制到适当的位置,或者是否需要重新生成敏感数据?

如果替换文件非常简单,那么我将采用这种方法。从hadoop集群中删除损坏的文件,此命令将损坏的文件移动到回收站中。

// 执行下面命令,根据上面查询到的块路径来删除缺失文件  注意删除文件或是文件夹 要在 -rm后添加 -r或者-f

[hadoop@hadoop01 ~]hdfs dfs -rm /path/to/filename.fileextension

//或者
[hadoop@hadoop01 ~]hdfs dfs -rm hdfs://ip.or.hostname.of.namenode:50070/path/to/filename.fileextension

或者您可以跳过回收站,直接永久删除(这可能是您想要做的)

// 执行
[hadoop@hadoop01 ~]hdfs dfs -rm -skipTrash /path/to/filename.fileextension

// 或者
[hadoop@hadoop01 ~]hdfs dfs -rm -skipTrash hdfs://ip.or.hostname:50070/path/to/filename.fileextension

3 如果损坏的文件不容易替换,我该如何修复?

以下命令或许会有帮助,但是第一步是收集关于文件位置和块的信息。

//执行
[hadoop@hadoop01 ~]hdfs fsck /path/to/filename/fileextension -locations -blocks -files

//或者
[hadoop@hadoop01 ~]hdfs fsck hdfs://ip.or.hostname.of.namenode:50070/path/to/filename/fileextension -locations -blocks -files

通过这些数据,您可以跟踪损坏所在的节点。在这些节点上,您可以查看日志并确定问题所在。如果磁盘被替换,服务器上的i/o错误,等等。如果可能的话,可以在该机器上恢复,并在线获得分区和块,这些块将报告给hadoop,文件将再次恢复完整。如果此方法不可行,那就只能另寻他法了。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

卢子墨

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

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

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

打赏作者

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

抵扣说明:

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

余额充值