복붙노트

[HADOOP] 손상된 HDFS 파일을 수정하는 방법

HADOOP

손상된 HDFS 파일을 수정하는 방법

누군가가 HDFS를 어떻게 수정합니까? Apache / Hadoop 웹 사이트를 살펴 보았는데 fsck 명령을 사용했는데 해결되지 않았습니다. 이전에이 문제를 겪어 본 누군가가이 문제를 해결하는 방법을 알려줄 수 있기를 바랍니다.

bin / hadoop fsck / -delete를 실행했을 때 손상되었거나 누락 된 파일이 나열되었습니다. 나는 그것을 어떻게 손상시키지 않습니까? 이것은 연습용 기계에 있기 때문에 모든 것을 날려 버릴 수 있습니다.하지만 우리가 살면 모든 것을 날려 버리므로 "수정"할 수 없으므로 지금 알아 내려고하고 있습니다.

해결법

  1. ==============================

    1.당신이 사용할 수있는

    당신이 사용할 수있는

      hdfs fsck /
    

    어떤 파일에 문제가 있는지 확인하십시오. 누락되거나 손상된 블록의 출력을 살펴 봅니다 (지금은 복제되지 않은 블록을 무시하십시오). 이 명령은 실제로 특히 대형 HDFS 파일 시스템에서 자세한 정보를 표시하므로 일반적으로 의미있는 결과물

      hdfs fsck / | egrep -v '^\.+$' | grep -v eplica
    

    복제에 대해 말하는 점과 줄만있는 줄은 무시합니다.

    손상된 파일을 찾으면

      hdfs fsck /path/to/corrupt/file -locations -blocks -files
    

    이 출력을 사용하여 블록이 어디에 살고 있는지 판별하십시오. 파일이 블록 크기보다 크면 여러 블록이있을 수 있습니다.

    보고 된 블록 번호를 사용하여 기계 또는 기계를 검색하는 datanodes 및 namenode 로그 블록이 살았던 곳. 파일 시스템 오류를 찾으십시오. 그 기계에. 누락 된 마운트 포인트, 실행중인 datanode, 파일 시스템 재 포맷 / 재 프로비저닝. 문제를 발견 할 수 있다면 그런 식으로 파일을 건강하게 유지할 수있는 온라인 블록을 가져 오십시오. 다시.

    모든 파일이 건강 해지거나 배기 될 때까지 씻어서 반복하십시오. 블록을 찾는 모든 대안.

    어떤 일이 발생했는지 판단하고 더 이상 블록을 복구 할 수 없으면, 그냥

      hdfs fs -rm /path/to/file/with/permanently/missing/blocks
    

    명령을 사용하여 HDFS 파일 시스템을 건강하게 복원하여 시작할 수 있습니다. 새로운 오류가 발생할 때이를 추적합니다.

  2. ==============================

    2.HDFS를 일반 상태로 되돌리고 데이터에 대해 크게 걱정하지 않으려는 경우

    HDFS를 일반 상태로 되돌리고 데이터에 대해 크게 걱정하지 않으려는 경우

    그러면 손상된 HDFS 블록이 나열됩니다.

    hdfs fsck -list-corruptfileblocks

    이렇게하면 손상된 HDFS 블록이 삭제됩니다.

    hdfs fsck / -delete

    sudo 사용자가 아닌 경우 sudo -u hdfs를 사용해야 할 수도 있습니다 ( "hdfs"가 sudo 사용자의 이름이라고 가정)

  3. ==============================

    3.여기에 대한 해결책은 나를 위해 일했습니다 : https://community.hortonworks.com/articles/4427/fix-under-replicated-blocks-in-hdfs-manually.html

    여기에 대한 해결책은 나를 위해 일했습니다 : https://community.hortonworks.com/articles/4427/fix-under-replicated-blocks-in-hdfs-manually.html

    su - <$hdfs_user>
    
    bash-4.1$ hdfs fsck / | grep 'Under replicated' | awk -F':' '{print $1}' >> /tmp/under_replicated_files 
    
    -bash-4.1$ for hdfsfile in `cat /tmp/under_replicated_files`; do echo "Fixing $hdfsfile :" ;  hadoop fs -setrep 3 $hdfsfile; done
    
  4. ==============================

    4.모든 데몬을 시작하고 "hadoop namenode -recover -force"명령을 실행하여 데몬을 중지하고 다시 시작하십시오. 데이터를 복구하는 데 약간의 시간이 걸릴 수 있습니다.

    모든 데몬을 시작하고 "hadoop namenode -recover -force"명령을 실행하여 데몬을 중지하고 다시 시작하십시오. 데이터를 복구하는 데 약간의 시간이 걸릴 수 있습니다.

  5. from https://stackoverflow.com/questions/19205057/how-to-fix-corrupt-hdfs-files by cc-by-sa and MIT license