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: 원문 보기