All Products
Search
Document Center

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

Last Updated:Mar 26, 2026

ACK Serverless menjalankan tugas Spark sebagai Pod on-demand—penagihan berhenti ketika siklus hidup Pod berakhir, sehingga Anda tidak perlu memesan sumber daya komputasi atau memperluas kluster. Untuk mengurangi biaya lebih lanjut, gunakan instans preemptible.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

Terapkan spark-operator

Terapkan chart Helm ack-spark-operator menggunakan salah satu metode berikut.

Opsi 1: Konsol ACK

  1. Masuk ke Container Service Management ConsoleKonsol Container Service for Kubernetes (ACK).

  2. Pada panel navigasi sebelah kiri, pilih Marketplace > Marketplace.

  3. Cari dan pilih ack-spark-operator, lalu terapkan chart tersebut.

Opsi 2: CLI Helm (Helm V3 atau versi lebih baru diperlukan)

Jalankan perintah berikut:

# Buat akun layanan
kubectl create serviceaccount spark

# Berikan izin
kubectl create clusterrolebinding spark-role --clusterrole=edit --serviceaccount=default:spark --namespace=default

# Tambahkan repositori Helm dan instal operator
helm repo add aliyunhub https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/
helm install ack-spark-operator aliyunhub/ack-spark-operator

Setelah penerapan, verifikasi bahwa spark-operator sedang berjalan:

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

Jalankan tugas Spark

Bagian ini memandu Anda melalui penerapan contoh bawaan SparkPi, yang memperkirakan nilai pi menggunakan pengambilan sampel Monte Carlo.

Langkah 1: Buat manifes SparkApplication

Buat file bernama spark-pi.yaml dengan konten berikut:

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
  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

Langkah 2: Kirim tugas

kubectl apply -f spark-pi.yaml

Output yang diharapkan:

sparkapplication.sparkoperator.k8s.io/spark-pi created

Langkah 3: Periksa status tugas

Jalankan perintah berikut untuk melihat status penerapan tugas Spark:

kubectl get pod

Output yang diharapkan saat tugas sedang berjalan:

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

Pod berada dalam status Running, yang menunjukkan bahwa tugas Spark sedang diterapkan.

Jalankan kembali perintah tersebut untuk memeriksa status akhir:

kubectl get pod

Output yang diharapkan saat tugas selesai:

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

Pod berada dalam status Completed, yang menunjukkan bahwa tugas Spark telah selesai diterapkan.

Langkah 4: Lihat hasilnya

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

(Opsional) Gunakan instans preemptible

Tambahkan anotasi untuk instans preemptible pada Pod guna mengurangi biaya komputasi. Untuk detailnya, lihat Gunakan instans preemptible.