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

최종 업데이트 날짜: 2020년 3월 16일

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

​해결 방법

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

groupSize 파라미터 값 늘리기

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

다음 예제에서 groupSize는 10485760바이트(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)

이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?