Melhorias de performance do Serviço Gerenciado para Apache Spark

Este documento mostra como ativar as melhorias de desempenho do Spark do Serviço Gerenciado para Apache Spark para ajudar os jobs do Serviço Gerenciado para Apache Spark a processar mais dados em menos tempo e com custos reduzidos.

As melhorias de desempenho do Serviço Gerenciado para Apache Spark incluem:

  • Melhorias do otimizador do Spark:
    • Regras do otimizador escritas para planos melhores do Spark
    • Melhoria no desempenho do conector do Serviço Gerenciado para Apache Spark BigQuery quando usado em jobs do Spark
  • Melhorias na execução do Spark:
    • Melhorias no mecanismo de execução do Spark

Outras melhorias de desempenho do Serviço Gerenciado para Apache Spark: consulte o Serviço Gerenciado para Apache Spark armazenamento em cache de clusters, que ajuda a reduzir o tempo gasto no acesso a dados no Cloud Storage.

É possível ativar as melhorias de desempenho do Spark em um cluster ou em um job do Spark:

  • As melhorias de desempenho do Spark ativadas em um cluster são aplicadas, por padrão, a todos os jobs do Spark executados no cluster, enviados ao Serviço Gerenciado para Apache Spark ou enviados diretamente ao cluster.

  • As melhorias de desempenho do Spark também podem ser ativadas ou desativadas em um job enviado ao Serviço Gerenciado para Apache Spark. As configurações de melhorias de desempenho do Spark aplicadas a um job substituem todas as configurações conflitantes definidas no nível do cluster apenas para o job especificado.

Preços

As melhorias de desempenho do Spark não geram cobranças adicionais. Os preços padrão do Serviço Gerenciado para Apache Spark são aplicados.

Considerações

As melhorias de desempenho do Spark ajustam as propriedades do Spark, incluindo as seguintes:

  • spark.sql.shuffle.partitions: as melhorias de desempenho do Spark definem essa propriedade como 1000 para clusters da versão de imagem 2.2. Essa configuração pode deixar jobs pequenos mais lentos.
  • spark.dataproc.sql.catalog.file.index.stats.enabled: essa configuração pode resultar em condições de OOM (sem memória) do driver se a contagem de partições do Hive for alta. Desativar essa propriedade pode corrigir a condição de OOM.

Ativar melhorias na criação do cluster

É possível usar o Google Cloud console, a Google Cloud CLI e a API do Serviço Gerenciado para Apache Spark para ativar as melhorias de desempenho do Serviço Gerenciado para Apache Spark ao criar um cluster do Serviço Gerenciado para Apache Spark com as versões de imagem 2.0.69+, 2.1.17+, 2.2.0+ e versões de imagem mais recentes.

Console

  1. No Google Cloud console, abra a página Criar um cluster do Serviço Gerenciado para Apache Spark.
  2. No formulário Criar cluster do Serviço Gerenciado para Apache Spark, clique em Criar na linha Cluster.
  3. Na página Criar um cluster do Serviço Gerenciado para Apache Spark , clique no painel Personalizar cluster e role até a seção Propriedades do cluster.
    1. Para ativar as melhorias de otimização do Spark:
      1. Clique em + ADICIONAR PROPRIEDADES.
      2. Selecione spark na lista Prefixo e adicione "spark.dataproc.enhanced.optimizer.enabled" no campo Chave e "true" no campo Valor.
    2. Para ativar as melhorias de execução do Spark:
      1. Clique em + ADICIONAR PROPRIEDADES.
      2. Selecione spark na lista Prefixo e adicione "spark.dataproc.enhanced.execution.enabled" no campo Chave e "true" no campo Valor.
  4. Preencha ou confirme os outros campos de criação de cluster e clique em Criar.

gcloud

  1. Execute o seguinte comando gcloud dataproc clusters create localmente em uma janela de terminal ou no Cloud Shell.

    gcloud dataproc clusters create CLUSTER_NAME \
        --project=PROJECT_ID \
        --region=REGION \
        --image-version=IMAGE \
        --properties=PROPERTIES
    

    Observações:

    • CLUSTER_NAME: o nome do cluster, que precisa ser exclusivo em um projeto. O nome precisa começar com uma letra minúscula e pode conter até 51 letras minúsculas, números e hifens. Ele não pode terminar com um hífen. O nome de um cluster excluído pode ser reutilizado.
    • PROJECT_ID: o projeto a ser associado ao cluster.
    • REGION: a região do Compute Engine em que o cluster será localizado, como us-central1.
    • IMAGE: as melhorias de desempenho do otimizador e da execução do Serviço Gerenciado para Apache Spark estão disponíveis nas versões de imagem 2.0.69+ e 2.1.17+ e em versões mais recentes. Se você omitir essa flag, o Serviço Gerenciado para Apache Spark vai selecionar a versão secundária mais recente da imagem padrão do Serviço Gerenciado para Apache Spark para o cluster (consulte a versão de imagem padrão do Serviço Gerenciado para Apache Spark).
    • PROPERTIES:

      • Para ativar as melhorias de otimização do Spark, especifique:
      spark:spark.dataproc.enhanced.optimizer.enabled=true
      
      • Para ativar as melhorias de execução do Spark, especifique:
      spark:spark.dataproc.enhanced.execution.enabled=true
      
      • Para ativar as melhorias de otimização e execução do Spark, especifique:
      spark:spark.dataproc.enhanced.optimizer.enabled=true,spark:spark.dataproc.enhanced.execution.enabled=true
      

API

  1. Especifique o seguinte SoftwareConfig.properties como parte de uma solicitação clusters.create:

    • Para ativar as melhorias de otimização do Spark, especifique:
    "spark:spark.dataproc.enhanced.optimizer.enabled": "true"
    
    • Para ativar as melhorias de execução do Spark, especifique:
    "spark:spark.dataproc.enhanced.execution.enabled": "true"
    
    • Para ativar as melhorias de otimização e execução do Spark, especifique:
    "spark:spark.dataproc.enhanced.optimizer.enabled": "true","spark:spark.dataproc.enhanced.execution.enabled": "true"
    

Ativar ou desativar melhorias no envio de jobs

É possível usar o Google Cloud console, a Google Cloud CLI e a API do Serviço Gerenciado para Apache Spark para ativar ou desativar as melhorias de desempenho do Spark em um job do Spark enviado ao Serviço Gerenciado para Apache Spark.

Console

  1. No Google Cloud console, abra a página Jobs do Serviço Gerenciado para Apache Spark.
  2. Na página Jobs, clique em Enviar job e role até a seção Propriedades do job.
    1. Para ativar as melhorias de otimização do Spark:
      1. Clique em + ADICIONAR PROPRIEDADES. Adicione "spark.dataproc.enhanced.optimizer.enabled" no campo Chave e "true" no campo Valor.
    2. Para ativar as melhorias de execução do Spark:
      1. Clique em + ADICIONAR PROPRIEDADES.
      2. Adicione "spark.dataproc.enhanced.execution.enabled" no campo Chave e "true" no campo Valor.
  3. Preencha ou confirme os outros campos de envio de jobs e clique em Enviar.

gcloud

  1. Execute o seguinte comando gcloud dataproc jobs submit localmente em uma janela de terminal ou no Cloud Shell.

    gcloud dataproc jobs submit SPARK_JOB_TYPE \
        --cluster=CLUSTER_NAME \
        --region=REGION \
        --properties=PROPERTIES
    

    Observações:

    • SPARK_JOB_TYPE: especifique spark, pyspark, spark-sql ou spark-r .
    • CLUSTER_NAME: o nome do job em que o job será executado.
    • REGION: a região em que o cluster está localizado.
    • PROPERTIES:

      • Para ativar as melhorias de otimização do Spark, especifique:
      spark.dataproc.enhanced.optimizer.enabled=true
      
      • Para ativar as melhorias de execução do Spark, especifique:
      spark.dataproc.enhanced.execution.enabled=true
      
      • Para ativar as melhorias de otimização e execução do Spark, especifique:
      spark.dataproc.enhanced.optimizer.enabled=true,spark.dataproc.enhanced.execution.enabled=true
      

API

  1. Especifique os seguintes properties para um SparkJob, PySparkJob, SparkSqlJob, ou SparkRJob como parte de uma jobs.submit solicitação:

    • Para ativar as melhorias de otimização do Spark, especifique:
    "spark.dataproc.enhanced.optimizer.enabled=true"
    
    • Para ativar as melhorias de execução do Spark, especifique:
    "spark.dataproc.enhanced.execution.enabled=true"
    
    • Para ativar as melhorias de otimização e execução do Spark, especifique:
    "spark.dataproc.enhanced.execution.enabled=true,spark.dataproc.enhanced.optimizer.enabled=true"