복붙노트

[HADOOP] 체크섬 예외는 아파치에서 읽거나 hdfs에 복사 할 때 발생합니다.

HADOOP

체크섬 예외는 아파치에서 읽거나 hdfs에 복사 할 때 발생합니다.

Apache hadoop을 사용하여 병렬 알고리즘을 구현하려고하지만 로컬 파일 시스템에서 hdfs로 파일을 전송하려고 할 때 몇 가지 문제에 직면하고 있습니다. 파일을 읽거나 전송하려고 할 때 체크섬 예외가 발생합니다.

이상한 것은 일부 파일이 성공적으로 복사되는 반면 다른 파일은 복사되지 않는다는 것입니다. (나는 2 개의 파일로 시도했는데 하나는 다른 파일보다 약간 크고 크기는 작습니다.) 필자가 한 또 다른 관찰은 Java FileSystem.getFileChecksum 메서드가 모든 경우에 null을 반환한다는 것입니다.

달성하려는 목표에 대한 약간의 배경 : 필자가 작성한 mapreduce 작업의 분산 캐시로 사용할 수 있도록 파일을 hdfs에 쓰려고합니다.

나는 또한 터미널에서 hadoop fs -copyFromLocal 명령을 시도했으며 그 결과는 자바 코드를 통해 완료되었을 때와 완전히 똑같습니다.

나는 stackoverflow에 다른 질문을 포함하여 웹 온통 봤어 그러나 문제를 해결하기 위해 관리하지 않았습니다. 제발 hadoop에 대해 아직 아주 익숙해 져서 어떤 도움을 주셔서 감사합니다.

던져진 예외를 보여주는 아래의 스택 추적을 첨부하고 있습니다. (이 경우 터미널에서 hadoop fs -copyFromLocal 명령의 결과로 스택 추적을 게시했습니다)

name@ubuntu:~/Desktop/hadoop2$ bin/hadoop fs -copyFromLocal ~/Desktop/dtlScaleData/attr.txt /tmp/hadoop-name/dfs/data/attr2.txt

13/03/15 15:02:51 INFO util.NativeCodeLoader: Loaded the native-hadoop library
    13/03/15 15:02:51 INFO fs.FSInputChecker: Found checksum error: b[0, 0]=
    org.apache.hadoop.fs.ChecksumException: Checksum error: /home/name/Desktop/dtlScaleData/attr.txt at 0
        at org.apache.hadoop.fs.ChecksumFileSystem$ChecksumFSInputChecker.readChunk(ChecksumFileSystem.java:219)
        at org.apache.hadoop.fs.FSInputChecker.readChecksumChunk(FSInputChecker.java:237)
        at org.apache.hadoop.fs.FSInputChecker.read1(FSInputChecker.java:189)
        at org.apache.hadoop.fs.FSInputChecker.read(FSInputChecker.java:158)
        at java.io.DataInputStream.read(DataInputStream.java:100)
        at org.apache.hadoop.io.IOUtils.copyBytes(IOUtils.java:68)
        at org.apache.hadoop.io.IOUtils.copyBytes(IOUtils.java:47)
        at org.apache.hadoop.io.IOUtils.copyBytes(IOUtils.java:100)
        at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:230)
        at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:176)
        at org.apache.hadoop.fs.FileSystem.copyFromLocalFile(FileSystem.java:1183)
        at org.apache.hadoop.fs.FsShell.copyFromLocal(FsShell.java:130)
        at org.apache.hadoop.fs.FsShell.run(FsShell.java:1762)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:79)
        at org.apache.hadoop.fs.FsShell.main(FsShell.java:1895)
    copyFromLocal: Checksum error: /home/name/Desktop/dtlScaleData/attr.txt at 0

해결법

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

    1.HADOOP-7199에 설명 된 버그가 발생했을 수 있습니다. copyToLocal을 사용하여 파일을 다운로드하면 동일한 디렉토리에 crc 파일도 복사되므로 파일을 수정 한 다음 copyFromLocal을 시도하면 새 파일의 체크섬을 수행하고 로컬 파일과 비교합니다 crc 파일을 읽고 설명이없는 오류 메시지와 함께 실패하십시오.

    HADOOP-7199에 설명 된 버그가 발생했을 수 있습니다. copyToLocal을 사용하여 파일을 다운로드하면 동일한 디렉토리에 crc 파일도 복사되므로 파일을 수정 한 다음 copyFromLocal을 시도하면 새 파일의 체크섬을 수행하고 로컬 파일과 비교합니다 crc 파일을 읽고 설명이없는 오류 메시지와 함께 실패하십시오.

    이 문제를 해결하려면이 crc 파일을 가지고 있는지 확인한 다음 제거하고 다시 시도하십시오.

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

    2..crc 파일을 제거하여 같은 문제가 해결되었습니다.

    .crc 파일을 제거하여 같은 문제가 해결되었습니다.

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

    3.Ok. 그래서 나는이 문제를 해결할 수 있었고, 다른 누군가가 똑같은 문제에 직면했을 때를 대비해 여기서 답을 쓰고 있습니다.

    Ok. 그래서 나는이 문제를 해결할 수 있었고, 다른 누군가가 똑같은 문제에 직면했을 때를 대비해 여기서 답을 쓰고 있습니다.

    내가 한 것은 단순히 새 파일을 만들고 문제가있는 파일의 모든 내용을 복사 한 것입니다.

    어떤 crc 파일이 생성되어 특정 파일에 첨부되어있는 것처럼 보이기 때문에 다른 파일을 시도하여 다른 crc 검사가 수행됩니다. 또 다른 이유는 다른 리소스와 충돌하는 파일 이름이 될 수있는 attr.txt라는 파일을 명명 한 것일 수 있습니다. 어쩌면 누군가가 내 대답에 대해 더 많은 것을 확장 할 수 있습니다. 기술적 인 내용에 대해 100 % 확실하지 않고 단지 내 관찰 일뿐입니다.

  4. ==============================

    4.CRC 파일은 특정 블록 데이터에 대한 일련 번호를 보유합니다. 전체 데이터는 집단 블록으로 스필 트됩니다. 각 블록은 CRC 파일과 함께 metada를 / hdfs / data / dfs / data 폴더에 저장합니다. 어떤 사람이 CRC 파일을 수정하면 실제 및 현재 CRC 일련 번호가 일치하지 않아 오류가 발생합니다 !! 이 오류를 수정하는 가장 좋은 방법은 CRC 파일과 함께 메타 데이터 파일을 덮어 쓰는 것입니다.

    CRC 파일은 특정 블록 데이터에 대한 일련 번호를 보유합니다. 전체 데이터는 집단 블록으로 스필 트됩니다. 각 블록은 CRC 파일과 함께 metada를 / hdfs / data / dfs / data 폴더에 저장합니다. 어떤 사람이 CRC 파일을 수정하면 실제 및 현재 CRC 일련 번호가 일치하지 않아 오류가 발생합니다 !! 이 오류를 수정하는 가장 좋은 방법은 CRC 파일과 함께 메타 데이터 파일을 덮어 쓰는 것입니다.

  5. ==============================

    5.나는 똑같은 문제가있어 해결책을 얻지 못했다. 이것이 처음으로 만회 한 경험 이었기 때문에 인터넷을 통한 지시를 따르지 못했습니다. 내 namenode 서식을 지정하여이 문제를 해결했습니다.

    나는 똑같은 문제가있어 해결책을 얻지 못했다. 이것이 처음으로 만회 한 경험 이었기 때문에 인터넷을 통한 지시를 따르지 못했습니다. 내 namenode 서식을 지정하여이 문제를 해결했습니다.

    hadoop namenode -format
    
  6. from https://stackoverflow.com/questions/15434709/checksum-exception-when-reading-from-or-copying-to-hdfs-in-apache-hadoop by cc-by-sa and MIT license