AI Briefing

점점 커지는 RDB Table, S3로 귀양 보내고 Athena로 불러오기 - feat. Optimization with Spark Bucketing

·2023.06.08 09:00

핵심 내용

뱅크샐러드가 S3 데이터 조회 시 Athena 비용 급증을 Bucketing과 Partition 최적화로 해결해 비용을 약 700배 줄였다.

자세히 보기

뱅크샐러드 Core Infra 팀은 신용올리기 서비스의 마이데이터 로그가 MySQL에 누적되어 저장 비용이 증가하자, 데이터를 S3로 이동하고 Athena로 조회하는 구조로 전환했다. 그러나 기존 Partition(dt, hour) 구조에서는 특정 user id 조회 시 파일 위치 파악이 불가능해 1년 치 모든 S3 Object를 호출하게 되어 Athena 비용이 급증하는 문제가 발생했다.

Bucketing과 Partition 구조 최적화

비용 문제를 해결하기 위해 Bucketing 적용과 Partition 구조 변경을 진행했다. Bucketing은 user id 등 카디널리티가 높은 컬럼을 키로 사용하여 해시 계산으로 파일 위치를 파악함으로써 필요한 파일만 읽게 한다. 또한 hour 파티션을 제거하고 dt만 유지하는 Partition 구조 변경을 통해 Object 호출 수를 최소화했다. 이를 통해 Athena 데이터 호출 비용은 기존 대비 약 700배 감소했다.

Spark Bucketing 구현 및 호환성 이슈

Spark Bucketing은 Athena(Presto 기반)와 호환성 이슈가 있어 CTAS(CREATE TABLE AS) 방식을 활용해 테이블을 생성하고 파티션을 설정하는 우회 과정을 거쳤다. 또한 Spark Bucketing 파일 생성 시 Executor마다 파일이 생성되어 파일 수가 폭발적으로 증가하는 문제를 해결하기 위해, Bucketing Key와 Bucket 수 기준으로 미리 repartition을 수행하여 Bucket당 파일 수를 1개로 줄였다. 이는 단일 Partition 처리가 가능한 메모리 할당을 필요로 한다.

비용 절감 효과 및 향후 과제

최종적으로 MySQL 데이터 저장 비용 절감액이 늘어난 Athena 호출 비용의 약 3배에 달해 전체적인 비용 효율성을 확보했다. 다만 Athena가 동일한 파일을 여러 번 호출하는 현상이 관찰되어 추가 최적화 여지가 있으며, Bucketing 특성을 고려한 쿼리 플랜 최적화와 엔지니어/분석가를 위한 가이드라인 정립이 향후 과제로 남아 있다.

이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.

AI 처리 방식을 확인하거나, 요약 오류와 출처 표기 문제, 삭제 요청을 문의 · 건의로 알려주세요.