AWS에서 입력 파일 크기의 ETL 수집 최적화 - 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS에서 입력 파일 크기의 ETL 수집 최적화

작성자: Apoorva Patrikar(AWS)

환경: PoC 또는 파일럿

기술: 분석, 데이터 레이크

워크로드: 오픈 소스

AWS 서비스: AWS Glue, Amazon S3

요약

이 패턴은 데이터를 처리하기 전에 파일 크기를 최적화하여 AWS Glue의 빅 데이터 및 Apache Spark 워크로드에 대한 추출, 전환, 적재(ETL) 프로세스의 수집 단계를 최적화하는 방법을 보여줍니다. 이 패턴을 사용하여 작은 파일 문제를 예방하거나 해결할 수 있습니다. 즉, 작은 파일이 많으면 파일의 전체 크기 때문에 데이터 처리 속도가 느려지는 경우입니다. 예를 들어, 각각 수백 킬로바이트에 불과한 수백 개의 파일은 AWS Glue 작업의 데이터 처리 속도를 크게 저하시킬 수 있습니다. AWS Glue는 Amazon Simple Storage Service(S3)에서 내부 목록 기능을 수행해야 하고 YARN(또 다른 리소스 협상자)은 대량의 메타데이터를 저장해야 하기 때문입니다. 데이터 처리 속도를 높이려면, 그룹화를 사용하여 ETL 작업이 입력 파일 그룹을 단일 인 메모리 파티션으로 읽을 수 있도록 만들 수 있습니다. 파티션은 크기가 작은 파일들을 자동으로 그룹화합니다. 또는 사용자 지정 코드를 사용하여 기존 파일에 배치 로직을 추가할 수 있습니다.

사전 조건 및 제한 사항

사전 조건 

아키텍처

다음 패턴은 성능에 대한 가시성을 확보하기 위해 AWS Glue 작업에서 다양한 형식의 데이터를 처리한 다음 S3 버킷에 저장하는 방법을 보여줍니다.

다양한 형식의 데이터는 AWS Glue 작업에 의해 처리된 후 S3 버킷에 저장됩니다.

이 다이어그램은 다음 워크플로를 보여줍니다.

  1. AWS Glue 작업은 CSV, JSON 및 Parquet 형식의 작은 파일을 동적 프레임으로 변환합니다. 참고: 입력 파일의 크기는 AWS Glue 작업의 성능에 가장 큰 영향을 미칩니다.

  2. AWS Glue 작업은 S3 버킷에서 내부 목록 기능을 수행합니다.

도구

  • AWS Glue는 완전 관리형 ETL 서비스입니다. 이를 통해 데이터 스토어와 데이터 스트림 간에 데이터를 안정적으로 분류, 정리, 보강하고 이동할 수 있습니다.

  • Amazon Simple Storage Service(S3)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.

에픽

작업설명필요한 기술

그룹 크기를 지정합니다.

50,000개 이상의 파일이 있는 경우 기본값으로 그룹화가 설정됩니다. 그러나 connectionOptions 파라미터에 그룹 크기를 지정하여 50,000개 미만의 파일에 대해 그룹화를 사용할 수도 있습니다. connectionOptions 파라미터는 create_dynamic_frame.from_options 방법에 있습니다.

데이터 엔지니어

그룹화 코드를 작성하십시오.

create_dynamic_frame 방법을 사용하여 동적 프레임을 만들 수 있습니다. 예:

S3bucket_node1 = glueContext.create_dynamic_frame.from_options( format_options={"multiline": False}, connection_type="s3", format="json", connection_options={ "paths": ["s3://bucket/prefix/file.json"], "recurse": True, "groupFiles": 'inPartition', "groupSize": 1048576 }, transformation_ctx="S3bucket_node1", )

참고: Amazon S3 파티션 그룹의 파일을 그룹화하는 데 groupFiles를 사용합니다. 메모리에서 읽을 그룹의 목표 크기를 설정하는 데 groupSize를 사용합니다. 바이트 단위로 groupSize를 지정합니다(1,048,576 = 1MB).

데이터 엔지니어

워크플로에 코드를 추가합니다.

AWS Glue의 작업 워크플로에 그룹화 코드를 추가합니다.

데이터 엔지니어
작업설명필요한 기술

언어 및 처리 플랫폼을 선택합니다.

사용 사례에 맞는 스크립팅 언어와 처리 플랫폼을 선택하십시오.

클라우드 아키텍트

코드를 작성합니다.

사용자 지정 로직을 작성하여 파일을 일괄 처리하십시오.

클라우드 아키텍트

워크플로에 코드를 추가합니다.

AWS Glue의 작업 워크플로에 코드를 추가합니다. 이렇게 하면 작업이 실행될 때마다 사용자 지정 로직을 적용할 수 있습니다.

데이터 엔지니어
작업설명필요한 기술

소비 패턴을 분석하세요.

작성한 데이터를 다운스트림 애플리케이션에서 어떻게 사용하는지 알아보십시오. 예를 들어 매일 데이터를 쿼리하고 지역별로만 데이터를 파티셔닝하거나 출력 파일이 매우 작은 경우 (예: 파일당 2.5KB) 사용에는 적합하지 않습니다.

DBA

쓰기 전에 데이터를 다시 파티셔닝하십시오.

처리 중 (처리 로직 기반) 및 처리 후 (사용량 기준) 의 조인 또는 쿼리를 기반으로 재분할합니다. 예를 들어, 바이트 크기를 기준으로 재분할하거나 열을 기준으로 .repartition(100000) 재분할합니다 (예:). .repartition("column_name")

데이터 엔지니어

관련 리소스

추가 정보

파일 크기 결정

파일 크기가 너무 큰지 작은지 판단할 수 있는 간단한 방법은 없습니다. 파일 크기가 처리 성능에 미치는 영향은 클러스터 구성에 따라 달라집니다. 코어 Hadoop에서는 블록 크기를 최대한 활용하려면 128MB 또는 256MB의 파일을 사용하는 것이 좋습니다.

AWS Glue의 대부분의 텍스트 파일 워크로드의 경우, 5~10 DPU 클러스터에 대해 100MB에서 1GB 사이의 파일 크기를 사용하는 것이 좋습니다. 입력 파일의 최적 크기를 파악하려면, AWS Glue 작업의 사전 처리 섹션을 모니터링한 다음 해당 작업의 CPU 사용률과 메모리 사용률을 확인하십시오.

추가 고려 사항

초기 ETL 단계의 성능에 병목 현상이 발생하는 경우, 처리하기 전에 데이터 파일을 그룹화하거나 병합하는 것을 고려해 보십시오. 파일 생성 프로세스를 완벽하게 제어할 수 있다면, 원시 데이터를 AWS로 보내기 전에 소스 시스템 자체에서 데이터 포인트를 집계하는 것이 훨씬 더 효율적일 수 있습니다.