Ce document fournit des informations sur le réglage 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 être 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. Le réglage automatique de Serverless pour Apache Spark constitue une alternative à la configuration manuelle des charges de travail. Il 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 la charge de travail (appelées "cohortes").
S'inscrire au réglage automatique de Serverless pour Apache Spark
Pour vous inscrire et accéder à la version preview du réglage automatique de Serverless pour Apache Spark décrite sur cette page, remplissez et envoyez le formulaire d'inscription à la 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
Le réglage automatique de Serverless pour Apache Spark peut offrir les avantages suivants :
- Optimisation automatique : réglez 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 tâches.
- Apprentissage historique : apprenez 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.
Le réglage automatique est appliqué 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. Il n'est pas appliqué à la première exécution d'une charge de travail récurrente car le réglage automatique de Serverless pour Apache Spark 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 est appliqué uniquement aux charges de travail nouvellement envoyées.
Le réglage automatique apprend et s'améliore au fil du temps en analysant les statistiques des cohortes. 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 permettent d'
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 quotidienne.
Scénarios de réglage automatique
Le cas échéant, 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 le réglage 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 en utilisant la Google Cloud console, Google Cloud CLI, l'API Dataproc ou les 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 Google Cloud console, 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 l'une des 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é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 quotidienne.
Remplissez les autres sections de la page Créer un lot si nécessaire, puis cliquez sur Envoyer. Pour en savoir plus sur ces champs, consultez Envoyer une charge de travail par lot.
gcloud
Pour activer le réglage 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 l'une des 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é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 quotidienne. --autotuning-scenarios=auto: active le réglage automatique.
API
Pour activer le réglage automatique de Serverless pour Apache Spark à chaque envoi d'une charge de travail par lot récurrente, envoyez une batches.create qui inclut les champs suivants :
RuntimeConfig.cohort: nom de la cohorte, qui identifie le lot comme l'une des 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 quotidienne.AutotuningConfig.scenarios: spécifiezAUTOpour activer le réglage 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 Java dans le 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 Java Serverless pour Apache Spark.
Pour vous authentifier auprès de Serverless pour Apache Spark, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Pour activer le réglage 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 l'une des 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 quotidienne.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 une version 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 Python dans le 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 de Serverless pour Apache Spark.Python
Pour vous authentifier auprès de Serverless pour Apache Spark, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Pour activer le réglage automatique de Serverless pour Apache Spark à chaque envoi d'une charge de travail par lot récurrente, appelez BatchControllerClient.create_batch avec un lot qui inclut les champs suivants :
batch.runtime_config.cohort: nom de la cohorte, qui identifie le lot comme l'une des 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 quotidienne.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 une version 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 réglée automatiquement, 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 lot qui inclut les champs suivants :
batch.runtime_config.cohort: nom de la cohorte, qui identifie le lot comme l'une des 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 quotidienne.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 une version ultérieure de la bibliothèque cliente google-cloud-dataproc. Vous pouvez utiliser l'exigence d'environnement Airflow suivante :
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 du réglage automatique
Pour afficher les modifications du réglage automatique de Serverless pour Apache Spark apportées à une charge de travail par lot,
exécutez la
gcloud dataproc batches describe
commande.
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 afficher les dernières modifications du réglage automatique 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 Google Cloud console, sous l'onglet Récapitulatif.

Tarifs
Le réglage automatique de Serverless pour Apache Spark est proposé en version bêta privée sans frais supplémentaires. Les tarifs standards de Serverless pour Apache Spark s'appliquent.