Ce document fournit des informations sur l'optimisation automatique des charges de travail par lot Serverless pour Apache Spark. L'optimisation d'une charge de travail Spark pour les performances et la résilience peut s'avérer difficile en raison du nombre d'options de configuration Spark et de la difficulté d'évaluer l'impact de ces options sur une charge de travail. L'optimisation automatique de Serverless pour Apache Spark offre une alternative à la configuration manuelle des charges de travail. Elle applique automatiquement les paramètres de configuration Spark à une charge de travail Spark récurrente en fonction des bonnes pratiques d'optimisation Spark et d'une analyse des exécutions de charge de travail (appelées "cohortes").
S'inscrire à l'optimisation automatique de Serverless pour Apache Spark
Pour demander l'accès à la version Preview de l'optimisation automatique de Serverless pour Apache Spark décrite sur cette page, remplissez et envoyez le formulaire d'inscription Demande d'accès à la version Preview de Dataproc. Une fois le formulaire approuvé, les projets listés dans le formulaire ont accès aux fonctionnalités en version preview.
Avantages
L'optimisation automatique de Serverless pour Apache Spark peut offrir les avantages suivants :
- Optimisation automatique : ajustez automatiquement les configurations Spark et par lot Serverless pour Apache Spark inefficaces, ce qui peut accélérer les durées d'exécution des jobs.
- Apprentissage historique : apprenez à partir des exécutions récurrentes pour appliquer des recommandations adaptées à votre charge de travail.
Cohortes de réglage automatique
Le réglage automatique est appliqué aux exécutions récurrentes (cohortes) d'une charge de travail par lot.
Le nom de cohorte que vous spécifiez lorsque vous envoyez une charge de travail par lot l'identifie comme l'une des exécutions successives de la charge de travail récurrente.
L'optimisation automatique est appliquée aux cohortes de charges de travail par lot comme suit :
Le réglage automatique est calculé et appliqué à la deuxième cohorte et aux suivantes d'une charge de travail. L'optimisation automatique n'est pas appliquée à la première exécution d'une charge de travail récurrente, car elle utilise l'historique des charges de travail pour l'optimisation.
Le réglage automatique n'est pas appliqué rétroactivement aux charges de travail en cours d'exécution. Il ne l'est qu'aux charges de travail nouvellement envoyées.
Le réglage automatique apprend et s'améliore au fil du temps en analysant les statistiques de la cohorte. Pour permettre au système de collecter suffisamment de données, nous vous recommandons de laisser le réglage automatique activé pendant au moins cinq exécutions.
Noms de cohortes : nous vous recommandons d'utiliser des noms de cohortes qui vous aident à identifier le type de charge de travail récurrente. Par exemple, vous pouvez utiliser daily_sales_aggregation comme nom de cohorte pour une charge de travail planifiée qui exécute une tâche d'agrégation des ventes quotidiennes.
Scénarios de réglage automatique
Le réglage automatique sélectionne et exécute automatiquement les scenarios ou objectifs suivants pour optimiser une charge de travail par lot :
- Scaling : paramètres de configuration de l'autoscaling Spark.
- Optimisation des jointures : paramètres de configuration Spark pour optimiser les performances des jointures de diffusion SQL.
Utiliser l'optimisation automatique de Serverless pour Apache Spark
Vous pouvez activer le réglage automatique de Serverless pour Apache Spark sur une charge de travail par lot à l'aide de la console Google Cloud , de Google Cloud CLI, de l'API Dataproc ou des bibliothèques clientes Cloud.
Console
Pour activer le réglage automatique de Serverless pour Apache Spark à chaque envoi d'une charge de travail par lot récurrente, procédez comme suit :
Dans la console Google Cloud , accédez à la page Lots de Dataproc.
Pour créer une charge de travail par lot, cliquez sur Créer.
Dans la section Réglage automatique :
Activez le bouton Activer pour activer le réglage automatique de la charge de travail Spark.
Cohorte : saisissez le nom de la cohorte, qui identifie le lot comme faisant partie d'une série de charges de travail récurrentes. Le réglage automatique est appliqué à la deuxième charge de travail et aux suivantes qui sont envoyées avec ce nom de cohorte. Par exemple, spécifiez
daily_sales_aggregationcomme nom de cohorte pour une charge de travail par lot planifiée qui exécute une tâche d'agrégation des ventes quotidiennes.
Remplissez les autres sections de la page Créer un lot selon vos besoins, puis cliquez sur Envoyer. Pour en savoir plus sur ces champs, consultez Envoyer une charge de travail par lot.
gcloud
Pour activer l'optimisation automatique de Serverless pour Apache Spark à chaque envoi d'une charge de travail par lot récurrente, exécutez la commande gcloud CLI gcloud dataproc batches submit en local dans une fenêtre de terminal ou dans Cloud Shell.
gcloud dataproc batches submit COMMAND \ --region=REGION \ --cohort=COHORT \ --autotuning-scenarios=auto \ other arguments ...
Remplacez les éléments suivants :
- COMMAND : type de charge de travail Spark, tel que
Spark,PySpark,Spark-SqlouSpark-R. - REGION : région dans laquelle votre charge de travail par lot sera exécutée.
- COHORT : nom de la cohorte, qui identifie le lot comme faisant partie d'une série de charges de travail récurrentes.
Le réglage automatique est appliqué à la deuxième charge de travail et aux suivantes qui sont envoyées avec ce nom de cohorte. Par exemple, spécifiez
daily_sales_aggregationcomme nom de cohorte pour une charge de travail par lot programmée qui exécute une tâche d'agrégation des ventes quotidiennes. --autotuning-scenarios=auto: active l'optimisation automatique.
API
Pour activer l'optimisation automatique de Serverless pour Apache Spark à chaque envoi d'une charge de travail par lot récurrente, envoyez une requête batches.create qui inclut les champs suivants :
RuntimeConfig.cohort: nom de la cohorte, qui identifie le lot comme faisant partie d'une série de charges de travail récurrentes. Le réglage automatique est appliqué à la deuxième charge de travail et aux suivantes envoyées avec ce nom de cohorte. Par exemple, spécifiezdaily_sales_aggregationcomme nom de cohorte pour une charge de travail par lot planifiée qui exécute une tâche d'agrégation des ventes quotidiennes.AutotuningConfig.scenarios: spécifiezAUTOpour activer l'optimisation automatique sur la charge de travail par lot Spark.
Exemple :
...
runtimeConfig:
cohort: COHORT_NAME
autotuningConfig:
scenarios:
- AUTO
...
Java
Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du guide de démarrage rapide de Serverless pour Apache Spark : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Serverless pour Apache Spark en langage Java.
Pour vous authentifier auprès de Serverless pour Apache Spark, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Pour activer l'optimisation automatique de Serverless pour Apache Spark à chaque envoi d'une charge de travail par lot récurrente, appelez BatchControllerClient.createBatch avec une CreateBatchRequest qui inclut les champs suivants :
Batch.RuntimeConfig.cohort: nom de la cohorte, qui identifie le lot comme faisant partie d'une série de charges de travail récurrentes. Le réglage automatique est appliqué à la deuxième charge de travail et aux suivantes envoyées avec ce nom de cohorte. Par exemple, vous pouvez spécifierdaily_sales_aggregationcomme nom de cohorte pour une charge de travail par lot planifiée qui exécute une tâche d'agrégation des ventes quotidiennes.Batch.RuntimeConfig.AutotuningConfig.scenarios: spécifiezAUTOpour activer le réglage automatique sur la charge de travail par lot Spark.
Exemple :
...
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());
...
Pour utiliser l'API, vous devez utiliser la version 4.43.0 ou ultérieure de la bibliothèque cliente google-cloud-dataproc. Vous pouvez utiliser l'une des configurations suivantes pour ajouter la bibliothèque à votre projet.
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
Avant d'essayer cet exemple, suivez les instructions de configuration pour Python du guide de démarrage rapide de Serverless pour Apache Spark : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Serverless pour Apache Spark en langage Python.
Pour vous authentifier auprès de Serverless pour Apache Spark, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Pour activer l'optimisation automatique de Serverless pour Apache Spark à chaque envoi d'une charge de travail par lot récurrente, appelez BatchControllerClient.create_batch avec un Batch qui inclut les champs suivants :
batch.runtime_config.cohort: nom de la cohorte, qui identifie le lot comme faisant partie d'une série de charges de travail récurrentes. Le réglage automatique est appliqué à la deuxième charge de travail et aux suivantes envoyées avec ce nom de cohorte. Par exemple, vous pouvez spécifierdaily_sales_aggregationcomme nom de cohorte pour une charge de travail par lot planifiée qui exécute une tâche d'agrégation des ventes quotidiennes.batch.runtime_config.autotuning_config.scenarios: spécifiezAUTOpour activer le réglage automatique sur la charge de travail par lot Spark.
Exemple :
# 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)
Pour utiliser l'API, vous devez utiliser la version 5.10.1 ou ultérieure de la bibliothèque cliente google-cloud-dataproc. Pour l'ajouter à votre projet, vous pouvez utiliser l'exigence suivante :
google-cloud-dataproc>=5.10.1
Airflow
Au lieu d'envoyer manuellement chaque cohorte de lot optimisée, vous pouvez utiliser Airflow pour planifier l'envoi de chaque charge de travail par lot récurrente. Pour ce faire, appelez BatchControllerClient.create_batch avec un Batch qui inclut les champs suivants :
batch.runtime_config.cohort: nom de la cohorte, qui identifie le lot comme faisant partie d'une série de charges de travail récurrentes. Le réglage automatique est appliqué à la deuxième charge de travail et aux suivantes envoyées avec ce nom de cohorte. Par exemple, vous pouvez spécifierdaily_sales_aggregationcomme nom de cohorte pour une charge de travail par lot planifiée qui exécute une tâche d'agrégation des ventes quotidiennes.batch.runtime_config.autotuning_config.scenarios: spécifiezAUTOpour activer le réglage automatique sur la charge de travail par lot Spark.
Exemple :
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",
)
Pour utiliser l'API, vous devez utiliser la version 5.10.1 ou ultérieure de la bibliothèque cliente google-cloud-dataproc. Vous pouvez utiliser l'exigence suivante concernant l'environnement Airflow :
google-cloud-dataproc>=5.10.1
Pour mettre à jour le package dans Cloud Composer, consultez Installer des dépendances Python pour Cloud Composer .
Afficher les modifications apportées par le réglage automatique
Pour afficher les modifications apportées à l'optimisation automatique de Serverless pour Apache Spark pour une charge de travail par lot, exécutez la commande gcloud dataproc batches describe.
Exemple : le résultat de gcloud dataproc batches describe ressemble à ce qui suit :
...
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'
...
Vous pouvez consulter les dernières modifications de réglage automatique qui ont été appliquées à une charge de travail en cours d'exécution, terminée ou ayant échoué sur la page Détails du lot de la console Google Cloud , sous l'onglet Récapitulatif.

Tarifs
L'optimisation automatique de Serverless pour Apache Spark est proposée sans frais supplémentaires pendant la version bêta privée. La tarification standard de Serverless pour Apache Spark s'applique.