Ajuste automático de cargas de trabalho do Spark

Este documento contém informações sobre o ajuste automático de cargas de trabalho do Spark. Otimizar uma carga de trabalho do Spark para desempenho e resiliência pode ser desafiador devido ao número de opções de configuração do Spark e à dificuldade de avaliar como essas opções afetam uma carga de trabalho. O autoajuste do Dataproc Serverless oferece uma alternativa à configuração manual de cargas de trabalho, aplicando automaticamente as configurações do Spark a uma carga de trabalho recorrente com base nas práticas recomendadas de otimização do Spark e em uma análise das execuções de carga de trabalho.

Inscreva-se para o autoajuste do Dataproc sem servidor

Para se inscrever e ter acesso à versão de pré-lançamento de autoajuste do Dataproc sem servidor descrita nesta página, preencha e envie o formulário de inscrição do Gemini no BigQuery. Depois que o formulário é aprovado, os projetos listados nele têm acesso aos recursos de pré-lançamento.

Vantagens

O ajuste automático do Dataproc sem servidor oferece os seguintes benefícios:

  • Melhor desempenho: ajuste de otimização para aumentar a performance
  • Otimização mais rápida: configuração automática para evitar testes de configuração manuais demorados.
  • Maior resiliência: alocação automática de memória para evitar falhas relacionadas à memória.

Limitações

O ajuste automático do Dataproc sem servidor tem as seguintes limitações:

  • O ajuste automático é calculado e aplicado à segunda execução e às subsequentes de uma carga de trabalho. A primeira execução de uma carga de trabalho recorrente não é ajustada automaticamente porque o ajuste automático do Dataproc Serverless usa o histórico de carga de trabalho para otimização.
  • Não é possível reduzir a memória.
  • O ajuste automático não é aplicado retroativamente a cargas de trabalho em execução, apenas a coortes de carga de trabalho recém-enviadas.

Ajuste automático de coortes

O ajuste automático é aplicado a execuções recorrentes de uma carga de trabalho em lote, chamadas de coortes. O nome do grupo que você especifica ao enviar uma carga de trabalho identifica essa carga como uma das execuções sucessivas da carga de trabalho recorrente. Recomendamos que você use nomes de coorte que descrevam o tipo de carga de trabalho ou que ajudem a identificar as execuções de uma carga de trabalho como parte de uma carga de trabalho recorrente. Por exemplo, especifique daily_sales_aggregation como o nome da coorte de uma carga de trabalho programada que executa uma tarefa diária de agregação de vendas.

Cenários de ajuste automático

Para aplicar a autoajuste do Dataproc sem servidor à sua carga de trabalho, selecione um ou mais dos seguintes cenários de autoajuste:

  • MEMORY: Autoajuste da alocação de memória do Spark para prever e evitar possíveis erros de falta de memória da carga de trabalho. Corrija uma carga de trabalho com falha anterior devido a um erro de falta de memória (OOM).
  • SCALING: Autotune das configurações de configuração do escalonamento automático do Spark.
  • BROADCAST_HASH_JOIN: ajuste automático das configurações do Spark para otimizar o desempenho da mesclagem de transmissão SQL.

Preços

A autoajuste do Dataproc Serverless é oferecida durante a visualização sem custo extra. Os preços padrão do Dataproc sem servidor são aplicáveis.

Disponibilidade regional

É possível usar a autoconfiguração do Dataproc Serverless com lotes enviados em regiões disponíveis do Compute Engine.

Usar a autoajuste sem servidor do Dataproc

É possível ativar o ajuste automático do Dataproc Serverless em uma carga de trabalho usando o console do Google Cloud, a Google Cloud CLI ou a API Dataproc.

Console

Para ativar a autoconfiguração do Dataproc Serverless em cada envio de uma carga de trabalho em lote recorrente, siga estas etapas:

  1. No console do Google Cloud, acesse a página Lotes do Dataproc.

    Acessar Lotes do Dataproc

  2. Para criar uma carga de trabalho em lote, clique em Criar.

  3. Na seção Container, preencha os seguintes campos para sua carga de trabalho do Spark:

    • Cohorte:o nome da cohorte, que identifica o lote como um de uma série de cargas de trabalho recorrentes. O ajuste automático é aplicado à segunda carga de trabalho e às subsequentes que são enviadas com esse nome de coorte. Por exemplo, especifique daily_sales_aggregation como o nome da coorte de uma carga de trabalho programada que executa uma tarefa diária de agregação de vendas.

    • Cenários de ajuste automático:um ou mais cenários de ajuste automático para usar e otimizar a carga de trabalho. Por exemplo, BROADCAST_HASH_JOIN, MEMORY e SCALING. Você pode mudar a seleção de cenário a cada envio de coorte de lote.

  4. Preencha outras seções da página Criar lote conforme necessário e clique em Enviar. Para mais informações sobre esses campos, consulte Enviar uma carga de trabalho em lote.

gcloud

Para ativar o ajuste automático do Dataproc Serverless em cada envio de uma carga de lote recorrente, execute o comando gcloud dataproc batches submit da CLI gcloud localmente em uma janela de terminal ou no Cloud Shell.

gcloud dataproc batches submit COMMAND \
    --region=REGION \
    --cohort=COHORT \
    --autotuning-scenarios=SCENARIOS \
    other arguments ...

Substitua:

  • COMMAND: o tipo de carga de trabalho do Spark, como Spark, PySpark, Spark-Sql ou Spark-R.
  • REGION: a região em que a carga de trabalho será executada.
  • COHORT: o nome da coorte, que identifica o lote como um de uma série de cargas de trabalho recorrentes. O ajuste automático é aplicado à segunda carga de trabalho e às subsequentes enviadas com esse nome de coorte. Por exemplo, especifique daily_sales_aggregation como o nome da coorte de uma carga de trabalho programada que executa uma tarefa diária de agregação de vendas.

  • SCENARIOS: um ou mais cenários de autoajuste separados por vírgulas para usar e otimizar a carga de trabalho, por exemplo, --autotuning-scenarios=MEMORY,SCALING. Você pode mudar a lista de cenários com cada envio de coorte de lote.

API

Para ativar o ajuste automático do Dataproc Serverless em cada envio de uma carga de trabalho em lote recorrente, envie uma solicitação batches.create que inclua os seguintes campos:

  • RuntimeConfig.cohort: o nome da coorte, que identifica o lote como um de uma série de cargas de trabalho recorrentes. O ajuste automático é aplicado à segunda carga de trabalho e às cargas de trabalho subsequentes enviadas com esse nome de coorte. Por exemplo, especifique daily_sales_aggregation como o nome da coorte de uma carga de trabalho programada que executa uma tarefa diária de agregação de vendas.
  • AutotuningConfig.scenarios: um ou mais cenários de autoajuste para usar e otimizar a carga de trabalho. Por exemplo, BROADCAST_HASH_JOIN, MEMORY e SCALING. Você pode mudar a lista de cenários com cada envio de coorte de lote.

Exemplo:

...
runtimeConfig:
  cohort: daily_sales_aggregation
  autotuningConfig:
    scenarios:
    - BROADCAST_HASH_JOIN
    - MEMORY
    - SCALING
...

Java

Antes de testar este exemplo, siga as instruções de configuração do Java no Guia de início rápido do Dataproc Serverless: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Java do Dataproc sem servidor.

Para autenticar no Dataproc Serverless, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

Para ativar o ajuste automático do Dataproc Serverless em cada envio de uma carga de trabalho em lote recorrente, chame BatchControllerClient.createBatch com uma CreateBatchRequest que inclua os seguintes campos:

  • Batch.RuntimeConfig.cohort: o nome da coorte, que identifica o lote como um de uma série de cargas de trabalho recorrentes. O ajuste automático é aplicado à segunda carga de trabalho e às cargas de trabalho subsequentes enviadas com esse nome de coorte. Por exemplo, você pode especificar daily_sales_aggregation como o nome da coorte para uma carga de trabalho programada que executa uma tarefa diária de agregação de vendas.
  • Batch.RuntimeConfig.AutotuningConfig.scenarios: um ou mais cenários de autoajuste para usar e otimizar a carga de trabalho, como BROADCAST_HASH_JOIN, MEMORY, SCALING. Você pode mudar a lista de cenários com cada envio de coorte de lote. Para conferir a lista completa de cenários, consulte o Javadoc AutotuningConfig.Scenario.

Exemplo:

...
Batch batch =
  Batch.newBuilder()
    .setRuntimeConfig(
      RuntimeConfig.newBuilder()
        .setCohort("daily_sales_aggregation")
        .setAutotuningConfig(
          AutotuningConfig.newBuilder()
            .addScenarios(Scenario.SCALING))
    ...
  .build();

batchControllerClient.createBatch(
    CreateBatchRequest.newBuilder()
        .setParent(parent)
        .setBatchId(batchId)
        .setBatch(batch)
        .build());
...

Para usar a API, você precisa usar a versão 4.43.0 ou mais recente da biblioteca de cliente google-cloud-dataproc. Use uma das configurações a seguir para adicionar a biblioteca ao projeto.

Maven

<dependencies>
 <dependency>
   <groupId>com.google.cloud</groupId>
   <artifactId>google-cloud-dataproc</artifactId>
   <version>4.43.0</version>
 </dependency>
</dependencies>

Gradle

implementation 'com.google.cloud:google-cloud-dataproc:4.43.0'

SBT

libraryDependencies += "com.google.cloud" % "google-cloud-dataproc" % "4.43.0"

Python

Antes de testar este exemplo, siga as instruções de configuração do Python no Guia de início rápido do Dataproc Serverless: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Python do Dataproc sem servidor.

Para autenticar no Dataproc Serverless, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

Para ativar o ajuste automático do Dataproc Serverless em cada envio de uma carga de trabalho em lote recorrente, chame BatchControllerClient.create_batch com um Batch que inclua os seguintes campos:

  • batch.runtime_config.cohort: o nome da coorte, que identifica o lote como um de uma série de cargas de trabalho recorrentes. O ajuste automático é aplicado à segunda carga de trabalho e às cargas de trabalho subsequentes enviadas com esse nome de coorte. Por exemplo, você pode especificar daily_sales_aggregation como o nome da coorte para uma carga de trabalho programada que executa uma tarefa diária de agregação de vendas.
  • batch.runtime_config.autotuning_config.scenarios: um ou mais cenários de autoajuste a serem usados para otimizar a carga de trabalho, como BROADCAST_HASH_JOIN, MEMORY e SCALING. É possível mudar a lista de cenários com cada envio de coorte em lote. Para conferir a lista completa de cenários, consulte a referência do cenário.

Exemplo:

# Create a client
client = dataproc_v1.BatchControllerClient()

# Initialize request argument(s)
batch = dataproc_v1.Batch()
batch.pyspark_batch.main_python_file_uri = "gs://bucket/run_tpcds.py"
batch.runtime_config.cohort = "daily_sales_aggregation"
batch.runtime_config.autotuning_config.scenarios = [
    Scenario.SCALING
]

request = dataproc_v1.CreateBatchRequest(
    parent="parent_value",
    batch=batch,
)

# Make the request
operation = client.create_batch(request=request)

Para usar a API, você precisa usar a versão 5.10.1 ou mais recente da biblioteca de cliente google-cloud-dataproc. Para adicionar ao seu projeto, use o seguinte requisito:

google-cloud-dataproc>=5.10.1

Airflow

Para ativar o ajuste automático do Dataproc Serverless em cada envio de uma carga de trabalho em lote recorrente, chame BatchControllerClient.create_batch com um Batch que inclua os seguintes campos:

  • batch.runtime_config.cohort: o nome da coorte, que identifica o lote como um de uma série de cargas de trabalho recorrentes. O ajuste automático é aplicado à segunda carga de trabalho e às cargas de trabalho subsequentes enviadas com esse nome de coorte. Por exemplo, você pode especificar daily_sales_aggregation como o nome da coorte para uma carga de trabalho programada que executa uma tarefa diária de agregação de vendas.
  • batch.runtime_config.autotuning_config.scenarios: um ou mais cenários de autoajuste para usar e otimizar a carga de trabalho, por exemplo, BROADCAST_HASH_JOIN, MEMORY,SCALING. É possível mudar a lista de cenários com cada envio de coorte de lote. Para conferir a lista completa de cenários, consulte a referência do cenário.

Exemplo:

create_batch = DataprocCreateBatchOperator(
    task_id="batch_create",
    batch={
        "pyspark_batch": {
            "main_python_file_uri": PYTHON_FILE_LOCATION,
        },
        "environment_config": {
            "peripherals_config": {
                "spark_history_server_config": {
                    "dataproc_cluster": PHS_CLUSTER_PATH,
                },
            },
        },
        "runtime_config": {
            "cohort": "daily_sales_aggregation",
            "autotuning_config": {
                "scenarios": [
                    Scenario.SCALING,
                ]
            }
        },
    },
    batch_id="BATCH_ID",
)

Para usar a API, você precisa usar a versão 5.10.1 ou mais recente da biblioteca de cliente google-cloud-dataproc. Você pode usar o seguinte requisito de ambiente do Airflow:

google-cloud-dataproc>=5.10.1

Para atualizar o pacote no Cloud Composer, consulte Instalar dependências do Python no Cloud Composer .

Conferir mudanças de ajuste automático

Para conferir as mudanças de ajuste automático do Dataproc Serverless em uma carga de trabalho em lote, execute o comando gcloud dataproc batches describe.

Exemplo: a saída gcloud dataproc batches describe é semelhante a esta:

...
runtimeInfo:
   propertiesInfo:
    # Properties set by autotuning.
    autotuningProperties
      spark.driver.memory:
        annotation: Driver OOM was detected
        value: 11520m
      spark.driver.memoryOverhead:
        annotation: Driver OOM was detected
        value: 4608m
    # Old overwritten properties.
    userProperties
...

É possível conferir as últimas mudanças de ajuste automático aplicadas a uma carga de trabalho em execução, concluída ou com falha na página Detalhes do lote no console do Google Cloud, na guia Investigar.

Painel de investigação de ajuste automático.