AWS Athena, Parquet, Glue 본문
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원)의 비용이 발생.
'Architecture > Infrastructure' 카테고리의 다른 글
| Cloudwatch Agent로 인스턴스 메트릭 수집 (0) | 2021.08.08 |
|---|---|
| 젠킨스 jdk 버전 11로 올리는 방법 (2) | 2021.08.07 |
| 젠킨스 삽질 과정에서 배운 것들 (4) | 2021.07.04 |
| 분산 환경에서 세션을 유지하는 방법 (0) | 2021.06.07 |
| WAS 전면에 Web Server를 두는 이유 (0) | 2021.06.06 |