如何管理hadoop集群中损坏的文件/块

时间:2018-05-01 18:46:19

标签: hadoop hdfs

我们在redhat机器版本7.x上有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上搜索,我了解处理文件中已损坏块的过程应如下所示:

  1. 这将删除损坏的HDFS块:

    hdfs fsck / -delete

  2. 再次运行hdfs fsck -list-corruptfileblocks以查明损坏的块是否已成功删除

    hdfs fsck -list-corruptfileblocks

  3. 如果损坏的块仍然存在(如示例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

  4. 我是对的还是我错过了什么?

    请告诉我有关我的程序需要添加或更新的内容

1 个答案:

答案 0 :(得分:-1)

程序很简单。跟随

  1. 找出损坏的块

      hdfs fsck / | egrep -v '^\.+$' | grep -v eplica
    
  2. 找出与损坏的块相关的文件

     hdfs fsck /path/to/corrupt/file -locations -blocks -files
    
  3. 删除损坏的文件

     hdfs fs -rm /Corrupted_File_Path
    
  4. 在这些步骤之后重新运行“hdfs fsck /”以查看丢失的块已消失。