Amazon EMR에서 s3-dist-cp 작업의 "Error Code: 503 Slow Down" 문제를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 2월 10일

Amazon EMR 작업의 S3DistCp(s3-dist-cp) 작업은 Amazon Simple Storage Service(Amazon S3) 조절로 인해 실패합니다. 다음과 같은 오류 메시지가 표시됩니다.

mapreduce.Job: Task Id : attempt_xxxxxx_0012_r_000203_0, Status : FAILED Error: com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception: Slow Down (Service: Amazon
S3; Status Code: 503; Error Code: 503 Slow Down; Request ID: D27E827C847A8304; S3 Extended Request ID: XWxtDsEZ40GLEoRnSIV6+HYNP2nZiG4MQddtNDR6GMRzlBmOZQ/LXlO5zojLQiy3r9aimZEvXzo=), S3 Extended Request ID: XWxtDsEZ40GLEoRnSIV6+HYNP2nZiG4MQddtNDR6GMRzlBmOZQ/LXlO5zojLQiy3r9aimZEvXzo= at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1712)

간략한 설명

"Slow Down" 오류는 Amazon S3 요청 빈도(버킷의 접두사당 초당 3,500개의 PUT/COPY/POST/DELETE 및 5,500개의 GET/HEAD 요청)를 초과할 때 발생합니다. 이는 데이터가 Apache Hive 스타일 파티션을 사용할 때 종종 발생합니다. 예를 들어 다음 Amazon S3 경로는 동일한 접두사(/year=2019/)를 사용합니다. 즉, 요청 한도는 초당 쓰기 요청 3,500건 또는 읽기 요청 5,500건입니다.

  • s3://awsexamplebucket/year=2019/month=11/day=01/mydata.parquet
  • s3://awsexamplebucket/year=2019/month=11/day=02/mydata.parquet
  • s3://awsexamplebucket/year=2019/month=11/day=03/mydata.parquet

파티션 수를 늘리는 것이 옵션이 아닌 경우 리듀서 작업 수를 줄이거나 EMR 파일 시스템(EMRFS) 재시도 제한을 늘려 Amazon S3 조절 오류를 해결하십시오.

​해결 방법

다음 옵션 중 하나를 사용하여 s3-dist-cp 작업에서 조절 오류를 해결합니다.

감소 횟수 감소

mapreduce.job.reduces 파라미터는 작업에 대한 감소 수를 설정합니다. Amazon EMR은 클러스터의 노드 수와 클러스터의 메모리 리소스에 따라 mapreduce.job.reduces를 자동으로 설정합니다. 다음 명령을 실행하여 클러스터의 작업에 대한 기본 감소 수를 확인합니다.

$ hdfs getconf -confKey mapreduce.job.reduces

mapreduce.job.reduces에 대한 새 값을 설정하려면 다음과 비슷한 명령을 실행합니다. 이 명령은 감소 수를 10으로 설정합니다.

$ s3-dist-cp -Dmapreduce.job.reduces=10 --src s3://awsexamplebucket/data/ --dest s3://awsexamplebucket2/output/

EMRFS 재시도 제한 증가

기본적으로 EMRFS 재시도 제한은 4로 설정되어 있습니다. 다음 명령을 실행하여 클러스터의 재시도 제한을 확인합니다.

$ hdfs getconf -confKey fs.s3.maxRetries

단일 s3-dist-cp 작업에 대한 재시도 제한을 늘리려면 다음과 비슷한 명령을 실행합니다. 이 명령은 재시도 제한을 20으로 설정합니다.

$ s3-dist-cp -Dfs.s3.maxRetries=20 --src s3://awsexamplebucket/data/ --dest s3://awsexamplebucket2/output/

새 클러스터 또는 실행 중인 클러스터의 재시도 제한을 늘리려면:

[
    {
      "Classification": "emrfs-site",
      "Properties": {
        "fs.s3.maxRetries": "20"
      }
    }
]

클러스터의 재시도 제한을 늘릴 때 Spark와 Hive 애플리케이션도 새로운 제한을 사용할 수 있습니다. 더 높은 재시도 제한을 사용하는 Spark 쉘 세션의 예시는 다음과 같습니다.

spark> sc.hadoopConfiguration.set("fs.s3.maxRetries", "20")
spark> val source_df = spark.read.csv("s3://awsexamplebucket/data/")
spark> source_df.write.save("s3://awsexamplebucket2/output/")