카테고리 없음

deploy spark on kubernetes - 스파크 쿠버네티스에 배포

PSAwesome 2022. 12. 21. 01:43
반응형

헬름을 이용한 spark 클러스터 생성하기입니다. (하나씩 구현했는데 이번엔 성공하지 못했어요.)

helm은 너무 간편하고, 전 클러스터에 잡만 제출하면 되기 때문에.... 타협했습니다.

 

namespace 생성

# vim ns.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: spark
kubectl apply -f ns.yaml

bitnami helm

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

helm install spark bitnami/spark -n spark
# Read more about the installation in the Apache Spark packaged by Bitnami Chart Github repository

 

 

1. 서비스 연결 : port-forward

kubectl port-forward --namespace spark svc/spark-master-svc 80:80

 

visit http://127.0.0.1:80

 

 

2. 서비스 연결 : Ingress

create ingress class

# vim spark-default-ingress.yaml

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  labels:
    app.kubernetes.io/component: controller
  name: spark-ing-class
  namespace: spark
spec:
  controller: k8s.io/ingress-nginx

create ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: spark-ingerss
  namespace: spark
spec:
  ingressClassName: spark-ing-class
  tls:
  - hosts:
    - "*.public.psawesome.dev"
    secretName: secret-tls
  rules:
  - host: spark-master.public.psawesome.dev
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: spark-master-svc
            port:
              number: 80

 

  • 최종 결과입니다.

 

예제 실행

export EXAMPLE_JAR=$(kubectl exec -ti --namespace spark spark-worker-0 -- find examples/jars/ -name 'spark-example*\.jar' | tr -d '\r')
kubectl exec -ti --namespace spark spark-worker-0 -- spark-submit --master spark://spark-master-svc:7077 \
    --class org.apache.spark.examples.SparkPi \
    $EXAMPLE_JAR 5

 

 

 

 

아래 글은 시도했지만, 이번엔 성공하지 못한 스크립트입니다.

 

download file

wget https://dlcdn.apache.org/spark/spark-3.3.1/spark-3.3.1-bin-hadoop3.tgz
tar -xvf spark-3.3.1-bin-hadoop3.tgz

cd spark-3.3.1-bin-hadoop3/bin
pwd
/Users/auto/spark/spark-3.3.1-bin-hadoop3

 

./bin/docker-image-tool.sh -r <repo> -t my-tag build
./bin/docker-image-tool.sh -r <repo> -t my-tag push


# 사용한 명령어
docker login
./bin/docker-image-tool.sh -r psawesome -t 3.3.1 build
./bin/docker-image-tool.sh -r psawesome -t 3.3.1 push

 

install java

sudo apt update
sudo apt install openjdk-11-jdk -y

 

set JAVA_HOME

# vim ~/.zshrc # 각자의 bash 환경에 추가
export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
export PATH=$PATH:$JAVA_HOME/bin

 

 

bin/spark-submit \
	-—master k8s://https://node1:6443 \
	--deploy-mode cluster \
	--name spark-pi \
	--class org.apache.spark.examples.SparkPi \
	--conf spark.executor.instances=2 \
	—-conf spark.kubernetes.namespace=spark \
	—-conf spark.kubernetes.authenticate.driver.serviceAccountName=spark \
	--conf spark.kubernetes.container.image=apache/spark \
	local:///opt/spark/examples/jars/spark-examples_2.11-2.4.0.jar

 

 

이슈

Exception in thread "main" org.apache.spark.SparkException: Must specify the driver container image

복사 및 붙여넣기로 코드를 수정했는데, 일부 텍스트의 문제가 있었습니다.

ㅗ터미널에서 알기 어려움

오류 확인

에디터에 붙여넣기 결과

 

 

exec /opt/entrypoint.sh: exec format error
Application status for spark-e680ee07efa04e98a775fc29d4419769 (phase: Pending)

m1 mac으로 빌드 및 push를 해서 아키 타입이 맞지 않는 것 같아서 해당 내용도 수정했는데 해결하지 못했네요.

이미 `spark-3.3.1-bin/bin/docker-image-tool.sh` build할 때 buildx build를 같이 돌리기 때문에 칩 이슈는 해소되는 것 같은데... 전 이번에 해결하진 못했습니다.

linux/arm/v7

 

반응형