如何修复HDFS中损坏的块和复制下的块
时间:2020-01-09 10:34:31 来源:igfitidea点击:
这篇文章展示了修复HDFS中丢失或者损坏的块以及HDFS中复制块下的方法。
如何找出损坏的区块
要列出HDFS中的损坏块,可以使用以下命令。
$ hdfs fsck -list-corruptfileblocks
该命令将为我们提供丢失块的列表以及这些块所属的文件名。我们还可以使用hdfs fsck /获取有关文件系统的信息,包括损坏的块和复制的块下的信息。
如何修复损坏或者丢失的块错误
没有简单的方法可以修复损坏的块错误。如果我们可以再次复制同一文件,那是最好的做法。为此,我们可以删除带有损坏块的文件,然后再次复制该文件。
要删除块损坏的文件,请使用以下命令。
$ hdfs fsck / -delete
如果我们不想删除文件,并且想要对存储块的节点进行一些检查,则可以使用以下过程获取有关节点的信息。
使用通过运行此命令获得的文件名,hdfs fsck -list-corruptfileblocks运行以下命令以获取DataNode信息。
$ hdfs fsck /path/to/corrupt/file -locations -blocks -files
然后,我们可以检查节点是否存在任何与网络或者硬件相关的问题。
如何在复制的块下修复
要获取Hadoop中未复制的块的列表,我们可以运行以下命令。
$ hdfs fsck /
它将为我们提供文件名,块名和预期/找到的复制计数。 Hadoop框架应自动复制未完全复制的块,但我们也可以编写脚本将复制设置为所需的数量。
由于hdfs fsck /的输出采用以下格式–
/tmp/hadoop-yarn/staging/theitroad/.staging/job_1520752279140_0001/job.split: Under replicated BP-1309973318-127.0.1.1-1513945999329:blk_1073741921_1097. Target Replicas is 3 but found 1 live replica(s), 0 decommissioned replica(s), 0 decommissioning replica(s).
因此,我们可以使用以下脚本获取要在其中复制块的文件名,并将这些文件存储在临时文件中。然后迭代该临时文件,并使用-setrep命令将复制设置为所需的数字。
$ hdfs fsck / | grep 'Under replicated' | awk -F':' '{print }' >> /tmp/files $ for underrepfile in `cat /tmp/files`; do echo "Setting replication for $underrepfile"; hdfs dfs -setrep 3 $underrepfile; done