이세개발
article thumbnail

Spark: 분산 데이터 처리 프레임워크로, 빅데이터 작업을 빠르게 처리할 수 있습니다.

Kubernetes(K8s) 상에서 Spark를 실행하려면 Spark의 Kubernetes 지원 기능을 이용할 수 있습니다.

설치하기 (기본)

Spark Docker 이미지 준비하기

  1. Spark 다운로드 및 압축 해제:
  2. Docker 이미지 빌드 및 푸시:
./bin/docker-image-tool.sh -r <your-docker-repo> -t v3.1.2 build ./bin/docker-image-tool.sh -r <your-docker-repo> -t v3.1.2 push
wget https://archive.apache.org/dist/spark/spark-3.1.2/spark-3.1.2-bin-hadoop3.2.tgz tar -xvzf spark-3.1.2-bin-hadoop3.2.tgz cd spark-3.1.2-bin-hadoop3.2

SparkPi 예제 실행

  1. Kubernetes에서 Spark 예제 실행:
./bin/spark-submit 
\ --master k8s://https://<k8s-apiserver-address>:<port> 
\ --deploy-mode cluster 
\ --name spark-pi 
\ --class org.apache.spark.examples.SparkPi 
\ --conf spark.executor.instances=1 
\ --conf spark.kubernetes.container.image=<your-docker-repo>/spark:v3.1.2 
\ local:/opt/spark/examples/jars/spark-examples_2.12-3.1.2.jar

<k8s-apiserver-address>는 쿠버네티스 API 서버의 주소로 변경하고, <your-docker-repo>는 앞서 Docker 이미지를 푸시한 저장소 주소로 변경해야 합니다.

로그 확인

작업이 제출되면, 쿠버네티스에서 해당 드라이버 및 익스큐터의 로그를 확인하여 작업 진행 상황을 알 수 있습니다.

kubectl logs <spark-driver-pod-name>

설치하기 (Helm)

Helm은 쿠버네티스(Kubernetes) 패키지 매니저로, 복잡한 어플리케이션을 쿠버네티스에 배포하는 작업을 간소화해줍니다.

여기에서는 Bitnami의 Spark Helm 차트를 사용하여 설치하는 방법을 안내하겠습니다.

Helm 설치 및 초기화

아직 Helm이 설치되지 않았다면, 먼저 Helm을 설치하고 초기화해야 합니다.

helm version

Bitnami Helm 리포지토리 추가

Bitnami 리포지토리에는 다양한 어플리케이션에 대한 Helm 차트들이 포함되어 있습니다.

helm repo add bitnami https://charts.bitnami.com/bitnami

Spark Helm 차트 설치

helm install my-spark bitnami/spark

my-spark은 배포에 대한 이름으로, 원하는 이름으로 변경할 수 있습니다.

설치 확인

몇 분 후, 설치된 Spark의 상태와 서비스 주소를 확인할 수 있습니다:

kubectl get pods
kubectl get svc

웹 UI 접속

kubectl port-forward --address 0.0.0.0 --namespace default svc/my-spark-master-svc 80:80

 

예제 실행

Spark shell, PySpark shell 등을 사용하여 Spark 클러스터 상에서 작업을 실행할 수 있습니다. 예를 들어, spark-pi 예제를 실행하려면:

kubectl exec -it my-spark-master-0 /opt/bitnami/spark/bin/run-example SparkPi 10

위의 명령어는 Spark의 π(파이) 계산 예제를 실행합니다.

Helm을 사용하여 쿠버네티스에 Spark를 설치하면 관리 및 확장이 더욱 간편해집니다. Bitnami의 Spark 차트는 기본 설정으로 제공되지만, 실제 프로덕션 환경에서는 사용자의 요구에 맞게 설정을 조정하거나 확장해야 할 수도 있습니다.

profile

이세개발

@print(name)

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!