Ajustar automaticamente as cargas de trabalho em lote do Spark

Este documento fornece informações sobre o ajuste automático de cargas de trabalho em lote do Serviço Gerenciado para Apache Spark. A otimização de uma carga de trabalho do Spark para desempenho e resiliência pode ser desafiadora 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 ajuste automático do Serviço Gerenciado para Apache Spark oferece uma alternativa à configuração manual da carga 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 da carga de trabalho (chamadas de "coortes").

Inscrever-se no ajuste automático do Serviço Gerenciado para Apache Spark

Para se inscrever no acesso à versão de pré-lançamento do ajuste automático do Serviço Gerenciado para Apache Spark descrita nesta página, preencha e envie o formulário de inscrição de solicitação de acesso à prévia do Serviço Gerenciado para Apache Spark. Depois que o formulário for aprovado, os projetos listados nele terão acesso aos recursos de pré-lançamento.

Benefícios

O ajuste automático do Serviço Gerenciado para Apache Spark pode oferecer os seguintes benefícios:

  • Otimização automática: ajuste automaticamente as configurações ineficientes do Serviço Gerenciado para Apache Spark e do Spark, o que pode acelerar os tempos de execução do job.
  • Aprendizado histórico: aprenda com execuções recorrentes para aplicar recomendações personalizadas à sua carga de trabalho.

Coortes de ajuste automático

O ajuste automático é aplicado a execuções recorrentes (coortes) de uma carga de trabalho em lote.

O nome da coorte especificado ao enviar uma carga de trabalho em lote a identifica como uma das execuções sucessivas da carga de trabalho recorrente.

O ajuste automático é aplicado às coortes de carga de trabalho em lote da seguinte maneira:

  • O ajuste automático é calculado e aplicado à segunda e às coortes subsequentes de uma carga de trabalho. O ajuste automático não é aplicado à primeira execução de uma carga de trabalho recorrente porque o ajuste automático do Serviço Gerenciado para Apache Spark usa o histórico da carga de trabalho para otimização.

  • O ajuste automático não é aplicado retroativamente às cargas de trabalho em execução. Ele é aplicado apenas às cargas de trabalho recém-enviadas.

  • O ajuste automático aprende e melhora ao longo do tempo analisando as estatísticas da coorte. Para permitir que o sistema colete dados suficientes, recomendamos manter o ajuste automático ativado por pelo menos cinco execuções.

Nomes de coorte: uma prática recomendada é usar nomes de coorte que ajudem a identificar o tipo de carga de trabalho recorrente. Por exemplo, você pode usar daily_sales_aggregation como o nome da coorte para uma carga de trabalho programada que executa uma tarefa de agregação de vendas diárias.

Cenários de ajuste automático

Quando aplicável, o ajuste automático seleciona e executa automaticamente os seguintes scenarios ou metas para otimizar uma carga de trabalho em lote:

  • Escalonamento: configurações de escalonamento automático do Spark.
  • Otimização de junção: configurações do Spark para otimizar o desempenho da junção de transmissão SQL.

Usar o ajuste automático do Serviço Gerenciado para Apache Spark

É possível ativar o ajuste automático do Serviço Gerenciado para Apache Spark em uma carga de trabalho em lote usando o Google Cloud console, a Google Cloud CLI, a API Dataproc ou as bibliotecas de cliente do Cloud.

Console

Para ativar o ajuste automático do Serviço Gerenciado para Apache Spark em cada envio de uma carga de trabalho em lote recorrente, siga estas etapas:

  1. No Google Cloud console do, acesse a página Lotes do Serviço Gerenciado para Apache Spark.

    Acessar lotes do Serviço Gerenciado para Apache Spark

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

  3. Na seção Ajuste automático:

    • Ative o botão Ativar para ativar o ajuste automático da carga de trabalho do Spark.

    • Coorte: preencha 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 e às cargas de trabalho subsequentes enviadas com esse nome de coorte. Por exemplo, especifique daily_sales_aggregation como o nome da coorte para uma carga de trabalho em lote programada que executa uma tarefa de agregação de vendas diárias.

  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 Serviço Gerenciado para Apache Spark em cada envio de uma carga de trabalho em lote recorrente, execute o seguinte comando da CLI gcloud gcloud dataproc batches submit localmente em uma janela de terminal ou no Cloud Shell.

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

Substitua:

API

Para ativar o ajuste automático do Serviço Gerenciado para Apache Spark em cada envio de uma carga de trabalho em lote recorrente, envie uma 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 e às cargas de trabalho subsequentes enviadas com esse nome de coorte. Por exemplo, especifique daily_sales_aggregation como o nome da coorte para uma carga de trabalho em lote programada que executa uma tarefa de agregação de vendas diárias.
  • AutotuningConfig.scenarios: especifique AUTO para ativar o ajuste automático na carga de trabalho em lote do Spark.

Exemplo:

...
runtimeConfig:
  cohort: COHORT_NAME
  autotuningConfig:
    scenarios:
    - AUTO
...

Java

Antes de testar este exemplo, siga as instruções de configuração Java no Guia de início rápido do Serviço Gerenciado para Apache Spark: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da APIJava do Serviço Gerenciado para Apache Spark.

Para autenticar no Serviço Gerenciado para Apache Spark, configure o Application Default Credentials. Se quiser mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

Para ativar o ajuste automático do Serviço Gerenciado para Apache Spark em cada envio de uma carga de trabalho em lote recorrente, chame BatchControllerClient.createBatch com um 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 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 em lote programada que executa uma tarefa de agregação de vendas diárias.
  • Batch.RuntimeConfig.AutotuningConfig.scenarios: especifique AUTO para ativar o ajuste automático na carga de trabalho em lote do Spark.

Exemplo:

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

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

Para usar a API, é necessário usar a biblioteca de cliente google-cloud-dataproc versão 4.43.0 ou mais recente. É possível usar uma das seguintes configurações para adicionar a biblioteca ao seu 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 Python no Guia de início rápido do Serviço Gerenciado para Apache Spark: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da APIPython do Serviço Gerenciado para Apache Spark.

Para autenticar no Serviço Gerenciado para Apache Spark, configure o Application Default Credentials. Se quiser mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

Para ativar o ajuste automático do Serviço Gerenciado para Apache Spark em cada envio de uma carga de trabalho em lote recorrente, chame BatchControllerClient.create_batch com um lote 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 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 em lote programada que executa uma tarefa de agregação de vendas diárias.
  • batch.runtime_config.autotuning_config.scenarios: especifique AUTO para ativar o ajuste automático na carga de trabalho em lote do Spark.

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.AUTO
]

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

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

Para usar a API, é necessário usar a biblioteca de cliente google-cloud-dataproc versão 5.10.1 ou mais recente. Para adicioná-la ao seu projeto, use o seguinte requisito:

google-cloud-dataproc>=5.10.1

Airflow

Em vez de enviar cada coorte de lote ajustada automaticamente manualmente, você pode usar o Airflow para programar o envio de cada carga de trabalho em lote recorrente. Para fazer isso, chame BatchControllerClient.create_batch com um lote 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 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 em lote programada que executa uma tarefa de agregação de vendas diárias.
  • batch.runtime_config.autotuning_config.scenarios: especifique AUTO para ativar o ajuste automático na carga de trabalho em lote do Spark.

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.AUTO,
                ]
            }
        },
    },
    batch_id="BATCH_ID",
)

Para usar a API, é necessário usar a biblioteca de cliente google-cloud-dataproc versão 5.10.1 ou mais recente. É possível usar o seguinte requisito de ambiente do Airflow:

google-cloud-dataproc>=5.10.1

Para atualizar o pacote no Serviço Gerenciado para Apache Airflow, consulte Instalar dependências do Python para o Airflow gerenciado .

Conferir mudanças de ajuste automático

Para conferir as mudanças de ajuste automático do Serviço Gerenciado para Apache Spark em uma carga de trabalho em lote, execute o gcloud dataproc batches describe comando.

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

...
runtimeInfo:
  propertiesInfo:
    # Properties set by autotuning.
    autotuningProperties:
      spark.dataproc.sql.broadcastJoin.hints:
        annotation: Converted 1 Sort-Merge Joins to Broadcast Hash Join
        value: v2;Inner,<hint>
      spark.dynamicAllocation.initialExecutors:
        annotation: Adjusted Initial executors based on stages submitted in first
          2 minutes to 9
        overriddenValue: '2'
        value: '9'
      spark.dynamicAllocation.maxExecutors:
        annotation: Tuned Max executors to 11
        overriddenValue: '5'
        value: '11'
      spark.dynamicAllocation.minExecutors:
        annotation: Changed Min executors to 9
        overriddenValue: '2'
        value: '9'
...

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

Painel de resumo do ajuste automático.

Preços

O ajuste automático do Serviço Gerenciado para Apache Spark é oferecido durante o pré-lançamento particular sem custo adicional. Os preços padrão do Serviço Gerenciado para Apache Spark são aplicados.