Este documento mostra como ativar as melhorias de desempenho do Spark no Dataproc para ajudar seus jobs do Spark no Dataproc a processar mais dados em menos tempo com custos reduzidos.
As melhorias de desempenho do Spark no Dataproc incluem:
- Melhorias no otimizador do Spark:
- Regras do otimizador escritas para melhores planos do Spark
- Melhoria na performance do conector do BigQuery do Dataproc 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 Dataproc:consulte o armazenamento em cache de clusters do Dataproc, 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, sejam eles enviados ao serviço do Dataproc 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 do Dataproc. As configurações de melhorias de desempenho do Spark aplicadas a um job substituem as configurações conflitantes definidas no nível do cluster apenas para o job especificado.
Preços
As melhorias no desempenho do Spark não geram cobranças adicionais. São aplicáveis os preços padrão do Dataproc no Compute Engine.
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 como1000
para clusters da versão de imagem2.2
. Essa configuração pode deixar os 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 falta de memória.
Ativar melhorias na criação do cluster
É possível usar o console Google Cloud , a CLI do Google Cloud e a API do Dataproc para ativar as melhorias de desempenho do Spark no Dataproc ao criar um cluster do Dataproc com versões de imagem 2.0.69+, 2.1.17+, 2.2.0+ e versões de imagem mais recentes.
Console
- No console do Google Cloud , abra a página Criar um cluster do Dataproc.
- No formulário Criar cluster do Dataproc, clique em Criar na linha Cluster no Compute Engine.
- Na página Criar um cluster do Dataproc no Compute Engine,
clique no painel Personalizar cluster e role até a seção
Propriedades do cluster.
- Para ativar as melhorias de otimização do Spark:
- Clique em + ADICIONAR PROPRIEDADES.
- Selecione spark na lista Prefixo e adicione "spark.dataproc.enhanced.optimizer.enabled" no campo Chave e "true" no campo Valor.
- Para ativar as melhorias na execução do Spark:
- Clique em + ADICIONAR PROPRIEDADES.
- Selecione spark na lista Prefixo e adicione "spark.dataproc.enhanced.execution.enabled" no campo Chave e "true" no campo Valor.
- Para ativar as melhorias de otimização do Spark:
- Preencha ou confirme os outros campos de criação de cluster e clique em Criar.
gcloud
Execute localmente o seguinte comando gcloud dataproc clusters create 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 hífens. 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 vai estar localizado, como
us-central1
.- Você pode adicionar a flag opcional
--zone=ZONE
para especificar uma zona dentro da região especificada, comous-central1-a
. Se você não especificar uma zona, o recurso de posição de zona automática do Dataproc vai selecionar uma zona com a região especificada.
- Você pode adicionar a flag opcional
- IMAGE: o otimizador do Spark do Dataproc e as melhorias de desempenho de execução estão disponíveis nas versões de imagem
2.0.69+
e2.1.17+
do Dataproc e em versões mais recentes. Se você omitir essa flag, o Dataproc vai selecionar a versão subalterna mais recente da imagem padrão do Dataproc no Compute Engine para o cluster (consulte Versão padrão da imagem do Dataproc). PROPERTIES:
- Para ativar as melhorias de otimização do Spark, especifique:
spark:spark.dataproc.enhanced.optimizer.enabled=true
- Para ativar as melhorias na 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
Especifique o seguinte
SoftwareConfig.properties
como parte de uma solicitaçãoclusters.create
:- Para ativar as melhorias de otimização do Spark, especifique:
"spark:spark.dataproc.enhanced.optimizer.enabled": "true"
- Para ativar as melhorias na 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 console Google Cloud , a CLI do Google Cloud e a API Dataproc para ativar ou desativar as melhorias de desempenho do Spark em um job do Spark enviado ao serviço Dataproc.
Console
- No console do Google Cloud , abra a página Jobs do Dataproc.
- Na página Jobs, clique em Enviar job e role a tela até a seção Propriedades.
- Para ativar as melhorias de otimização do Spark:
- Clique em + ADICIONAR PROPRIEDADES. Adicione "spark.dataproc.enhanced.optimizer.enabled" no campo Chave e "true" no campo Valor.
- Para ativar as melhorias na execução do Spark:
- Clique em + ADICIONAR PROPRIEDADES.
- Adicione "spark.dataproc.enhanced.execution.enabled" no campo Chave e "true" no campo Valor.
- Para ativar as melhorias de otimização do Spark:
- Preencha ou confirme os outros campos de envio de job e clique em Enviar.
gcloud
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
ouspark-r
. - CLUSTER_NAME: o nome do job em que ele 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 na 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
- SPARK_JOB_TYPE: especifique
API
Especifique os seguintes
properties
para um SparkJob, PySparkJob, SparkSqlJob ou SparkRJob como parte de uma solicitaçãojobs.submit
:- Para ativar as melhorias de otimização do Spark, especifique:
"spark.dataproc.enhanced.optimizer.enabled=true"
- Para ativar as melhorias na 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"