Régler automatiquement les charges de travail par lot Spark

Le réglage automatique de Managed Service pour Apache Spark vous permet d'optimiser les charges de travail par lot récurrentes en termes de performances et de résilience, sans configuration manuelle. Plutôt que de vous demander d'évaluer des paramètres Spark complexes, le réglage automatique analyse les exécutions précédentes (appelées cohortes) et applique automatiquement des paramètres basés sur les bonnes pratiques Spark.

Ce document fournit des informations sur le réglage automatique des charges de travail par lot Managed Service 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. Le réglage automatique de Managed Service pour Apache Spark offre une alternative à la configuration manuelle des charges de travail en appliquant 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 Managed Service pour Apache Spark

Pour vous inscrire et accéder à la version preview du réglage automatique de Managed Service pour Apache Spark décrite sur cette page, remplissez et envoyez le formulaire d'inscription Demande d'accès à la version preview de Managed Service pour Apache Spark. Une fois le formulaire approuvé, les projets listés dans le formulaire ont accès aux fonctionnalités en preview.

Avantages

Le réglage automatique de Managed Service pour Apache Spark peut offrir les avantages suivants :

  • Optimisation automatique : ajustez automatiquement les configurations inefficaces des jobs par lot Managed Service pour Apache Spark et de Spark, ce qui peut accélérer l'exécution des jobs.
  • Apprentissage historique : tirez des enseignements 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 cohortes suivantes d'une charge de travail. Le réglage automatique n'est pas appliqué à la première exécution d'une charge de travail récurrente, car le réglage automatique de Managed Service pour Apache Spark utilise l'historique de la charge 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 s'applique 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 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 permettant d'optimiser les performances des jointures de diffusion SQL.
  • Partitions de brassage : paramètres de configuration Spark permettant d'ajuster les partitions de brassage.

Utiliser le réglage automatique de Managed Service pour Apache Spark

Vous pouvez activer le réglage automatique de Managed Service 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 Managed Service pour Apache Spark à chaque envoi d'une charge de travail par lot récurrente, procédez comme suit :

  1. Dans la console Google Cloud , accédez à la page Jobs de Managed Service pour Apache Spark.

    Accéder aux jobs Managed Service pour Apache Spark

  2. Pour créer une charge de travail par lot, cliquez sur Envoyer un job pour ouvrir la page Envoyer un job.

  3. Sous Sélectionner le type de calcul pour le job, vérifiez que Spark sans serveur est sélectionné.

  4. Dans la section Détails du job sans serveur :

    1. Spécifiez un ID de job ou acceptez l'ID par défaut.
    2. Sélectionnez un profil d'exécution (ou conservez la configuration de service par défaut pour votre région), puis cliquez sur Configurer dans la fiche Résumé (ou cliquez sur Créer un profil dans le menu Profil d'exécution) pour ouvrir le panneau de configuration du profil d'exécution.
    3. Dans le panneau de configuration du profil d'exécution, développez Configuration supplémentaire, puis cliquez sur Modifier à côté de Autres personnalisations.
    4. Dans le panneau Autres personnalisations, sous Réglage automatique :

      • Cliquez sur le bouton Activer pour activer le réglage automatique pour la charge de travail par lot Spark.
      • ID de cohorte : indiquez l'ID 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 cet ID de cohorte. Par exemple, spécifiez daily_sales_aggregation comme ID de cohorte pour une charge de travail par lot planifiée qui exécute une tâche d'agrégation des ventes quotidienne.
    5. Cliquez sur Enregistrer dans le panneau Autres personnalisations, puis sur Utiliser la configuration (ou Enregistrer le nouveau profil) dans le panneau de configuration du profil d'exécution.

  5. Remplissez les sections Fichiers et artefacts et Exécution et propriétés du job sur la page Envoyer un job, 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 Managed Service pour Apache Spark à chaque envoi d'une charge de travail par lot récurrente, exécutez la commande gcloud CLI gcloud dataproc batches submit suivante localement 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-Sql ou Spark-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 d'une série. 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_aggregation comme 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 : activez le réglage automatique.

API

Pour activer le réglage automatique de Managed Service pour Apache Spark à chaque envoi d'une charge de travail par lot récurrente, envoyez une requête batches.create incluant les champs suivants :

  • RuntimeConfig.cohort : nom de la cohorte, qui identifie le lot comme l'une des charges de travail récurrentes d'une série. Le réglage automatique est appliqué à la deuxième charge de travail et aux charges de travail suivantes envoyées avec ce nom de cohorte. Par exemple, spécifiez daily_sales_aggregation comme 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écifiez AUTO pour 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 pour Java du guide de démarrage rapide de Managed Service pour Apache Spark : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Managed Service pour Apache Spark en langage Java.

Pour vous authentifier auprès de Managed Service 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 le réglage automatique de Managed Service pour Apache Spark à chaque envoi d'une charge de travail par lot récurrente, appelez BatchControllerClient.createBatch avec une requête CreateBatchRequest incluant les champs suivants :

  • Batch.RuntimeConfig.cohort : nom de la cohorte, qui identifie le lot comme l'une des charges de travail récurrentes d'une série. Le réglage automatique est appliqué à la deuxième charge de travail et aux charges de travail suivantes envoyées avec ce nom de cohorte. Par exemple, vous pouvez spécifier daily_sales_aggregation comme 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écifiez AUTO pour 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 Managed Service pour Apache Spark : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Managed Service pour Apache Spark en langage Python.

Pour vous authentifier auprès de Managed Service 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 le réglage automatique de Managed Service 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 l'une des charges de travail récurrentes d'une série. Le réglage automatique est appliqué à la deuxième charge de travail et aux charges de travail suivantes envoyées avec ce nom de cohorte. Par exemple, vous pouvez spécifier daily_sales_aggregation comme 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écifiez AUTO pour 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 lots 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 Batch 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 d'une série. Le réglage automatique est appliqué à la deuxième charge de travail et aux charges de travail suivantes envoyées avec ce nom de cohorte. Par exemple, vous pouvez spécifier daily_sales_aggregation comme 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écifiez AUTO pour 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 d'environnement Airflow suivante :

google-cloud-dataproc>=5.10.1

Pour mettre à jour le package dans Managed Service pour Apache Airflow, consultez Installer des dépendances Python pour Managed Airflow.

Afficher les modifications du réglage automatique

Pour afficher les modifications apportées par le réglage automatique de Managed Service pour Apache Spark à 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 afficher les dernières modifications de 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 job par lot de la consoleGoogle Cloud (cliquez sur l'ID du job par lot dans l'onglet Spark sans serveur de la page Jobs), sous l'onglet Résumé.

Panneau récapitulatif du réglage automatique.

Tarifs

Le réglage automatique de Managed Service pour Apache Spark est proposé sans frais supplémentaires pendant la version preview privée. La tarification standard de Managed Service pour Apache Spark s'applique.