Amazon EMR에서 S3DistCp 작업이 실패하는 원인인 “Error Code: 503 Slow Down” 오류를 해결하고 싶습니다.
해결 방법
데이터에 Apache Hive 스타일 파티션이 사용되고 Amazon Simple Storage Service(Amazon S3) 요청 속도를 초과하면 다음과 같은 오류가 발생합니다.
"mapreduce.Job: Task Id : attempt_######_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)"
예를 들어, 다음 Amazon S3 경로는 동일한 접두사 ** /year =2019/**를 사용합니다.
- 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
요청 할당량은 초당 쓰기 요청 3,500건 또는 읽기 요청 5,500건입니다. 접두사 내의 모든 작업은 할당량에 포함됩니다.
파티션 수를 늘릴 수 없는 경우 다음 옵션 중 하나를 사용하여 S3DistCp 작업의 스로틀링 오류를 해결하십시오.
리듀스 작업 수 줄이기
**mapreduce.job.reduce ** 파라미터는 작업에 대한 리듀스 작업 수를 설정합니다. Amazon EMR은 클러스터의 노드 수와 클러스터의 메모리 리소스를 기반으로 mapreduce.job.reduces를 자동으로 설정합니다.
다음 명령을 실행하여 클러스터의 작업에 대한 기본 리듀스 작업 수를 확인합니다.
hdfs getconf -confKey mapreduce.job.reduces
mapreduce.job.reduces에 새 값을 설정하려면 다음 명령을 실행합니다.
s3-dist-cp -Dmapreduce.job.reduces=10 --src s3://awsexamplebucket/data/ --dest s3://awsexamplebucket2/output/
참고: 10을 리듀스 작업에 설정하려는 숫자로 바꾸십시오. 또한 예시 값을 사용자 값으로 바꾸십시오.
EMRFS 재시도 할당량 늘리기
기본적으로 EMRFS 재시도 할당량은 4로 설정되어 있습니다.
다음 명령을 실행하여 클러스터의 재시도 할당량을 확인합니다.
hdfs getconf -confKey fs.s3.maxRetries
s3-dist-cp 작업의 재시도 할당량을 늘리려면 다음 명령을 실행합니다.
s3-dist-cp -Dfs.s3.maxRetries=20 --src s3://awsexamplebucket/data/ --dest s3://awsexamplebucket2/output/
참고: 20을 재시도에 대해 설정하려는 할당량으로 바꾸십시오. 또한 예시 값을 사용자 값으로 바꾸십시오.
새 클러스터의 재시도 할당량을 늘리려면 클러스터를 시작할 때 구성 객체를 추가하십시오. 실행 중인 클러스터에서 재시도 할당량을 늘리려면 구성 객체를 사용하여 인스턴스 그룹의 클러스터 구성을 재정의하십시오.
Amazon EMR 버전 5.21.0 이상에 대한 예제 구성 객체:
[
{
"Classification": "emrfs-site",
"Properties": {
"fs.s3.maxRetries": "20"
}
}
]
클러스터의 재시도 할당량을 늘리면 Apache 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/")
관련 정보
모범 사례 설계 패턴: Amazon S3 성능 최적화
Amazon EMR에서 Spark 또는 Hive 작업이 HTTP 503 "Slow Down" AmazonS3Exception 오류로 실패하는 이유는 무엇입니까?