Spark Operator 란?
Spark Operator 는 Kubernetes 환경에서 Apache Spark Application 을 배포하고 관리하기 위한 Custom Controller 다.
구성 요소
- Custom Resource Definitions (CRDs)
- SparkApplication: 하나의 Spark Application 을 정의
- ScheduledSparkApplication: 주기적으로 실행되는 Spark Application 을 정의
- Operator
- CRD 를 감지하고 필요한 K8s Object 를 생성, 업데이트, 삭제
- Spark Driver 와 Executor Pod 를 관리
- Admission Webhook
- K8s API 서버에 요청이 도달하기 전에 요청을 가로채어 리소스에 필요한 설정을 주입
- Spark Application Pod 가 생성될 때 환경 변수, 볼륨 마운트 등 필요한 설정을 주입
Spark Operator 의 작동 방식
- 사용자가 Spark Application 을 생성
- Operator 가 이를 감지하고 K8s Object 를 생성
- Spark Driver Pod 가 생성됨
- Spark Driver 가 Executor Pod 생성 요청 및 관리
- Spark Job 이 종료되면 Operator 가 리소스를 정리
Spark Operator 설치
# 네임스페이스 생성
kubectl create namespace spark-operator
# Helm Repo 추가 및 업데이트
helm repo add spark-operator https://kubeflow.github.io/spark-operator
helm repo update
# 설치
helm install spark-operator spark-operator/spark-operator \
-n spark-operator \
--set enableWebhook=true \
--set image.tag=v1beta2-1.1.27-3.5.0 \
--set serviceAccounts.spark.create=true \
--set serviceAccounts.spark.name=spark-sa
# 설치 확인
kubectl get pods -n spark-operator
kubectl get crds | grep sparkoperatorHelm 차트를 통해 Spark Operator 를 손쉽게 설치할 수 있으며, Webhook 을 활성화하면 Pod 에 필요한 설정(라벨/어노테이션/환경변수)을 자동 주입할 수 있다.
Spark Job 실행
SparkApplication CRD 사용
apiVersion: sparkoperator.k8s.io/v1beta2
kind: SparkApplication
metadata:
name: spark-pi-minimal
namespace: data-jobs
spec:
type: Scala
mode: cluster
image: gcr.io/spark-operator/spark:v3.5.0
mainClass: org.apache.spark.examples.SparkPi
mainApplicationFile: local:///opt/spark/examples/jars/spark-examples_2.12-3.5.0.jar
sparkVersion: 3.5.0
driver:
cores: 1
memory: 512m
serviceAccount: spark-sa
executor:
instances: 2
cores: 1
memory: 512m
restartPolicy:
type: Never
timeToLiveSeconds: 600 # 완료 후 10분 뒤 Driver/Executor Pod 정리YAML 파일로 SparkApplication CRD 를 생성하면 Operator 가 이를 감지하고 Driver Pod 을 생성한다. SparkApplication CRD 를 사용하여 Spark Job 을 실행할 경우 TTL 을 적용해 Completed 상태의 Pod 를 자동으로 제거할 수 있다.