HDFS missing block 问题处理记录

问题&环境说明

  • 问题

    1
    2
    IDC机房突然异常断电,导致机器大规模断电重启,并出现IDC内网网络故障
    部分物理机无法启动,导致HDFS blokc 丢失
  • 环境信息

    1
    2
    3
    4
    5
    Hadoop Version:  2.6.0-cdh5.8.4 
    HDFS fediration: 3组 ,分别是:nameservice1 / nfjd-prod-ns3 / nfjd-prod-ns2
    Ranger + Kerberos 进行ACL和身份认证
    IDC 自建私有云 , 物理机数量 1000+, 数据总量60P左右

排查问题

  • nanmenode 提示miss block

  • 获取missing block 列表

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    sudo su - hdfs 

    # 检查身份认证信息
    klist

    # 列出缺失的块
    hdfs fsck hdfs://nameservice1/ -list-corruptfileblocks >> 1215-miss-block.txt

    hdfs fsck hdfs://nfjd-prod-ns3/ -list-corruptfileblocks >> 1215-miss-block.txt

    hdfs fsck hdfs://nfjd-prod-ns2/ -list-corruptfileblocks >> 1215-miss-block.txt

  • 查看内容 head 1215-miss-block.txt

    1
    2
    3
    blk_12885018324  /user/hive/warehouse/....
    blk_8321645613 /user/hive/warehouse/....
    ....
  • 统计涉及的表和目录 提取目录的前7层,涉及的hive库和table

    1
    cat 1215-miss-block.txt |  awk  '{print $2}' | awk -F'/' '{ print $1"/"$2"/"$3"/"$4"/"$5"/"$6"/"$7 }' | sort | uniq 

后续

对于缺失的块,如何修复:

1
2
机器可以恢复  ---> ,修复机器,并启动datanode
机器无法恢复,强制删除相关文件(需业务自行评估风险和确认)