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
Kluster ACK Serverless telah dibuat. Untuk informasi lebih lanjut, lihat Buat Kluster ACK Serverless.
Klien kubectl telah terhubung ke kluster. Untuk informasi lebih lanjut, lihat Hubungkan ke Kluster ACK Menggunakan kubectl.
Prosedur
Sebarkan bagan ack-spark-operator menggunakan salah satu metode berikut:
Masuk ke Konsol Container Service for Kubernetes (ACK). Di panel navigasi sebelah kiri, pilih dan pilih ack-spark-operator untuk menerapkan bagan tersebut.
Jalankan perintah helm untuk menerapkan bagan secara manual.
CatatanVersi 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 podOutput 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 5m9sBuat 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.5Sebarkan tugas Spark.
Jalankan perintah berikut untuk menerapkan tugas Spark:
kubectl apply -f spark-pi.yamlOutput yang Diharapkan:
sparkapplication.sparkoperator.k8s.io/spark-pi createdJalankan perintah berikut untuk melihat status penyebaran tugas Spark:
kubectl get podOutput yang Diharapkan:
NAME READY STATUS RESTARTS AGE spark-pi-driver 1/1 Running 0 2m12sOutput menunjukkan bahwa pod berada dalam status Running, yang menandakan bahwa tugas Spark sedang diterapkan.
Jalankan perintah berikut untuk melihat status penyebaran tugas Spark lagi:
kubectl get podOutput yang Diharapkan:
NAME READY STATUS RESTARTS AGE spark-pi-driver 0/1 Completed 0 2m54sOutput menunjukkan bahwa pod berada dalam status Completed, yang menandakan bahwa tugas Spark telah diterapkan.
Jalankan perintah berikut untuk melihat hasil komputasi dari tugas Spark:
kubectl logs spark-pi-driver|grep PiOutput 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.1414371514143715Opsional: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.