복붙노트

[HADOOP] s3distcp를 사용하여 amazon s3에서 hdfs로 파일 복사 실패

HADOOP

s3distcp를 사용하여 amazon s3에서 hdfs로 파일 복사 실패

EMR 워크 플로를 사용하여 s3에서 hdfs로 파일을 복사하려고하는데 아래 명령을 실행하면 작업 흐름이 성공적으로 시작되지만 HDFS로 파일을 복사하려고 할 때 오류가 발생합니다. 입력 파일 권한을 설정해야합니까?

명령:

./elastic-mapreduce --jobflow j-35D6JOYEDCELA --jar s3 : //us-east-1.elasticmapreduce/libs/s3distcp/1.latest/s3distcp.jar --args '--src, s3 : // odsh / input /, - dest, hdfs : /// 사용자

산출

작업 TASKID = "task_201301310606_0001_r_000000"TASK_TYPE = "REDUCE"TASK_STATUS = "FAILED"FINISH_TIME = "1359612576612"ERROR = "java.lang.RuntimeException : Reducer 작업이 s3 : //odsh/input/GL_01112_20121019.dat 등의 파일을 복사하지 못했습니다.     com.amazon.external.elasticmapreduce.s3distcp.CopyFilesReducer.close (CopyFilesReducer.java:70)     org.apache.hadoop.mapred.ReduceTask.runOldReducer (ReduceTask.java:538)에서     org.apache.hadoop.mapred.ReduceTask.run에서 (ReduceTask.java:429)     org.apache.hadoop.mapred.Child $ 4.run (Child.java:255)     java.security.AccessController.doPrivileged (네이티브 메소드)     javax.security.auth.Subject.doAs (Subject.java:396)에서     org.apache.hadoop.security.UserGroupInformation.doAs (UserGroupInformation.java:1132)에서     org.apache.hadoop.mapred.Child.main (Child.java:249)

해결법

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

    1.나는 같은 예외를 얻고있다. CopyFilesReducer가 여러 CopyFilesRunable 인스턴스를 사용하여 S3에서 파일을 다운로드 할 때 경쟁 조건으로 인해 버그가 발생한 것 같습니다. 문제는 여러 스레드에서 동일한 temp 디렉토리를 사용하고 스레드가 완료되면 temp 디렉토리를 삭제한다는 것입니다. 따라서 한 스레드가 다른 스레드보다 먼저 완료되면 다른 스레드가 아직 사용중인 임시 디렉토리를 삭제합니다.

    나는 같은 예외를 얻고있다. CopyFilesReducer가 여러 CopyFilesRunable 인스턴스를 사용하여 S3에서 파일을 다운로드 할 때 경쟁 조건으로 인해 버그가 발생한 것 같습니다. 문제는 여러 스레드에서 동일한 temp 디렉토리를 사용하고 스레드가 완료되면 temp 디렉토리를 삭제한다는 것입니다. 따라서 한 스레드가 다른 스레드보다 먼저 완료되면 다른 스레드가 아직 사용중인 임시 디렉토리를 삭제합니다.

    문제를 AWS에보고했지만, 작업 변수에서 s3DistCp.copyfiles.mapper.numWorkers 변수를 1로 설정하여 감속기가 단일 스레드를 사용하도록하여 버그를 해결할 수 있습니다.

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

    2.나는이 같은 문제가 경쟁 조건으로 인해 발생하는 것을 본다. -Ds3DistCp.copyfiles.mapper.numWorkers = 1을 전달하면 문제를 방지하는 데 도움이됩니다.

    나는이 같은 문제가 경쟁 조건으로 인해 발생하는 것을 본다. -Ds3DistCp.copyfiles.mapper.numWorkers = 1을 전달하면 문제를 방지하는 데 도움이됩니다.

    아마존이이 버그를 수정하기를 바랍니다.

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

    3.나를 위해 일하는 사람의 수를 조정하는 것은 효과가 없었습니다. s3distcp는 항상 작은 / 중간 인스턴스에서 실패했습니다. 작업 작업 (-D mapred.child.java.opts = -Xmx1024m을 통해)의 힙 크기를 늘리면 해결됩니다.

    나를 위해 일하는 사람의 수를 조정하는 것은 효과가 없었습니다. s3distcp는 항상 작은 / 중간 인스턴스에서 실패했습니다. 작업 작업 (-D mapred.child.java.opts = -Xmx1024m을 통해)의 힙 크기를 늘리면 해결됩니다.

    사용 예 :

    hadoop jar /home/hadoop/lib/emr-s3distcp-1.0.jar 
        -D mapred.child.java.opts=-Xmx1024m 
        --src s3://source/
        --dest hdfs:///dest/ --targetSize 128
        --groupBy '.*\.([0-9]+-[0-9]+-[0-9]+)-[0-9]+\..*' 
        --outputCodec gzip
    
  4. ==============================

    4.문제는지도 축소 작업이 실패하는 것입니다. 매퍼는 완벽하게 실행되지만 감속기는 클러스터 메모리에서 병 목을 만듭니다.

    문제는지도 축소 작업이 실패하는 것입니다. 매퍼는 완벽하게 실행되지만 감속기는 클러스터 메모리에서 병 목을 만듭니다.

    이게 나를 위해 해 냈어. -Dmapreduce.job.reduces = 30 아직 실패하면 시도해라.

    즉 20으로 줄입니다. -Dmapreduce.job.reduces = 20

    쉽게 이해할 수 있도록 전체 인수를 추가하겠습니다.

    AWS 클러스터 :

    JAR 위치 : command-runner.jar

    주류 : 없음

    인수 : s3-dist-cp -Dmapreduce.job.reduces = 30 --src = hdfs : /// 사용자 / ec2-user / riskmodel-output --dest = s3 : // dev-quant-risk-model / 2019_03_30_SOM_EZ_23Factors_Constrained_CSR_Stats / 출력 - multipartUploadChunkSize = 1000

    실패시 조치 : 계속

    스크립트 파일 :

    aws --profile $ AWS_PROFILE emr add-steps --cluster-id $ CLUSTER_ID --steps 유형 = CUSTOM_JAR, Jar = 'command-runner.jar', Name = "모델 출력을 S3으로 복사", ActionOnFailure = CONTINUE, Args = [s3-dist-cp, -Dmapreduce.job.reduces = 20, - src = $ OUTPUT_BUCKET, - dest = $ S3_OUTPUT_LARGEBUCKET, - multipartUploadChunkSize = 1000]

  5. from https://stackoverflow.com/questions/14631152/copy-files-from-amazon-s3-to-hdfs-using-s3distcp-fails by cc-by-sa and MIT license