더 큰 파일을 출력하도록 AWS Glue ETL 작업을 구성하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 2월 3일

많은 수의 작은 파일 대신 소수의 큰 파일을 출력하도록 AWS Glue ETL 작업을 구성하려고 합니다.

해결 방법

다음 방법 중 하나 또는 둘 다를 사용하여 AWS Glue ETL 작업에 대한 출력 파일 수를 줄입니다.

groupSize 파라미터 값 늘리기

동적 프레임을 사용하고 Amazon Simple Storage Service(Amazon S3) 데이터 세트에 50,000개가 넘는 파일이 있는 경우 그룹화가 자동으로 활성화됩니다. 기본 groupSize 값은 1MB입니다. 더 적은 수의 큰 출력 파일을 생성하려면 이 값을 늘립니다. 자세한 내용은 더 큰 그룹에서 입력 파일 읽기를 참조하세요.

다음 예제에서 groupSize는 10,485,760바이트(100MB)로 설정됩니다.

dyf = glueContext.create_dynamic_frame_from_options("s3", {'paths': ["s3://awsexamplebucket/"], 'groupFiles': 'inPartition', 'groupSize': '10485760'}, format="json")

coalesce() 사용

Apache Spark .coalesce() 작업을 사용하여 Amazon S3에 쓰기 전에 Spark 출력 파티션의 수를 줄입니다. 이렇게 하면 출력 파일 수가 줄어듭니다. 다음 사항에 유의하십시오.

  • coalesce()는 Spark 데이터 셔플을 수행하므로 작업 실행 시간이 크게 늘어날 수 있습니다.
  • 적은 수의 파티션을 지정하면 작업이 실패할 수 있습니다. 예를 들어 coalesce(1)를 실행하면 Spark가 모든 데이터를 단일 파티션에 넣으려고 시도합니다. 이로 인해 디스크 공간 문제가 발생할 수 있습니다.

참고: repartition()을 사용하여 파티션 수를 줄일 수도 있습니다. 하지만 repartition()은 모든 데이터를 리셔플링합니다. coalesce() 작업은 기존 파티션을 사용하여 데이터 셔플의 수를 최소화합니다.

.coalesce() 작업을 사용하여 Spark 파티션의 수를 줄이려면 다음을 수행합니다.

1.    현재 파티션 수를 확인합니다.

dynamic_frame.getNumPartitions()

2.    coalesce()를 실행합니다. 예:

dynamic_frame_with_less_partitions=dynamic_frame.coalesce(20)

이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요합니까?