Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Utilisation de Volcano comme planificateur personnalisé pour Apache Spark sur Amazon EMR on EKS
Avec Amazon EMR on EKS, vous avez la possibilité d'utiliser l'opérateur Spark ou la commande spark-submit pour lancer des tâches Spark en utilisant des planificateurs personnalisés Kubernetes. Ce didacticiel explique comment exécuter des tâches Spark avec un planificateur Volcano sur une file d'attente personnalisée.
Présentation
Volcano
Installation et configuration de Volcano
-
Choisissez l'une des commandes kubectl ci-dessous pour installer Volcano, en fonction de vos besoins architecturaux :
# 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
-
Préparez un exemple de file d'attente Volcano. La file d'attente est un ensemble de PodGroups
. La file d'attente utilise le principe FIFO et constitue la base de la répartition des ressources. 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
-
Chargez un exemple de manifeste PodGroup sur Amazon S3. PodGroup est un groupe de pods étroitement associés. Vous utilisez généralement un PodGroup pour la planification par lots. Soumettez l'exemple de PodGroup suivant à la file d'attente que vous avez définie à l'étape précédente.
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
Exécution d'une application Spark avec le planificateur Volcano à l'aide de l'opérateur Spark
-
Si vous ne l'avez pas encore fait, suivez les étapes indiquées dans les sections ci-dessous pour vous préparer :
-
Installation de l'opérateur Spark
Incluez les arguments suivants lorsque vous exécutez la commande
helm install spark-operator-demo
:--set batchScheduler.enable=true --set webhook.enable=true
-
Créez un fichier de définition
SparkApplication
spark-pi.yaml
avecbatchScheduler
configuré.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" -
Soumettez l'application Spark à l'aide de la commande suivante. Cela crée également un objet
SparkApplication
appeléspark-pi
:kubectl apply -f spark-pi.yaml
-
Vérifiez les événements de l'objet
SparkApplication
à l'aide de la commande suivante :kubectl describe pods spark-pi-driver --namespace spark-operator
Le premier événement du pod montrera que Volcano a programmé les pods :
Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 23s volcano Successfully assigned default/spark-pi-driver to integration-worker2
Exécution d'une application Spark avec le planificateur Volcano à l'aide de spark-submit
-
Effectuez d'abord les étapes décrites dans la section Configuration de Spark-Submit pour Amazon sur EMR EKS. Vous devez créer votre distribution
spark-submit
en y incluant la prise en charge de Volcano. Pour plus d'informations, consultez la section Création de la rubrique Utilisation de Volcano comme planificateur personnalisé pour Spark sur Kubernetesdans la documentation Apache Spark. -
Définissez les valeurs des variables d'environnement suivantes :
export SPARK_HOME=spark-home export MASTER_URL=k8s://
Amazon-EKS-cluster-endpoint
-
Soumettez l'application Spark à l'aide de la commande suivante :
$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 -
Vérifiez les événements de l'objet
SparkApplication
à l'aide de la commande suivante :kubectl describe pod spark-pi --namespace spark-operator
Le premier événement du pod montrera que Volcano a programmé les pods :
Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 23s volcano Successfully assigned default/spark-pi-driver to integration-worker2