피드로 돌아가기
InfoQInfoQ
Infrastructure

tmpfs와 podAffinity 설정 충돌로 인한 Spark OOM 해결 및 안정화

Article: Two Misconfigurations That Caused Spark OOM Failures on Kubernetes

Pranav Bhasker2026년 6월 3일15intermediate

Context

온프레미스에서 AKS로 마이그레이션 후 3GB 규모의 Shuffle-intensive 배치 작업에서 반복적인 Executor OOM 발생. 단순 Heap Memory 부족으로 오판하여 메모리 증설을 시도했으나, 인프라 설정 간의 상호작용으로 인한 Node 수준의 메모리 고갈이 근본 원인으로 분석됨.

Technical Solution

  • spark.kubernetes.local.dirs.tmpfs=false 설정으로 Shuffle Spill 경로를 RAM-backed에서 Disk-backed로 변경하여 Node 메모리 압박 해소
  • podAffinity(Required)를 podAntiAffinity(Preferred)로 전환하여 Executor들을 여러 Node로 분산 배치하고 단일 Node의 리소스 집중 방지
  • 1Gi로 제한되었던 tmp-volume 및 workdir 크기를 10Gi로 확장하여 실제 Production Shuffle 데이터 프로파일에 맞는 저장 공간 확보
  • Disk-backed Storage 도입을 통한 Shuffle 데이터 처리 방식의 안정성 확보 및 Kubernetes OOMKilled(Exit Code 137) 현상 제거

- Spark-on-K8s 환경에서 tmpfs 사용 시 Shuffle Spill이 Node RAM을 잠식하는지 확인 - Executor 배치 전략이 특정 Node에 과도하게 집중되어 리소스 경합을 유발하는지 검토 - Shuffle-heavy 작업의 경우 실제 데이터 프로파일 기반으로 Scratch Volume 크기 산정 - OOM 발생 시 Heap Size 조정 전 Kubernetes Event와 Node 수준의 메모리 사용량 우선 분석

원문 읽기