Este documento fornece informações sobre o ajuste automático de cargas de trabalho em lote do Serverless 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 Serverless para Apache Spark oferece uma alternativa a 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").
Inscreva-se no ajuste automático do Serverless para Apache Spark
Para se inscrever no acesso à versão de pré-lançamento do ajuste automático do Serverless para Apache Spark descrita nesta página, preencha e envie o formulário de inscrição de solicitação de acesso ao pré-lançamento do Dataproc . Depois que o formulário for aprovado, os projetos listados nele terão 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 automaticamente as configurações ineficientes do Serverless 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 Serverless 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, mas 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 coortes: uma prática recomendada é usar nomes de coortes 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 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 Google Cloud console, a CLI do Google Cloud, 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:
No Google Cloud console, acesse a página Lotes do Dataproc.
Para criar uma carga de trabalho em lote, clique em Criar.
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 que são enviadas com esse nome de coorte. Por exemplo, especifique
daily_sales_aggregationcomo o nome da coorte para uma carga de trabalho em lote programada que executa uma tarefa de agregação de vendas diárias.
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 Serverless 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, ouSpark-R. - REGION: a região em que a carga de trabalho em lote 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 e às cargas de trabalho subsequentes que são
enviadas com esse nome de coorte. Por exemplo, especifique
daily_sales_aggregationcomo o nome da coorte para uma carga de trabalho em lote programada que executa uma tarefa de agregação de vendas diárias. --autotuning-scenarios=auto: ativa o ajuste automático.
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 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, especifiquedaily_sales_aggregationcomo 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: especifiqueAUTOpara 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 Serverless para Apache Spark: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da APIJava do 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 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 especificardaily_sales_aggregationcomo 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: especifiqueAUTOpara 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 Serverless para Apache Spark: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da APIPython do 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 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 especificardaily_sales_aggregationcomo 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: especifiqueAUTOpara 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 especificardaily_sales_aggregationcomo 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: especifiqueAUTOpara 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 ajuste automático
Para conferir as mudanças de ajuste automático do Serverless 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 no Google Cloud console, na guia Resumo.

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