Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Gunakan penskalaan otomatis vertikal dengan operator Spark untuk Amazon di EMR EKS
Dimulai dengan Amazon EMR 7.0, Anda dapat menggunakan Amazon EMR pada penskalaan otomatis EKS vertikal untuk menyederhanakan manajemen sumber daya. Ini secara otomatis menyetel memori dan CPU sumber daya untuk beradaptasi dengan kebutuhan beban kerja yang Anda sediakan untuk aplikasi Amazon EMR Spark. Untuk informasi selengkapnya, lihat Menggunakan penskalaan otomatis vertikal dengan pekerjaan Amazon Spark EMR.
Bagian ini menjelaskan cara mengkonfigurasi operator Spark untuk menggunakan penskalaan otomatis vertikal.
Prasyarat
Sebelum melanjutkan, pastikan untuk menyelesaikan pengaturan berikut:
-
Selesaikan langkah-langkah dalam Menyiapkan operator Spark untuk Amazon di EMR EKS.
-
(Opsional) Jika sebelumnya Anda menginstal versi lama dari operator Spark, hapus SparkApplication/ScheduledSparkApplication CRD.
kubectl delete crd sparkApplication kubectl delete crd scheduledSparkApplication
-
Selesaikan langkah-langkah dalam Instal operator Spark. Pada langkah 3, tambahkan baris berikut ke perintah instalasi untuk mengizinkan webhook untuk operator:
--set webhook.enable=true
-
Selesaikan langkah-langkah dalam Menyiapkan penskalaan otomatis vertikal untuk Amazon di EMR EKS.
-
Berikan akses ke file di lokasi Amazon S3 Anda:
-
Beri anotasi akun layanan driver dan operator Anda dengan
JobExecutionRole
yang memiliki izin S3.kubectl annotate serviceaccount -n spark-operator emr-containers-sa-spark eks.amazonaws.com/role-arn=
JobExecutionRole
kubectl annotate serviceaccount -n spark-operator emr-containers-sa-spark-operator eks.amazonaws.com/role-arn=JobExecutionRole
-
Perbarui kebijakan kepercayaan peran eksekusi pekerjaan Anda di namespace tersebut.
aws emr-containers update-role-trust-policy \ --cluster-name cluster \ --namespace ${Namespace}\ --role-name iam_role_name_for_job_execution
-
Edit kebijakan kepercayaan IAM peran peran eksekusi pekerjaan Anda dan perbarui
serviceaccount
dariemr-containers-sa-spark-*-*-xxxx
keemr-containers-sa-*
.{ "Effect": "Allow", "Principal": { "Federated": "
OIDC-provider
" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringLike": { "OIDC
": "system:serviceaccount:${Namespace}:emr-containers-sa-*" } } } -
Jika Anda menggunakan Amazon S3 sebagai penyimpanan file, tambahkan default berikut ke file yaml Anda.
hadoopConf: # EMRFS filesystem fs.s3.customAWSCredentialsProvider: com.amazonaws.auth.WebIdentityTokenCredentialsProvider fs.s3.impl: com.amazon.ws.emr.hadoop.fs.EmrFileSystem fs.AbstractFileSystem.s3.impl: org.apache.hadoop.fs.s3.EMRFSDelegate fs.s3.buffer.dir: /mnt/s3 fs.s3.getObject.initialSocketTimeoutMilliseconds: "2000" mapreduce.fileoutputcommitter.algorithm.version.emr_internal_use_only.EmrFileSystem: "2" mapreduce.fileoutputcommitter.cleanup-failures.ignored.emr_internal_use_only.EmrFileSystem: "true" sparkConf: # Required for EMR Runtime spark.driver.extraClassPath: /usr/lib/hadoop-lzo/lib/*:/usr/lib/hadoop/hadoop-aws.jar:/usr/share/aws/aws-java-sdk/*:/usr/share/aws/emr/emrfs/conf:/usr/share/aws/emr/emrfs/lib/*:/usr/share/aws/emr/emrfs/auxlib/*:/usr/share/aws/emr/security/conf:/usr/share/aws/emr/security/lib/*:/usr/share/aws/hmclient/lib/aws-glue-datacatalog-spark-client.jar:/usr/share/java/Hive-JSON-Serde/hive-openx-serde.jar:/usr/share/aws/sagemaker-spark-sdk/lib/sagemaker-spark-sdk.jar:/home/hadoop/extrajars/* spark.driver.extraLibraryPath: /usr/lib/hadoop/lib/native:/usr/lib/hadoop-lzo/lib/native:/docker/usr/lib/hadoop/lib/native:/docker/usr/lib/hadoop-lzo/lib/native spark.executor.extraClassPath: /usr/lib/hadoop-lzo/lib/*:/usr/lib/hadoop/hadoop-aws.jar:/usr/share/aws/aws-java-sdk/*:/usr/share/aws/emr/emrfs/conf:/usr/share/aws/emr/emrfs/lib/*:/usr/share/aws/emr/emrfs/auxlib/*:/usr/share/aws/emr/security/conf:/usr/share/aws/emr/security/lib/*:/usr/share/aws/hmclient/lib/aws-glue-datacatalog-spark-client.jar:/usr/share/java/Hive-JSON-Serde/hive-openx-serde.jar:/usr/share/aws/sagemaker-spark-sdk/lib/sagemaker-spark-sdk.jar:/home/hadoop/extrajars/* spark.executor.extraLibraryPath: /usr/lib/hadoop/lib/native:/usr/lib/hadoop-lzo/lib/native:/docker/usr/lib/hadoop/lib/native:/docker/usr/lib/hadoop-lzo/lib/native
-
Jalankan pekerjaan dengan penskalaan otomatis vertikal pada operator Spark
Sebelum Anda dapat menjalankan aplikasi Spark dengan operator Spark, Anda harus menyelesaikan langkah-langkahnya. Prasyarat
Untuk menggunakan penskalaan otomatis vertikal dengan operator Spark, tambahkan konfigurasi berikut ke driver untuk spesifikasi Aplikasi Spark Anda untuk mengaktifkan penskalaan otomatis vertikal:
dynamicSizing: mode: Off signature: "my-signature"
Konfigurasi ini memungkinkan penskalaan otomatis vertikal dan merupakan konfigurasi tanda tangan wajib yang memungkinkan Anda memilih tanda tangan untuk pekerjaan Anda.
Untuk informasi selengkapnya tentang konfigurasi dan nilai parameter, lihat Mengonfigurasi penskalaan otomatis vertikal untuk Amazon. EMR EKS Secara default, pekerjaan Anda dikirimkan dalam mode Monitoring-Only Off dari penskalaan otomatis vertikal. Status pemantauan ini memungkinkan Anda menghitung dan melihat rekomendasi sumber daya tanpa melakukan penskalaan otomatis. Untuk informasi selengkapnya, lihat Mode penskalaan otomatis vertikal.
Berikut ini adalah file SparkApplication
definisi sampel bernama spark-pi.yaml
dengan konfigurasi yang diperlukan untuk menggunakan penskalaan otomatis vertikal.
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-7.2.0:latest" imagePullPolicy: Always mainClass: org.apache.spark.examples.SparkPi mainApplicationFile: "local:///usr/lib/spark/examples/jars/spark-examples.jar" sparkVersion: "3.4.1" dynamicSizing: mode: Off signature: "my-signature" restartPolicy: type: Never volumes: - name: "test-volume" hostPath: path: "/tmp" type: Directory driver: cores: 1 coreLimit: "1200m" memory: "512m" labels: version: 3.4.1 serviceAccount: emr-containers-sa-spark volumeMounts: - name: "test-volume" mountPath: "/tmp" executor: cores: 1 instances: 1 memory: "512m" labels: version: 3.4.1 volumeMounts: - name: "test-volume" mountPath: "/tmp"
Sekarang, kirimkan aplikasi Spark dengan perintah berikut. Ini juga akan membuat SparkApplication
objek bernamaspark-pi
:
kubectl apply -f spark-pi.yaml
Untuk informasi selengkapnya tentang mengirimkan aplikasi ke Spark melalui operator Spark, lihat Menggunakan a SparkApplication
spark-on-k8s-operator
GitHub
Memverifikasi fungsionalitas penskalaan otomatis vertikal
Untuk memverifikasi bahwa penskalaan otomatis vertikal berfungsi dengan benar untuk pekerjaan yang dikirimkan, gunakan kubectl untuk mendapatkan sumber daya verticalpodautoscaler
kustom dan melihat rekomendasi penskalaan Anda.
kubectl get verticalpodautoscalers --all-namespaces \ -l=emr-containers.amazonaws.com/dynamic.sizing.signature=
my-signature
Output dari kueri ini harus menyerupai yang berikut:
NAMESPACE NAME MODE CPU MEM PROVIDED AGE
spark-operator ds-p73j6mkosvc4xeb3gr7x4xol2bfcw5evqimzqojrlysvj3giozuq-vpa Off 580026651 True 15m
Jika output Anda tidak terlihat serupa atau berisi kode kesalahan, lihat langkah-langkah Memecahkan masalah Amazon EMR pada EKS penskalaan otomatis vertikal untuk membantu menyelesaikan masalah.
Untuk menghapus pod dan aplikasi, jalankan perintah berikut:
kubectl delete sparkapplication spark-pi