我们在7.x的redhat机器上拥有Hadoop集群版本HDP – 26。

我们运行以下命令来捕获块损坏的文件

例子1

[root@master_3 ~]# su hdfs
[hdfs@master_3 root]$ hdfs fsck -list-corruptfileblocks

blk_1097240344/localhdp/Rtrone/intercept_by_type/2018/4/10/16/2018_4_03_11_45.parquet/part-00002-be0f80a9-2c7c-4c50-b18d-db0f94a98cff.snly.parquet
blk_1097240348/localhdp/Rtrone/intkjd_country/2018/4/10/16/2018_4_03_11_45.parquet/part-00003-8600d0e2-c6b6-49b7-89cd-ef243cda4c5e.snly.parquet
The filesystem under path '/' has 2 CORRUPT files

似乎文件是:
/localhdp/Rtrone/intercept_by_type/2018/4/10/16/2018_4_03_11_45.parquet/part-00002-be0f80a9-2c7c-4c50-b18d-db0f94a98cff.snly.parquet
/localhdp/Rtrone/intkjd_country/2018/4/10/16/2018_4_03_11_45.parquet/part-00003-8600d0e2-c6b6-49b7-89cd-ef243cda4c5e.snly.parquet

在google上搜索,据我了解,处理文件中损坏的块的过程应如下所示:
  • 这将删除损坏的HDFS块:

    hdfs fsck /-删除
  • 再次运行hdfs fsck -list-corruptfileblocks以查找损坏的块是否成功删除

    hdfs fsck -list-corruptfileblocks
  • 如果损坏的块仍然存在(如示例1所示),则需要删除文件,如下所示

    hdfs fs -rm /localhdp/Rtrone/intercept_by_type/2018/4/10/16/2018_4_03_11_45.parquet/part-00002-be0f80a9-2c7c-4c50-b18d-db0f94a98cff.snly.parquet

    hdfs fs -rm /localhdp/Rtrone/intkjd_country/2018/4/10/16/2018_4_03_11_45.parquet/part-00003-8600d0e2-c6b6-49b7-89cd-ef243cda4c5e.snly.parquet

  • 我是对的还是我错过了什么?

    请让我知道我的程序需要添加或更新的内容

    最佳答案

    程序非常简单。

  • 找出损坏的块
      hdfs fsck / | egrep -v '^\.+$' | grep -v eplica
    
  • 找出与损坏的块相关的文件
     hdfs fsck /path/to/corrupt/file -locations -blocks -files
    
  • 删除损坏的文件
     hdfs fs -rm /Corrupted_File_Path
    

  • 完成这些步骤后,重新运行“hdfs fsck /”以查看丢失的块已消失。

    10-01 05:15