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. Otimizar uma carga de trabalho do Spark para performance e capacidade de recuperação pode ser difícil 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. Ele aplica automaticamente as configurações de configuração do Spark a uma carga de trabalho recorrente do Spark com base nas práticas recomendadas de otimização do Spark e em uma análise das execuções de carga de trabalho (chamadas de "coortes").

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

Para se inscrever e ter 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 Solicitação de acesso à prévia do Serviço Gerenciado para Apache Spark. 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 Serviço Gerenciado para Apache Spark oferece os seguintes benefícios:

  • Otimização automática: ajusta automaticamente as configurações ineficientes do Serviço Gerenciado para Apache Spark em lote 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 adaptadas à 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 a coortes de carga de trabalho em lote da seguinte maneira:

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

  • O ajuste automático não é aplicado de maneira retroativa às cargas de trabalho em execução, mas apenas às cargas de trabalho enviadas recentemente.

  • Ajuste automático aprende e melhora com o tempo ao analisar as estatísticas de coorte. Para permitir que o sistema colete dados suficientes, recomendamos manter a sintonia automática ativada por pelo menos cinco execuções.

Nomes de coorte: uma prática recomendada é usar nomes de coorte que ajudam a identificar o tipo de carga de trabalho recorrente. Por exemplo, é possível usar 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.

Cenários de ajuste automático

Quando aplicável, o ajuste automático seleciona e executa automaticamente as 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 de configuração do Spark para otimizar o desempenho da junção de transmissão do 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 console Google Cloud , 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 console do Google Cloud , 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:

    • Clique no 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 uma de uma série de cargas de trabalho recorrentes. Ajuste automático é aplicado à segunda e às próximas cargas de trabalho 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 diária de agregação de vendas.

  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:

  • COMMAND: o tipo de carga de trabalho do Spark, como Spark, PySpark, Spark-Sql ou Spark-R.
  • REGION: a região em que sua carga de trabalho em lote será executada.
  • COHORT: o nome da coorte, que identifica o lote como uma de uma série de cargas de trabalho recorrentes. Ajuste automático é aplicado à segunda e às próximas cargas de trabalho 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 diária de agregação de vendas.
  • --autotuning-scenarios=auto: ative a sintonia automática.

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 solicitação batches.create que inclua os seguintes campos:

  • RuntimeConfig.cohort: o nome da coorte, que identifica o lote como uma de uma série de cargas de trabalho recorrentes. O ajuste automático é aplicado à segunda e às próximas cargas de trabalho 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 diária de agregação de vendas.
  • 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 do 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 API Java do Serviço gerenciado para Apache Spark.

Para autenticar o Serviço gerenciado para Apache Spark, 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 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 uma série de cargas de trabalho recorrentes. O ajuste automático é aplicado à segunda e às próximas cargas de trabalho 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 diária de agregação de vendas.
  • 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. Use 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 do 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 API Python do Serviço gerenciado para Apache Spark.

Para autenticar o Serviço gerenciado para Apache Spark, 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 Serviço Gerenciado para Apache Spark 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 uma série de cargas de trabalho recorrentes. O ajuste automático é aplicado à segunda e às próximas cargas de trabalho 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 diária de agregação de vendas.
  • 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 adicionar ao seu projeto, use o seguinte requisito:

google-cloud-dataproc>=5.10.1

Airflow

Em vez de enviar manualmente cada coorte de lote com ajuste automático, use o Airflow para programar o envio de cada carga de trabalho em lote recorrente. Para fazer isso, 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 uma série de cargas de trabalho recorrentes. O ajuste automático é aplicado à segunda e às próximas cargas de trabalho 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 diária de agregação de vendas.
  • 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 sintonia automática

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 comando gcloud dataproc batches describe.

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 mais recentes de ajuste automático aplicadas a uma carga de trabalho em execução, concluída ou com falha na página Detalhes do lote do console do Google Cloud , 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 a visualização particular sem custo adicional. Os preços do Serviço Gerenciado para Apache Spark padrão são aplicáveis.