Uso de Volcano como programador personalizado para Apache Spark en Amazon EMR en EKS
Con Amazon EMR en EKS, puede usar el operador de Spark o spark-submit para ejecutar trabajos de Spark con los programadores personalizados de Kubernetes. Este tutorial explica cómo ejecutar trabajos de Spark con un programador de Volcano en una cola personalizada.
Información general
Volcano
Instalar y configurar Volcano
-
Elija uno de los siguientes comandos kubectl para instalar Volcano, en función de sus necesidades arquitectónicas:
# 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
-
Prepare un ejemplo de cola de Volcano. Una cola es un grupo de PodGroups
. La cola adopta FIFO y es la base de la división de recursos. 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
-
Cargue un manifiesto de PodGroup de muestra en Amazon S3. PodGroup es un grupo de pods con una fuerte asociación. Por lo general, un PodGroup se utiliza para la programación por lotes. Envíe el siguiente PodGroup de muestra a la cola que definió en el paso anterior.
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
Ejecute una aplicación de Spark con el programador de Volcano con el operador de Spark
-
Si aún no lo ha hecho, complete los pasos de las secciones siguientes para configurarlo todo:
-
Cuando ejecute el comando
helm install spark-operator-demo
, incluya los siguientes argumentos:--set batchScheduler.enable=true --set webhook.enable=true
-
Cree un archivo de definición
spark-pi.yaml
deSparkApplication
conbatchScheduler
configurado.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" -
Envíe la aplicación de Spark con el siguiente comando. Esto también crea un objeto
SparkApplication
llamadospark-pi
:kubectl apply -f spark-pi.yaml
-
Compruebe los eventos del objeto
SparkApplication
con el siguiente comando:kubectl describe pods spark-pi-driver --namespace spark-operator
El primer evento de pod mostrará que Volcano ha programado los pods:
Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 23s volcano Successfully assigned default/spark-pi-driver to integration-worker2
Ejecute una aplicación de Spark con el programador de Volcano con spark-submit
-
En primer lugar, complete los pasos de la sección Configuración de spark-submit para Amazon EMR en EKS. Debe crear su distribución
spark-submit
con el soporte de Volcano. Para obtener más información, consulte la sección Crear de Cómo usar Volcano como programador personalizado para Spark en Kubernetesde la documentación de Apache Spark. -
Establezca los valores de las siguientes variables de entorno:
export SPARK_HOME=spark-home export MASTER_URL=k8s://
Amazon-EKS-cluster-endpoint
-
Envíe la aplicación de Spark con el siguiente comando:
$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 -
Compruebe los eventos del objeto
SparkApplication
con el siguiente comando:kubectl describe pod spark-pi --namespace spark-operator
El primer evento de pod mostrará que Volcano ha programado los pods:
Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 23s volcano Successfully assigned default/spark-pi-driver to integration-worker2