Ajuste automático de cargas de trabalho em lote do Spark

Este documento fornece informações sobre o ajuste automático de cargas de trabalho em lote do Serverless 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 Serverless 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 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 Serverless para Apache Spark

Para se inscrever e ter acesso à versão de prévia do ajuste automático do Serverless para Apache Spark descrita nesta página, preencha e envie o formulário de inscrição Solicitação de acesso à prévia do Dataproc. 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 Serverless para Apache Spark pode oferecer os seguintes benefícios:

  • Otimização automática: ajuste automático de configurações ineficientes do Serverless 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 às 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 ele usa o histórico da carga 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.

  • A otimização automática 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 Serverless para Apache Spark

É possível ativar o ajuste automático do Serverless 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 Serverless para Apache Spark em cada envio de uma carga de trabalho em lote recorrente, siga estas etapas:

  1. No console 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 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. A otimização automática é aplicada à 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 Apache Spark sem servidor 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. A otimização automática é aplicada à 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 Serverless 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 esta amostra, siga as instruções de configuração do Java no Guia de início rápido do Serverless para Apache Spark: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Java Serverless para Apache Spark.

Para autenticar no Serverless 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 Serverless 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 esta amostra, siga as instruções de configuração do Python no Guia de início rápido do Serverless para Apache Spark: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Python Serverless para Apache Spark.

Para autenticar no Serverless 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 Serverless 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 Cloud Composer, consulte Instalar dependências do Python para o Cloud Composer .

Conferir mudanças de sintonia automática

Para conferir as mudanças de ajuste automático do Serverless 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 no console do Google Cloud , na guia Resumo.

Painel de resumo do ajuste automático.

Preços

O ajuste automático do Serverless para Apache Spark é oferecido durante a versão prévia privada sem custo adicional. Os preços do Serverless para Apache Spark padrão são aplicáveis.