
Spark on Kubernetes로 가자!
두줄요약
EMR·YARN 기반 Spark 분석 환경을 self-hosted Kubernetes로 이전한 과정을 소개했습니다. Glue 연동과 S3 commit 문제를 해결해 피크 시간 기준 약 45% 비용을 절감했습니다.
문제 상황
- EMR·YARN 기반 Spark 클러스터에서 spot 인스턴스 종료, autoscaling 이상, Spark SQL 서버 hang 등 운영 이슈
- 사내 Hadoop·EMR 운영 경험 부족으로 문제별 임시 대응 축적
- 매일 수백~천 종 Spark job을 처리하는 데이터 레이크·data mart 환경
구조와 흐름
- S3·Glue 기반 데이터 레이크의 테이블 적재와 data mart 계산을 Spark job으로 실행
- Airflow KubernetesPodOperator에서 Spark driver pod 실행, driver가 executor pod 생성
- spot 노드 ASG와 aws-cluster-autoscaler, node selector·toleration 기반 Spark job 배치
해결 방법
- EMR 컴퓨팅을 self-hosted Kubernetes 기반 Spark 실행 환경으로 이전
- Glue Data Catalog client JAR 및 s3:// 경로를 s3a://로 변환하는 코드 반영
- S3A Magic committer와 Spark SQL commit protocol 옵션 설정, 작은 파일 생성을 줄이기 위한 shuffle hint 적용
성능/운영 포인트
- Kubernetes 기반 autoscaling으로 Spark 워크로드에 민감하게 노드 증감
- 피크 시간 기준 약 45% 비용 절감 확인
- Spark pod 리소스 메트릭, 외부 로그 저장, observability·resource optimization·availability 개선 과제



