HDFS 块损坏和恢复

HDFS 块损坏和恢复

# 先建个文件
echo 'The NameNode and DataNode are pieces of software designed to run on commodity machines. These machines typically run a GNU/Linux operating system (OS). HDFS is built using the Java language; any machine that supports Java can run the NameNode or the DataNode software. Usage of the highly portable Java language means that HDFS can be deployed on a wide range of machines. A typical deployment has a dedicated machine that runs only the NameNode software. Each of the other machines in the cluster runs one instance of the DataNode software. The architecture does not preclude running multiple DataNodes on the same machine but in a real deployment that is rarely the case.' > test.log

# 新建个目录
hdfs dfs -mkdir -p /recovery/test

# 上传文件
hdfs dfs -put ./test.log  /recovery/test/

#校验健康状态
hdfs fsck /
#############分割线#############
...................................Status: HEALTHY
 Total size:	215628 B
 Total dirs:	20
 Total files:	35
 Total symlinks:		0
 Total blocks (validated):	33 (avg. block size 6534 B)
 Minimally replicated blocks:	33 (100.0 %)
 Over-replicated blocks:	0 (0.0 %)
 Under-replicated blocks:	0 (0.0 %)
 Mis-replicated blocks:		0 (0.0 %)
 Default replication factor:	1
 Average block replication:	1.0
 Corrupt blocks:		0
 Missing replicas:		0 (0.0 %)
 Number of data-nodes:		1
 Number of racks:		1
FSCK ended at Sat Jul 06 17:46:49 EDT 2019 in 183 milliseconds
The filesystem under path '/' is HEALTHY
#############分割线 end#############

# 查看test.log block位置信息,BP-216010136-127.0.0.1-1561903454527:blk_1073741865_1041
hdfs fsck /recover/test/test.log -files -blocks -locations

# 删除一个block的副本
cd /tmp/hadoop-hadoop/dfs/data/current/BP-216010136-127.0.0.1-1561903454527/current/finalized/subdir0/subdir0
rm -rf blk_1073741862 blk_1073741862_1038.meta

# 再检查
hdfs fsck /
#############分割线#############
...................................Status: HEALTHY
...................................Status: HEALTHY
 Total size:	215628 B
 Total dirs:	20
 Total files:	35
 Total symlinks:		0
 Total blocks (validated):	33 (avg. block size 6534 B)
 Minimally replicated blocks:	33 (100.0 %)
 Over-replicated blocks:	0 (0.0 %)
 Under-replicated blocks:	0 (0.0 %)
 Mis-replicated blocks:		0 (0.0 %)
 Default replication factor:	1
 Average block replication:	1.0
 Corrupt blocks:		0
 Missing replicas:		0 (0.0 %)
 Number of data-nodes:		1
 Number of racks:		1
FSCK ended at Sun Jul 07 14:46:21 EDT 2019 in 138 milliseconds
The filesystem under path '/' is HEALTHY
#############分割线 end#############

# 额............好吧,啥也没变,听说伪分布式是没法恢复的,先就这样把,等到集群再说,先记录一下
# end

hdfs debug recoverLease -path /recovery/test/test.log -retries 10 recoverLease SUCCEEDED on /recovery/test/test.log

转:若泽大数据-生产HDFS Block损坏恢复最佳实践

HDFS 中,`hdfs fsck` 工具是一个非常有用的诊断修复工具。当遇到损坏或丢失的时,可以使用 `fsck` 来帮助定位问题,并结合其他命令手工修复这些问题。以下是关于如何利用 `hdfs fsck` 进行的手工修复步骤介绍。 ### 使用 `hdfs fsck` 定位问题 1. **检查文件系统的完整性**: 首先需要确认哪些路径下存在坏或丢失。你可以通过运行以下命令来扫描整个文件系统: ```bash hdfs fsck / -files -blocks -locations > fsck_report.txt ``` 上述命令将生成一个包含所有文件及其对应详细信息的日志文件 (`fsck_report.txt`),其中包含了每个文件的状态(包括是否有丢失)、编号、所在位置等关键信息。 2. **查找有问题的文件**: 分析刚才保存的日志文件,特别是那些标注了“CORRUPT”、“MISSING”的条目,确定具体的受影响文件名及对应的block ID。 3. **获取更多信息**: 对于每一个存在问题的,可以通过 `-list-corruptfileblocks` 参数进一步获得其确切的位置其他相关信息: ```bash hdfs fsck / -list-corruptfileblocks ``` ### 手工修复缺失或损坏 #### 方案一:尝试从其它副本恢复 4. **验证是否有多余副本可用**: 根据前面收集的信息,如果某个丢失还存在于其他的 DataNode 节点上,则可以直接让 NameNode 将该重新分配给新的目标节点: ```bash hdfs dfsadmin -recoverCorruptBlocks <path_to_file> ``` 5. **等待自动修复完成**: 提交修复请求后,Hadoop 会自动处理并将复制到合适的节点上去。这个过程可能会花费一些时间取决于集群大小个人设置。 #### 方案二:手动删除并重传数据 6. **移除不可用的记录**: 若确实找不到剩余的有效副本,则只能选择把相关的元数据清理干净再另行补充数据源。注意此步需谨慎操作以免误删重要资料! ```bash hdfs debug recoverLease -path <corrupted_filepath> [-namenodeRpcAddress <nn_address>] ``` 7. **重新上传正确的数据集**: 清理完旧有的错误引用之后就可以按照标准流程再次上传完整的正确版文件至相应目录内替换原有内容了。 8. **验证修复结果**: 最终别忘了再次执行一次全面性的 `hdfs fsck` 测试以确保所有的更改都已生效并且没有残留下来的问题。 --- 总结来说,虽然HDFS自带了一定程度上的自动化纠错能力,但在实际应用中难免还是会碰到各种复杂状况下的数据一致性挑战。掌握好 `hdfs fsck` 的基本用法以及了解它的辅助选项能够让我们更好地应对这些突发难题。如果你还需要更多有关维护HDFS稳定运行的经验分享,请参考下方提供的相关问题列表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值