Part 4: 성능 및 비용 튜닝 퀴즈
Spark 4.2.0 / Karpenter 1.14 기준 · September 2026.
1. 셔플 작업은 항상 R 계열·NVMe가 가장 빠른가요?
정답 보기
아닙니다. Task/stage 시간, spill, shuffle fetch wait, skew, CPU·메모리·디스크·네트워크 병목을 측정하고 현재 용량·성공한 작업당 비용으로 비교합니다. 다른 instance 계열이나 EBS가 부적합하다고 단정하지 않습니다.
2. Graviton 평가 시 필요한 것은?
정답 보기
Spark 이미지와 JNI·codec·BLAS·Python wheel·plugin의 arm64 호환성을 확인하고 대표 작업을 측정합니다. 이미 검증된 multi-arch 이미지가 있으면 직접 빌드가 항상 필요한 것은 아닙니다.
3. 마운트되지 않은 nvme 디스크를 포맷해도 되나요?
정답 보기
아닙니다. Nitro의 EBS도 NVMe로 보이고 마운트되지 않은 디스크에 데이터나 파티션이 있을 수 있습니다. 이름·mount 여부만으로 instance store를 판별하지 않습니다.
4. AL2023의 instanceStorePolicy: RAID0는 무엇을 구성하나요?
정답 보기
Karpenter가 NodeConfig로 instance-store RAID0와 kubelet/containerd의 ephemeral storage 사용을 구성하고 allocatable을 반영합니다. RAID0은 백업이 아니며 IAM·AMI·subnet 등의 완전한 NodeClass 설정은 별도로 필요합니다.
5. 이 장에서 hostPath 없이 NVMe scratch를 사용하는 이유는?
정답 보기
준비한 NodeClass가 kubelet filesystem을 instance store로 구성하므로 Pod의 disk-backed emptyDir도 그 저장소를 사용합니다. 다른 node 설정이나 tmpfs를 사용하면 backing store가 달라집니다.
6. Spark가 인식하는 scratch volume 이름은?
정답 보기
spark-local-dir-scratch처럼 spark-local-dir- 접두사와 뒤따르는 이름이 필요합니다. 이전 spark-local-dir은 일치하지 않아 같은 mountPath에 추가 emptyDir이 생길 수 있습니다.
7. emptyDir sizeLimit은 디스크 공간 예약인가요?
정답 보기
아닙니다. Pod 요청·노드 allocatable·다른 Pod·로그·writable layer와 함께 고려합니다. 노드가 먼저 가득 찰 수 있으며 memory-backed tmpfs는 RAM 예산에 포함합니다.
8. On-Demand driver와 Spot executor가 보장하지 않는 것은?
정답 보기
Driver 장애·drift/expiry를 없애거나 executor 손실을 항상 무해하게 만들지는 않습니다. Spot-only selector는 On-Demand fallback을 허용하지 않아 용량 부족 시 Pending일 수 있습니다.
9. Taint·toleration과 node selector의 역할은?
정답 보기
Toleration은 taint를 허용하고 selector가 노드를 선택합니다. 다른 Pod도 같은 toleration을 가질 수 있으며 NoSchedule은 이미 실행 중인 Pod를 퇴거시키지 않습니다.
10. Spot 경고와 decommission flag만으로 이동 완료가 보장되나요?
정답 보기
아닙니다. 경고는 best effort이고 hibernation에는 2분 여유가 없습니다. EventBridge/SQS/interruption queue, drain, 실제 hook/signal, 남은 시간·peer 공간·네트워크가 맞아야 합니다. 120s Pod grace도 클라우드 종료를 연장하지 않습니다.
11. Remote storage만 있으면 shuffle fallback이 자동 동작하나요?
정답 보기
아닙니다. spark.storage.decommission.fallbackStorage.path와 지원 filesystem·권한을 구성해야 합니다. RDD cache와 shuffle 복구는 다르며 재계산·fetch 실패·재시도 한도 때문에 잡이 실패할 수 있습니다.
12. DRA와 Karpenter가 사용하는 신호는 무엇인가요?
정답 보기
DRA는 Spark task backlog와 executor idle/cache/shuffle 상태로 수량을 조절합니다. Karpenter는 Pod 요청·스케줄링 조건으로 노드를 공급합니다. 이 경로에 metrics-server는 필수가 아니며 allocation.batch.size는 Kubernetes allocator의 생성 속도 설정입니다.
13. consolidateAfter를 executorIdleTimeout보다 크게 두면 DRA가 먼저 비우나요?
정답 보기
보장되지 않습니다. 시작 조건이 다른 타이머이고 shuffle/cache가 executor를 유지할 수 있습니다. WhenEmpty는 일반 작업 Pod 통합을 줄이는 선택이지만 drift·expiry·Spot 종료는 별도입니다.
14. JVM executor heap 4g와 cores=2를 Pod 총 memory/CPU limit으로 보면 되나요?
정답 보기
아닙니다. 이 예제의 기본 overhead 409MiB를 더한 memory는 4505MiB입니다. cores는 기본 CPU request와 Spark 병렬성에 관련되며 CPU limit은 spark.kubernetes.executor.limit.cores로 명시합니다. PySpark·off-heap·별도 overhead는 추가 검토합니다.