As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Uso do Volcano como um programador personalizado para Apache Spark no Amazon EMR no EKS
Com o Amazon EMR no EKS, você pode usar o operador do Spark ou o spark-submit para executar trabalhos do Spark com programadores personalizados do Kubernetes. Este tutorial aborda como executar trabalhos do Spark com um programador do Volcano em uma fila personalizada.
Visão geral do
O Volcano
Instalação e configuração do Volcano
-
Escolha um dos seguintes comandos kubectl para instalar o Volcano, com base em suas necessidades arquitetô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 uma fila de exemplo do Volcano. Uma fila é uma coleção de. PodGroups
A fila adota o FIFO e é a base para a divisão 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 -
Faça upload de um exemplo de PodGroup manifesto para o Amazon S3. PodGroup é um grupo de grupos com forte associação. Você normalmente usa um PodGroup para agendamento em lote. Envie a amostra PodGroup a seguir para a fila que você definiu na etapa 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
Execução de uma aplicação do Spark usando o programador do Volcano com o operador do Spark
-
Se ainda não o fez, conclua as etapas apresentadas nas seguintes seções para se preparar para usar:
-
Instalação do operador do Spark
Inclua os seguintes argumentos ao executar o comando
helm install spark-operator-demo:--set batchScheduler.enable=true --set webhook.enable=true
-
Crie um arquivo
SparkApplicationde definiçãospark-pi.yamlcombatchSchedulerconfigurado.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" -
Envie a aplicação do Spark com o comando apresentado a seguir. Isso também cria um objeto
SparkApplicationchamadospark-pi:kubectl apply -f spark-pi.yaml -
Verifique os eventos do objeto
SparkApplicationcom o seguinte comando:kubectl describe pods spark-pi-driver --namespace spark-operatorO primeiro evento do pod mostrará que o Volcano programou os pods:
Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 23s volcano Successfully assigned default/spark-pi-driver to integration-worker2
Execução de uma aplicação do Spark usando o programador do Volcano com o spark-submit
-
Primeiro, conclua as etapas na seção Configuração do spark-submit para o Amazon EMR no EKS. Você deve desenvolver a distribuição do
spark-submitcom suporte do Volcano. Para obter mais informações, consulte a seção Build de Using Volcano as Customized Scheduler for Spark on Kubernetesna documentação do Apache Spark. -
Defina os valores para as seguintes variáveis de ambiente:
export SPARK_HOME=spark-home export MASTER_URL=k8s://Amazon-EKS-cluster-endpoint -
Envie a aplicação do Spark com o seguinte 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 -
Verifique os eventos do objeto
SparkApplicationcom o seguinte comando:kubectl describe pod spark-pi --namespace spark-operatorO primeiro evento do pod mostrará que o Volcano programou os pods:
Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 23s volcano Successfully assigned default/spark-pi-driver to integration-worker2