Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Verwendung von Volcano als benutzerdefiniertem Scheduler für Apache Spark auf Amazon EMR in EKS
Mit Amazon EMR in EKS können Sie Spark-Operator oder Spark-Submit verwenden, um Spark-Aufträge mit benutzerdefinierten Kubernetes-Planern auszuführen. In diesem Tutorial erfahren Sie, wie Sie Spark-Aufträge mit einem Volcano-Planer in einer benutzerdefinierten Warteschlange ausführen.
Übersicht
Volcano
Installieren und einrichten von Volcano
-
Wählen Sie einen der folgenden kubectl-Befehle, um Volcano je nach Ihrem architektonischen Bedarf zu installieren:
# 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
-
Bereiten Sie eine Volcano-Beispielwarteschlange vor. Eine Warteschlange ist eine Sammlung von PodGroups
. Die Warteschlange verwendet FIFO und ist die Grundlage für die Aufteilung der Ressourcen. 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
-
Laden Sie ein PodGroup-Beispiel-Manifest in Amazon S3 hoch. PodGroup ist eine Gruppe von Pods mit starker Assoziation. Normalerweise verwenden Sie eine PodGroup für die Batch-Planung. Senden Sie die folgende Beispiel-PodGroup in die Warteschlange, die Sie im vorherigen Schritt definiert haben.
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
Führen Sie eine Spark-Anwendung mit Volcano Scheduler und dem Spark-Operator aus
-
Sofern noch nicht geschehen, stellen Sie sicher, dass Sie folgende Voraussetzungen erfüllen:
-
Den Spark-Operator installieren
Geben Sie bei der Ausführung des
helm install spark-operator-demo
-Befehls die folgenden Argumente an:--set batchScheduler.enable=true --set webhook.enable=true
-
Erstellen Sie eine
SparkApplication
-Definitionsdateispark-pi.yaml
mit derbatchScheduler
-Konfiguration.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" -
Senden Sie die Spark-Anwendung mit dem folgenden Befehl. Dadurch wird auch ein
SparkApplication
-Objekt mit dem Namenspark-pi
erstellt:kubectl apply -f spark-pi.yaml
-
Überprüfen Sie die Ereignisse für das
SparkApplication
-Objekt mit dem folgenden Befehl:kubectl describe pods spark-pi-driver --namespace spark-operator
Das erste Pod-Ereignis zeigt, dass Volcano die Pods geplant hat:
Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 23s volcano Successfully assigned default/spark-pi-driver to integration-worker2
Führen Sie eine Spark-Anwendung mit Volcano Scheduler mit spark-submit
aus
-
Führen Sie zunächst die Schritte in diesem Spark-Submit für Amazon einrichten am EMR EKS-Abschnitt durch. Sie müssen Ihre
spark-submit
Distribution mit Volcano-Unterstützung erstellen. Weitere Informationen finden Sie im Abschnitt Erstellung unter Verwendung von Volcano als benutzerdefinierter Planer für Spark in Kubernetesin der Apache-Spark-Dokumentation. -
Legen Sie die Werte der folgenden Umgebungsvariablen fest:
export SPARK_HOME=spark-home export MASTER_URL=k8s://
Amazon-EKS-cluster-endpoint
-
Senden Sie die Spark-Anwendung mit dem folgenden Befehl:
$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 -
Überprüfen Sie die Ereignisse für das
SparkApplication
-Objekt mit dem folgenden Befehl:kubectl describe pod spark-pi --namespace spark-operator
Das erste Pod-Ereignis zeigt, dass Volcano die Pods geplant hat:
Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 23s volcano Successfully assigned default/spark-pi-driver to integration-worker2