[Spark-k8s] — 시작하기 # 파트 1

7363 단어

이것은 Kubernetes에서 Spark를 실행하는 방법에 대한 게시물 시리즈의 첫 번째 부분입니다. 이 Spot.io 게시물here에서 이 접근 방식을 사용할 때의 이점에 대해 자세히 알아볼 수 있습니다.

이 게시물을 마치면 Minikube를 사용하여 Spark를 실행할 수 있는 로컬 환경이 준비됩니다.

로컬 환경 만들기



AWS EKS, Cluster Autoscaler 및 Karpenter를 사용하여 시뮬레이션할 자동 크기 조정을 제외하고 이 로컬 환경을 사용하여 이 시리즈 전체에서 Spark 작업을 수행할 것입니다. 확장성에 대한 게시물은 곧 게시될 예정입니다.

로컬에서 사용하려면 minikube를 설치해야 합니다. 절차는 매우 간단하며 공식 문서를 사용할 수 있습니다here.

Tip: I strongly advise installing this plugin if you use ohmyzsh because provides you an alternative to aliasing popular kubectl commands.



Minikube를 설치한 후 노드가 2개인 다중 노드 클러스터를 생성해 보겠습니다.

minikube start --nodes 2 -p my-local-cluster


Perhaps you’re wondering why there are two local nodes, and the answer is that Kubernetes lets us specify which node on which we can install our applications.
In this post, we will simulate a small production environment, and in the next post, the spark driver will run on ON_DEMAND nodes and the executors on SPOT nodes. As a result, we can reduce cloud costs.



콘솔에서 이 출력을 보면 모든 것이 잘 되었는지 확인할 수 있습니다.



다음 가상 시나리오를 상상해 보십시오. my-local-cluster는 ON_DEMAND 인스턴스이고 my-local-cluster-m02는 SPOT 인스턴스입니다.



Spark 작업을 실행할 처리 네임스페이스를 만듭니다.

$ k create namespace processing



스파크 설치



Kubernetes에서 Spark를 사용하려면 먼저 SparkOperator를 설치해야 합니다. Google에서 만든 이 연산자는 Github에서 사용할 수 있습니다. 간단히 말해서 운영자는 종류로 알려진 스파크 작업과 관련된 특정 이벤트에 대해 클러스터를 모니터링하는 일을 담당합니다. SparkApplication

설치하는 가장 간단한 방법은 Helm을 사용하여 설명서를 따르는 것이지만 SparkOperator helm을 다운로드하여 몇 가지 흥미로운 기능을 사용자 지정할 수 있습니다.

$ helm repo add spark-operator https://googlecloudplatform.github.io/spark-on-k8s-operator
$ helm pull spark-operator/spark-operator


당신은이 결과를 얻을 것이다



values.yaml 파일을 열고 몇 가지 사항을 변경해 보겠습니다.

...
sparkJobNamespace: "processing"
...
webhook:
  enable: true
  ...
  namespaceSelector: kubernetes.io/metadata.name=processing
...
nodeSelector:
    kubernetes.io/hostname=my-local-cluster


sparkJobNamescape specifies which namespace SparkOperator will use to receive spark job events.

Because we will control instance types for spark drivers and executos in the following post, webhook is set to true. Don’t be concerned right now.

The nodeSelector parameter specifies which node instance the SparkOperator pod will be installed on. We need to ensure that we do not lose the spark-operator pod, so we use an ON_DEMAND instance in our hypothetical example.



실행하여 설치

$ helm install <chart-name> <chart-folder> -n <namespace>
$ helm install spark-operator spark-operator -n spark-operator --create-namespace


이제 SparkOperator가 설치되어 실행 중입니다.


마지막 단계는 실행할 Spark 작업을 설정하는 것입니다.

YAML 파일을 사용하여 정의된 Spark 작업의 예는 다음과 같습니다. 보시다시피 우리는 모든 스파크 작업이 실행될 처리 네임스페이스를 정의하고 있으며 SparkOperator는 여기에서 이벤트를 수신합니다.

또한 종류: SparkApplication이 지정됩니다.

apiVersion: "sparkoperator.k8s.io/v1beta2"
kind: SparkApplication
metadata:
  name: my-job-with-operator
  namespace: processing
spec:
  type: Scala
  mode: cluster
  image: "tiagotxm/spark3.1:latest"
  imagePullPolicy: Always 
  mainClass: org.apache.spark.examples.SparkPi
  mainApplicationFile: "local:///opt/spark/examples/jars/spark-examples_2.12-3.1.1.jar"
  sparkVersion: "3.1.1"
  restartPolicy:
    type: Never
  volumes:
    - name: "test-volume"
      hostPath:
        path: "/tmp"
        type: Directory
  driver:
    cores: 1
    coreLimit: "1200m"
    memory: "512m"
    labels:
      version: 3.1.1
    serviceAccount: spark-operator-spark
    volumeMounts:
      - name: "test-volume"
        mountPath: "/tmp"     
  executor:
    cores: 3
    instances: 3
    memory: "512m"
    labels:
      version: 3.1.1
    volumeMounts:
      - name: "test-volume"
        mountPath: "/tmp"


스파크 이미지를 사용하고 이미지 내에 포함된 mainApplicationFile에 정의된 간단한 스파크 작업을 실행합니다.

간단한 작업을 시작하겠습니다.

$ k apply -f hello-spark-operator.yaml


prod 드라이버 및 실행기 생성과 같은 작업 시작 및 모든 스파크 관련 이벤트를 모니터링할 수 있습니다.

$ kgpw -n processing




또한 최종 상태를 다시 확인하십시오.

$ k get sparkapplications -n processing


결론



이 게시물에서는 두 개의 네임스페이스로 스파크 작업을 실행하기 위해 로컬 환경을 만들었습니다. SparkOperator는 spark-operator 네임스페이스에 설치되었으며 이제 처리 네임스페이스의 spark 이벤트를 처리합니다.



이 게시물이 도움이 되었기를 바라며 내 gitrepository에서 전체 예제를 찾을 수 있습니다.

시간 내 주셔서 감사합니다!

원하는 경우 medium에서 읽을 수도 있습니다.
같이 해:

좋은 웹페이지 즐겨찾기