全部产品
Search
文档中心

Container Service for Kubernetes:Gunakan ACK Serverless untuk membuat tugas Spark

更新时间:Jul 06, 2025

Dalam kluster ACK Serverless, Anda dapat membuat pod sesuai kebutuhan bisnis. Sistem akan menghentikan penagihan setelah siklus hidup pod berakhir. Anda tidak perlu memesan sumber daya komputasi untuk tugas Spark, sehingga mengatasi masalah kekurangan sumber daya dan menghilangkan kebutuhan untuk memperluas kluster. Selain itu, Anda dapat mengurangi biaya komputasi dengan menggunakan instans preemptible. Topik ini menjelaskan cara menggunakan ACK Serverless untuk membuat tugas Spark guna memenuhi kebutuhan bisnis.

Prasyarat

Prosedur

  1. Sebarkan bagan ack-spark-operator menggunakan salah satu metode berikut:

    • Masuk ke Konsol Container Service for Kubernetes (ACK). Di panel navigasi sebelah kiri, pilih Marketplace > App Catalog dan pilih ack-spark-operator untuk menerapkan bagan tersebut.

    • Jalankan perintah helm untuk menerapkan bagan secara manual.

      Catatan

      Versi Helm harus V3 atau yang lebih baru.

      # Buat akun layanan.
      kubectl create serviceaccount spark
      # Berikan izin.
      kubectl create clusterrolebinding spark-role --clusterrole=edit --serviceaccount=default:spark --namespace=default
      # Instal operator.
      helm repo add incubator http://storage.googleapis.com/kubernetes-charts-incubator
      helm install incubator/sparkoperator --namespace default  --set operatorImageName=registry.cn-hangzhou.aliyuncs.com/acs/spark-operator  --set operatorVersion=ack-2.4.5-latest  --generate-name

    Setelah menerapkan bagan, jalankan perintah berikut untuk memeriksa apakah spark-operator telah dimulai:

    kubectl -n spark-operator get pod

    Output yang Diharapkan:

    NAME                                  READY   STATUS      RESTARTS   AGE
    ack-spark-operator-7698586d7b-pvwln   1/1     Running     0          5m9s
    ack-spark-operator-init-26tvh         0/1     Completed   0          5m9s
  2. Buat file bernama spark-pi.yaml dan salin konten berikut ke dalam file tersebut:

    apiVersion: "sparkoperator.k8s.io/v1beta2"
    kind: SparkApplication
    metadata:
      name: spark-pi
      namespace: default
    spec:
      arguments:
      - "1000"
      sparkConf:
        "spark.scheduler.maxRegisteredResourcesWaitingTime": "3000s"
        "spark.kubernetes.allocation.batch.size": "1"
        "spark.rpc.askTimeout": "36000s"
        "spark.network.timeout": "36000s"
        "spark.rpc.lookupTimeout": "36000s"
        "spark.core.connection.ack.wait.timeout": "36000s"
        "spark.executor.heartbeatInterval": "10000s"
      type: Scala
      mode: cluster
      image: "registry.aliyuncs.com/acs/spark:ack-2.4.5-latest"
      imagePullPolicy: Always
      mainClass: org.apache.spark.examples.SparkPi
      mainApplicationFile: "local:///opt/spark/examples/jars/spark-examples_2.11-2.4.5.jar"
      sparkVersion: "2.4.5"
      restartPolicy:
        type: Never
      args:
      driver:
        cores: 4
        coreLimit: "4"
        annotations:
          k8s.aliyun.com/eci-image-cache: "true"
        memory: "6g"
        memoryOverhead: "2g"
        labels:
          version: 2.4.5
        serviceAccount: spark
      executor:
        annotations:
          k8s.aliyun.com/eci-image-cache: "true"
        cores: 2
        instances: 1
        memory: "3g"
        memoryOverhead: "1g"
        labels:
          version: 2.4.5
  3. Sebarkan tugas Spark.

    1. Jalankan perintah berikut untuk menerapkan tugas Spark:

      kubectl apply -f spark-pi.yaml

      Output yang Diharapkan:

      sparkapplication.sparkoperator.k8s.io/spark-pi created
    2. Jalankan perintah berikut untuk melihat status penyebaran tugas Spark:

      kubectl get pod

      Output yang Diharapkan:

      NAME              READY   STATUS    RESTARTS   AGE
      spark-pi-driver   1/1     Running   0          2m12s

      Output menunjukkan bahwa pod berada dalam status Running, yang menandakan bahwa tugas Spark sedang diterapkan.

    3. Jalankan perintah berikut untuk melihat status penyebaran tugas Spark lagi:

      kubectl get pod

      Output yang Diharapkan:

      NAME              READY   STATUS      RESTARTS   AGE
      spark-pi-driver   0/1     Completed   0          2m54s

      Output menunjukkan bahwa pod berada dalam status Completed, yang menandakan bahwa tugas Spark telah diterapkan.

  4. Jalankan perintah berikut untuk melihat hasil komputasi dari tugas Spark:

    kubectl logs spark-pi-driver|grep Pi

    Output yang Diharapkan:

    20/04/30 07:27:51 INFO DAGScheduler: ResultStage 0 (reduce at SparkPi.scala:38) finished in 11.031 s
    20/04/30 07:27:51 INFO DAGScheduler: Job 0 finished: reduce at SparkPi.scala:38, took 11.137920 s
    Pi is roughly 3.1414371514143715
  5. Opsional:Untuk menggunakan instans preemptible, tambahkan anotasi untuk instans preemptible ke pod.

    Untuk informasi lebih lanjut tentang cara menambahkan anotasi untuk instans preemptible, lihat Gunakan Instans Preemptible.