Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Dengan Amazon EMR di EKS, Anda dapat menggunakan operator Spark atau spark-submit untuk menjalankan pekerjaan Spark dengan penjadwal kustom Kubernetes. Tutorial ini mencakup cara menjalankan pekerjaan Spark dengan penjadwal Volcano pada antrian khusus.
Gambaran Umum
Volcano
Instal dan atur Volcano
-
Pilih salah satu perintah kubectl berikut untuk menginstal Volcano, tergantung pada kebutuhan arsitektur Anda:
# x86_64 kubectl apply -f https://raw.githubusercontent.com/volcano-sh/volcano/v1.5.1/installer/volcano-development.yaml # arm64: kubectl apply -f https://raw.githubusercontent.com/volcano-sh/volcano/v1.5.1/installer/volcano-development-arm64.yaml
-
Siapkan contoh antrian Volcano. Antrian adalah kumpulan. PodGroups
Antrian mengadopsi FIFO dan merupakan dasar untuk pembagian sumber daya. cat << EOF > volcanoQ.yaml apiVersion: scheduling.volcano.sh/v1beta1 kind: Queue metadata: name: sparkqueue spec: weight: 4 reclaimable: false capability: cpu: 10 memory: 20Gi EOF kubectl apply -f volcanoQ.yaml
-
Unggah contoh PodGroup manifes ke Amazon S3. PodGroup adalah sekelompok pod dengan asosiasi yang kuat. Anda biasanya menggunakan penjadwalan PodGroup untuk batch. Kirimkan sampel berikut PodGroup ke antrian yang Anda tentukan di langkah sebelumnya.
cat << EOF > podGroup.yaml apiVersion: scheduling.volcano.sh/v1beta1 kind: PodGroup spec: # Set minMember to 1 to make a driver pod minMember: 1 # Specify minResources to support resource reservation. # Consider the driver pod resource and executors pod resource. # The available resources should meet the minimum requirements of the Spark job # to avoid a situation where drivers are scheduled, but they can't schedule # sufficient executors to progress. minResources: cpu: "1" memory: "1Gi" # Specify the queue. This defines the resource queue that the job should be submitted to. queue: sparkqueue EOF aws s3 mv podGroup.yaml s3://
bucket-name
Jalankan aplikasi Spark dengan penjadwal Volcano dengan operator Spark
-
Jika Anda belum melakukannya, selesaikan langkah-langkah di bagian berikut untuk menyiapkan:
-
Sertakan argumen berikut saat Anda menjalankan
helm install spark-operator-demo
perintah:--set batchScheduler.enable=true --set webhook.enable=true
-
Buat file
SparkApplication
definisispark-pi.yaml
denganbatchScheduler
dikonfigurasi.apiVersion: "sparkoperator.k8s.io/v1beta2" kind: SparkApplication metadata: name: spark-pi namespace: spark-operator spec: type: Scala mode: cluster image: "895885662937.dkr.ecr.
us-west-2
.amazonaws.com/spark/emr-6.10.0:latest
" imagePullPolicy: Always mainClass: org.apache.spark.examples.SparkPi mainApplicationFile: "local:///usr/lib/spark/examples/jars/spark-examples.jar" sparkVersion: "3.3.1" batchScheduler: "volcano" #Note: You must specify the batch scheduler name as 'volcano' restartPolicy: type: Never volumes: - name: "test-volume
" hostPath: path: "/tmp" type: Directory driver: cores: 1 coreLimit: "1200m" memory: "512m" labels: version: 3.3.1 serviceAccount: emr-containers-sa-spark volumeMounts: - name: "test-volume
" mountPath: "/tmp" executor: cores: 1 instances: 1 memory: "512m" labels: version: 3.3.1 volumeMounts: - name: "test-volume
" mountPath: "/tmp" -
Kirim aplikasi Spark dengan perintah berikut. Ini juga menciptakan
SparkApplication
objek yang disebutspark-pi
:kubectl apply -f spark-pi.yaml
-
Periksa peristiwa untuk
SparkApplication
objek dengan perintah berikut:kubectl describe pods spark-pi-driver --namespace spark-operator
Acara pod pertama akan menunjukkan bahwa Volcano telah menjadwalkan pod:
Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 23s volcano Successfully assigned default/spark-pi-driver to integration-worker2
Jalankan aplikasi Spark dengan penjadwal Volcano dengan spark-submit
-
Pertama, selesaikan langkah-langkah di Menyiapkan spark-submit untuk Amazon EMR di EKS bagian ini. Anda harus membangun
spark-submit
distribusi Anda dengan dukungan Volcano. Untuk informasi selengkapnya, lihat bagian Build dari Using Volcano as Customized Scheduler for Spark on Kubernetesdi dokumentasi Apache Spark. -
Tetapkan nilai untuk variabel lingkungan berikut:
export SPARK_HOME=spark-home export MASTER_URL=k8s://
Amazon-EKS-cluster-endpoint
-
Kirim aplikasi Spark dengan perintah berikut:
$SPARK_HOME/bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master $MASTER_URL \ --conf spark.kubernetes.container.image=895885662937.dkr.ecr.
us-west-2
.amazonaws.com/spark/emr-6.10.0:latest
\ --conf spark.kubernetes.authenticate.driver.serviceAccountName=spark \ --deploy-mode cluster \ --conf spark.kubernetes.namespace=spark-operator \ --conf spark.kubernetes.scheduler.name=volcano \ --conf spark.kubernetes.scheduler.volcano.podGroupTemplateFile=/path/to/podgroup-template.yaml \ --conf spark.kubernetes.driver.pod.featureSteps=org.apache.spark.deploy.k8s.features.VolcanoFeatureStep \ --conf spark.kubernetes.executor.pod.featureSteps=org.apache.spark.deploy.k8s.features.VolcanoFeatureStep \ local:///usr/lib/spark/examples/jars/spark-examples.jar 20 -
Periksa peristiwa untuk
SparkApplication
objek dengan perintah berikut:kubectl describe pod spark-pi --namespace spark-operator
Acara pod pertama akan menunjukkan bahwa Volcano telah menjadwalkan pod:
Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 23s volcano Successfully assigned default/spark-pi-driver to integration-worker2