AWS Athena, Parquet, Glue 본문

AWS Athena, Parquet, Glue

JinHwan Kim 2020. 5. 6. 07:07

1. S3

- 모든 종류의 데이터를 파일 형태로 저장하는 객체 스토리지.

- 사실상 무한대의 용량을 저렴한 비용으로 사용 가능함.

- 하지만 그 자체로는 단순 파일 저장소. 데이터의 구조나 내용을 알지 못함.

- 이곳에 데이터를 무작정 쌓는 것에서 '데이터 레이크'가 시작됨.

 

2. Parquet: '어떻게' 저장할 것인가? 

- CSV, JSON과 같은 데이터 저장 포맷의 한 종류. 빅데이터 분석을 위해 태어남.

- 핵심 특징: 컬럼 기반(Columnar) 저장.

  - Row 기반 (CSV/JSON): [A1,B1,C1], [A2,B2,C2] 형태로 한 줄씩 저장.

  - Column 기반 (Parquet): [A1,A2], [B1,B2], [C1,C2] 형태로 컬럼별로 묶어서 저장.

- 장점 : 

   - 쿼리 성능 향상 (Scan 축소): SELECT C FROM table 쿼리 시, C 컬럼 데이터만 읽음.

   - A, B 컬럼은 디스크에서 아예 읽지 않으므로 I/O가 급격히 감소함.

- 비용 절감:

   - Athena 비용은 '스캔한 데이터 양'에 비례함. 필요한 컬럼만 읽으니 스캔량이 줄어들어 비용이 직접적으로 절약됨.

   - 높은 압축률: 같은 타입의 데이터끼리 모여있어 압축 효율이 극대화됨. (예: 숫자끼리, 문자열끼리). 이는 S3 저장 비용을 줄여줌.

- 메타데이터 힌트

   - Parquet 파일 구조:

       - 하나의 큰 파일은 여러 개의 로우 그룹(Row Group)으로 나뉨.

       - 각 로우 그룹은 다시 컬럼별 데이터 청크(Data Chunk)로 구성됨.

       - 파일의 끝에는 이 모든 구조를 설명하는 파일 푸터(File Footer) 메타데이터가 존재함.

   - 메타데이터 구성:

       - 파일 푸터의 메타데이터에는 각 컬럼 청크의 통계 정보 (최솟값, 최댓값, null 개수 등)가 기록됨.

       - 예: 1번 로우 그룹의 't' 컬럼은 1716300000000 ~ 1716300099999 사이의 값을 가짐

   - 작동 방식:

       - Athena가 ... WHERE t > 1716300100000 와 같은 쿼리를 받음.

       - Athena는 실제 데이터를 모두 읽기 전에, Parquet 파일의 푸터(메타데이터)만 먼저 읽음.

       - 푸터의 통계 정보를 보고, 1번 로우 그룹(최댓값 1716300099999)에는 찾는 데이터가 절대 존재할 수 없음을 미리 파악함.

       - Athena는 1번 로우 그룹 전체를 스캔 대상에서 제외하고 다음 로우 그룹으로 넘어감.

       - 이처럼, 필터 조건(Predicate)을 스토리지 레벨까지 밀어 내려(Pushdown) 불필요한 데이터 블록을 아예 읽지 않음.

3. Glue 데이터 카탈로그: 데이터의 지도

- S3에 흩어져 있는 데이터 파일들에 대한 메타데이터 저장소.

- 실제 데이터는 저장하지 않음. 오직 데이터에 대한 '설명서'만 보관함.

- 주요 정보:

    - 데이터베이스: 테이블들을 묶는 논리적 폴더.

    - 테이블: 데이터의 논리적 단위. '이 데이터는 Parquet 형식이고, S3의 이 경로에 있으며, 이런 컬럼들을 가짐'이라고 정의함.

    - 파티션: 데이터를 특정 기준(주로 날짜)으로 나눈 가상 폴더 정보. (year=2024/month=05/...).

- Athena, Glue ETL, Redshift 등 다양한 AWS 서비스가 이 카탈로그를 공유하여 데이터의 위치와 구조를 파악함.

 

4. Amazon Athena: 서버리스 쿼리 엔진

- 역할: Glue 카탈로그를 지도 삼아 S3의 데이터를 표준 SQL로 쿼리하는 서비스.

- 동작 방식:

    - 사용자가 SQL 쿼리 제출.

    - Athena는 Glue 카탈로그를 조회하여 테이블의 위치(S3 경로)와 구조(스키마), 파티션 정보를 확인.
    - WHERE year='2024' 와 같은 조건이 있다면, 파티션 정보를 이용해 해당 폴더의 파일만 스캔 대상으로 한정함 (비용 절감 핵심).

    - Parquet 파일 내에서도 SQL에 명시된 컬럼만 읽음 (비용 절감 핵심).

    - 결과를 반환.

- 특징:

    - 서버 관리가 전혀 필요 없는 서버리스(Serverless) 구조.

     - 쿼리할 때만 비용 발생. (스캔한 데이터 1TB당 약 $5)

 

5. AWS Glue ETL : 데이터 처리 공장

- Glue의 또 다른 얼굴. 카탈로그가 아닌, 실제 데이터를 처리하는 컴퓨팅 서비스.

- 역할: 대규모 데이터의 추출(Extract), 변환(Transform), 적재(Load) 작업을 수행.

- 사용 사례:
    - "S3의 Parquet 데이터를 읽어 필터링한 후, MongoDB로 저장" 과 같은 배치(Batch) 작업.
    - 데이터 정제, 특정 포맷으로의 변환, 다른 데이터 소스와의 조인 등.

- 동작 방식:

    - 내부적으로 Apache Spark라는 분산 처리 엔진을 사용.
    - 사용자가 스크립트(Python/Scala)를 작성하면, AWS가 필요한 서버(DPU)들을 자동으로 할당하여 실행 후 반납.

- 비용 상세:

    - 계산 방식: 사용한 컴퓨팅 자원(DPU)과 실행 시간에 비례해 과금. '일한 만큼' 비용을 지불하는 합리적인 구조.
    - DPU (Data Processing Unit): ETL 작업을 처리하는 컴퓨팅 파워의 단위로, 1 DPU는 약 4 vCPU + 16 GB RAM 성능을 의미함.

- 계산 공식:

    - $$ 총 비용 = (사용한\ DPU\ 수) \times (작업\ 실행\ 시간) \times (DPU\ 시간당\ 요금) $$

- 요금 및 예시 (AWS 서울 리전 기준):

    - Spark 작업의 1 DPU-시간당 요금은 약 $0.44.
    - 예시: 10 DPU의 작업자가 6분(0.1시간) 동안 작업을 수행했다면,

    - 10 DPU × 0.1 시간 × $0.44/DPU-시간 = $0.44 (약 500~600원)의 비용이 발생.

Comments