Glue 02.

Q·2024년 2월 7일
0

AWS

목록 보기
5/15

AWS Glue의 실행 모델

AWS Glue의 실행 모델은 Apache Spark 기반으로, 하나의 Driver와 다수의 Executor로 구성

  • Driver

    • 작업을 조정하고, Executor에게 작업을 할당
    • 전체 작업의 실행 계획을 관리하고, 작업의 진행 상황을 모니터링
  • Executor

    • 실제 데이터 처리 작업을 수행
    • Driver로부터 받은 작업을 병렬로 실행하며, 각각은 데이터의 일부분을 처리

Glue 환경

  • Standard Environment

    • 기본적인 Glue ETL 작업을 위한 환경으로, 대부분의 일반적인 사용 사례에 적합
    • Driver 5G, Executor 5G
  • G.1X Environment

    • 더 많은 메모리와 컴퓨팅 리소스를 제공하는 환경입니다. 대용량 데이터 처리나 복잡한 ETL 작업에 적합
    • Driver 10G, Executor 10G
  • G.2X Environment

    • G.1X보다 더 많은 리소스를 제공하는 환경으로, 매우 큰 데이터셋 또는 매우 복잡한 데이터 처리 작업에 적합
    • Driver 20G, Executor 20G

  • Glue Standard Job

    • 최소 DPU(Data Processing Unit)는 2개이며, 기본적으로 할당되는 DPU는 10개
  • 10 DPU Job 예시

    • 10DPU 일때 1개의 마스터 노드와 9개의 코어 노드로 구성된 클러스터에서 실행
    • 전체 18개의 Executor(Worker가 9개 이므로 9 X 2 = 18) 중 1개는 Driver 역할을 하고, 나머지 17개는 Executor 역할을 한다.
  • 마스터 노드와 코어 노드

    • 이들은 클러스터의 물리적 노드를 나타내며, 각각의 노드는 자체 CPU와 메모리 자원을 가지고 있다. AWS Glue에서는 이 용어를 사용하지 않을 수도 있으며, 더 일반적으로 EMR(Elastic MapReduce) 같은 다른 AWS 서비스에서 사용된다.
  • Driver와 Executor

    • Spark 실행 모델에서 Driver는 전체 작업의 흐름을 제어하고, Executor는 실제 데이터 처리를 수행한다. AWS Glue 작업은 Spark 기반으로, Glue 작업을 수행할 때 이러한 컴포넌트가 내부적으로 활용된다.

Spark 구조 + Glue

  • 기존의 DataFrame이라는 자료구조를 사용하는 spark에, 새로운 자료구조인 DynamicFrame을 Glue에서는 사용한다.
  • 이유 : AWS의 다른 서비스와의 통합을 조금 더 수월하게 수행하기 위해 재정의함

자료 구조 비교

  • DataFrames
    • '테이블' 형태를 기반으로 한 자료구조
    • 즉, 사전에 정의된 스키마가 필요하고, 각 행은 동일한 구조를 가진다.
  • DynamicFrames
    • JSON, Avro, Apache Logs 등의 semi-structured 데이터를 처리하기 위해 설계됨
    • ETL dataframe과 유사하다.
    • 따라서, 각각의 행은 제각각의 스키마를 가지는 구조를 가진다.
    • 다음과 같은 함수를 활용하면, dataframe과 dynamicframe 간 변환이 가능하다.
    • 또한, 아래의 함수를 통해, dataframe과 dynamicframe 간 변환이 가능하고, 때문에 spark의 API 역시 사용 가능하다.

성능 비교

압축에 따른 파일 처리

  • gzip은 파일이 Split이 되지 않아 파일 하나당 하나의 파티션으로 존재한다. 따라서 Job의 크기가 너무 커서 executor의 자원이 부족하여 Job이 실패

  • Bzip2 파일은 Split이 될 수 있어 Job에 메모리가 분산되어 처리

  • 기본적으로 Snappy 압축에 Parquet 포맷으로 partition해서 사용하길 권장
  • 그 외 압축 형식 중 선택해야 한다면 bzip2
  • gzip을 사용한다면 자원을 충붕히 활용할 수 있는 파일 크기로 구성되어 있는 지 확인
  • Glue에서는 대역폭이 문제가 되는 경우는 거의 없으므로 압축되지 않은 파일의 경우 상황에 따라 그대로 사용하는 것도 고려할 수 있음

병렬처리 최적화

Glue JDBC 파티션

  • JDBC를 source로 사용하는 경우 기본 동작은 하나의 테이블은 하나의 파티션으로 읽기 수행
  • Glue는 데이터 적재 후 10개 미만의 파티션으로 자동으로 분할
    • output partition과는 다른 개념, AWS Glue에서의 "output partition"은 적재되는 데이터가 결과 데이터 저장소(예를 들어 Amazon S3)에 분할되어 저장되는 방식
    • 반면에 "10개 미만의 파티션으로 자동 분할"이라는 표현은 일반적으로 입력 데이터를 읽을 때 AWS Glue가 데이터를 읽기 위해 내부적으로 생성하는 파티션을 의미

Database table 병렬 읽기 옵션

스케줄러

Python shell

  • python 2.7 지원
  • cold spin up: < 20sec, VPCs 지원, 실행 시간제한 없음
  • size: 1DPU (16GB 사용가능), 또는 1/16DPU (1GB 사용가능)
  • pricing: DPU-hour마다 $0.44
    • 최소 과금 시간 1분, 이후부터는 초 단위 과금

Glue vs EMP

  • On-Premise에서 사용하고 있는 Workload(Hive, Spark Streaming 등)를 AWS로 Migration 해야하는 경우
  • AWS glue는 Custom Configuration을 지원하지 않음
  • Glue에서 지원하는 것 보다 더 높은 CPU와 Memory를 필요로 하는 Workload의 경우

참고자료

profile
Data Engineer

0개의 댓글