Uso do Volcano como um programador personalizado para Apache Spark no Amazon EMR no EKS - Amazon EMR

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 pode ajudar a gerenciar a programação do Spark com funções avançadas, como a programação de filas, a programação de compartilhamento equitativo e a reserva de recursos. Para obter mais informações sobre os benefícios do Volcano, consulte Why Spark chooses Volcano as built-in batch scheduler on Kubernetes? no blog CNCF da Linux Foundation.

Instalação e configuração do Volcano

  1. 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
  2. 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
  3. 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

  1. Se ainda não o fez, conclua as etapas apresentadas nas seguintes seções para se preparar para usar:

    1. Instalação e configuração do Volcano

    2. Configuração do operador do Spark para o Amazon EMR no EKS

    3. 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
  2. Crie um arquivo SparkApplication de definição spark-pi.yaml com batchScheduler 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"
  3. Envie a aplicação do Spark com o comando apresentado a seguir. Isso também cria um objeto SparkApplication chamado spark-pi:

    kubectl apply -f spark-pi.yaml
  4. Verifique os eventos do objeto SparkApplication com o seguinte comando:

    kubectl describe pods spark-pi-driver --namespace spark-operator

    O 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

  1. 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-submit com suporte do Volcano. Para obter mais informações, consulte a seção Build de Using Volcano as Customized Scheduler for Spark on Kubernetes na documentação do Apache Spark.

  2. Defina os valores para as seguintes variáveis ​​de ambiente:

    export SPARK_HOME=spark-home export MASTER_URL=k8s://Amazon-EKS-cluster-endpoint
  3. 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
  4. Verifique os eventos do objeto SparkApplication com o seguinte comando:

    kubectl describe pod spark-pi --namespace spark-operator

    O 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