Implementing Apache YuniKorn on EMR on EKS at Halodoc
Author: Firda Ramadhan Putra | Source: Halodoc Engineering Blog | Published: 2026-02-27
한 줄 요약
Kubernetes 기본 스케줄러의 조정 부재로 발생하는 Spark 데드락, 리소스 경쟁, 비용 급등을 Apache YuniKorn의 gang scheduling, 계층 큐, bin packing으로 해결한다.
핵심 주장/내용
- 문제: K8s 기본 스케줄러가 Spark Driver/Executor를 독립 Pod로 처리 → 부분 스케줄링 데드락, 멀티테넌시 리소스 쟁탈, Karpenter의 과도한 스케일아웃
- Gang Scheduling: Driver+Executor를 단일 스케줄링 그룹으로 처리, all-or-nothing 결정으로 부분 실행 제거
- Hierarchical Queues: 워크로드별 리소스 상한 설정 → 큐 한도 초과 시 대기(확장 대신 통제된 경합)
- Bin Packing: 기존 노드를 96%+ 활용 후 스케일아웃, 리소스 파편화 감소
- 폴백 메커니즘: 큐 최대 용량 초과 요청은 기본 K8s 스케줄러로 자동 리다이렉트
주요 수치 / 사실
- 노드 메모리 활용률 90%+, CPU 88%
- EC2 비용 ~10% 절감
- Spot 인스턴스 사용 확대로 추가 최적화
관련 위키
Source: 원문 보기