Melhoramentos do desempenho do Spark no Dataproc

Este documento mostra como ativar as melhorias de desempenho do Dataproc Spark para ajudar as tarefas do Dataproc Spark a processar mais dados em menos tempo com custos reduzidos.

As melhorias de desempenho do Dataproc Spark incluem:

  • Melhoramentos do otimizador do Spark:
    • Regras do otimizador escritas para melhores planos do Spark
    • Desempenho melhorado do conetor do Dataproc BigQuery quando usado em tarefas do Spark
  • Melhoramentos da execução do Spark:
    • Melhorias no motor de execução do Spark

Outras melhorias de desempenho do Dataproc: consulte a secção sobre a colocação em cache de clusters do Dataproc, que ajuda a reduzir o tempo gasto no acesso a dados no Cloud Storage.

Pode ativar as melhorias de desempenho do Spark num cluster ou num trabalho do Spark:

  • As melhorias de desempenho do Spark ativadas num cluster aplicam-se, por predefinição, a todas as tarefas do Spark executadas no cluster, quer sejam enviadas para o serviço Dataproc ou enviadas diretamente para o cluster.

  • As melhorias de desempenho do Spark também podem ser ativadas ou desativadas numa tarefa enviada para o serviço Dataproc. As definições de melhorias de desempenho do Spark aplicadas a uma tarefa substituem quaisquer definições em conflito definidas ao nível do cluster apenas para a tarefa especificada.

Preços

As melhorias de desempenho do Spark não incorrem em encargos adicionais. Aplicam-se os preços do Dataproc no Compute Engine padrão.

Considerações

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

  • spark.sql.shuffle.partitions: Os melhoramentos de desempenho do Spark definem esta propriedade como 1000 para clusters da versão de imagem 2.2. Esta definição pode tornar as tarefas pequenas mais lentas.
  • spark.dataproc.sql.catalog.file.index.stats.enabled: Esta definição pode resultar em condições de OOM (sem memória) do controlador se o número de partições do Hive for elevado. A desativação desta propriedade pode corrigir a condição de falta de memória.

Ative melhoramentos na criação de clusters

Pode usar a Google Cloud consola, a CLI Google Cloud e a API Dataproc para ativar as melhorias de desempenho do Dataproc Spark quando cria um cluster Dataproc com versões de imagens 2.0.69+, 2.1.17+, 2.2.0+ e lançamentos de imagens posteriores.

Consola

  1. Na Google Cloud consola, abra a página do Dataproc Criar um cluster.
  2. No formulário Criar cluster do Dataproc, clique em Criar na linha Cluster no Compute Engine.
  3. Na página Crie um cluster do Dataproc no Compute Engine, clique no painel Personalizar cluster e, de seguida, desloque a página até à secção Propriedades do cluster.
    1. Para ativar os melhoramentos de otimização do Spark:
      1. Clique em + ADICIONAR PROPRIEDADES.
      2. Selecione spark na lista Prefixo e, de seguida, adicione "spark.dataproc.enhanced.optimizer.enabled" no campo Chave e "true" no campo Valor.
    2. Para ativar os melhoramentos de execução do Spark:
      1. Clique em + ADICIONAR PROPRIEDADES.
      2. Selecione spark na lista Prefixo e, de seguida, adicione "spark.dataproc.enhanced.execution.enabled" no campo Chave e "true" no campo Valor.
  4. Conclua o preenchimento ou a confirmação dos outros campos de criação de clusters e, de seguida, clique em Criar.

gcloud

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

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

    Notas:

    • CLUSTER_NAME: o nome do cluster, que tem de ser exclusivo num projeto. O nome tem de começar por uma letra minúscula e pode conter até 51 letras minúsculas, números e hífenes. Não pode terminar com um hífen. O nome de um cluster eliminado pode ser reutilizado.
    • PROJECT_ID: o projeto a associar ao cluster.
    • REGION: a região do Compute Engine onde o cluster vai estar localizado, como us-central1.
      • Pode adicionar a flag --zone=ZONE opcional para especificar uma zona na região especificada, como us-central1-a. Se não especificar uma zona, a funcionalidade de posicionamento automático de zonas do Dataproc seleciona uma zona com a região especificada.
    • IMAGE: As melhorias de desempenho de execução e do otimizador do Spark do Dataproc estão disponíveis nas versões de imagem do Dataproc 2.0.69+ e 2.1.17+ e lançamentos posteriores. Se omitir esta flag, o Dataproc seleciona a versão subminor mais recente da imagem predefinida do Dataproc no Compute Engine para o cluster (consulte Versão da imagem predefinida do Dataproc).
    • PROPERTIES:

      • Para ativar os melhoramentos de otimização do Spark, especifique:
      spark:spark.dataproc.enhanced.optimizer.enabled=true
      
      • Para ativar os melhoramentos da execução do Spark, especifique:
      spark:spark.dataproc.enhanced.execution.enabled=true
      
      • Para ativar a otimização e as melhorias de 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 um pedido clusters.create:

    • Para ativar os melhoramentos de otimização do Spark, especifique:
    "spark:spark.dataproc.enhanced.optimizer.enabled": "true"
    
    • Para ativar os melhoramentos da 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"
    

Ative ou desative melhoramentos no envio de tarefas

Pode usar a Google Cloud consola, a CLI do Google Cloud e a API Dataproc para ativar ou desativar as melhorias de desempenho do Spark numa tarefa do Spark enviada para o serviço Dataproc.

Consola

  1. Na Google Cloud consola, abra a página Dataproc Tarefas.
  2. Na página Tarefas, clique em Enviar tarefa e, de seguida, desloque a página até à secção Propriedades.
    1. Para ativar os melhoramentos 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 os melhoramentos 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 tarefas e, de seguida, clique em Enviar.

gcloud

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

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

    Notas:

    • SPARK_JOB_TYPE: especifique spark, pyspark, spark-sql ou spark-r .
    • CLUSTER_NAME: o nome da tarefa onde a tarefa vai ser executada.
    • REGION: a região onde o cluster está localizado.
    • PROPERTIES:

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

API

  1. Especifique o seguinte properties para um SparkJob, PySparkJob, SparkSqlJob ou SparkRJob como parte de um pedido jobs.submit:

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

Google Cloud