Réglage automatique des charges de travail Spark

Ce document fournit des informations sur l'optimisation automatique des charges de travail Spark. Il peut être difficile d'optimiser une charge de travail Spark pour les performances et la résilience 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. Google Cloud L'optimisation automatique de Spark sans serveur 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 la charge de travail.

S'inscrire à l'optimisation automatique de Google Cloud 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

Google Cloud L'optimisation automatique de Serverless pour Apache Spark peut offrir les avantages suivants :

  • Amélioration des performances : réglage de l'optimisation pour améliorer les performances
  • Optimisation plus rapide : configuration automatique pour éviter les tests de configuration manuelle chronophages
  • Résilience accrue : allocation automatique de mémoire pour éviter les échecs liés à la mémoire

Limites

Google Cloud L'optimisation automatique de Serverless pour Apache Spark présente les limites suivantes :

  • Le réglage automatique est calculé et appliqué à la deuxième exécution et aux suivantes d'une charge de travail. La première exécution d'une charge de travail récurrente n'est pas optimisée automatiquement, car l'optimisation de Google Cloud Serverless pour Apache Spark utilise l'historique des charges de travail pour l'optimisation.
  • La réduction de la mémoire n'est pas prise en charge.
  • Le réglage automatique n'est pas appliqué de manière rétroactive aux charges de travail en cours d'exécution, mais uniquement aux cohortes de charges de travail nouvellement envoyées.

Cohortes de réglage automatique

Le réglage automatique est appliqué aux exécutions récurrentes d'une charge de travail par lot, appelées cohortes. Le nom de cohorte que vous spécifiez lorsque vous envoyez une charge de travail l'identifie comme l'une des exécutions successives de la charge de travail récurrente. Nous vous recommandons d'utiliser des noms de cohortes qui décrivent le type de charge de travail ou qui aident à identifier les exécutions d'une charge de travail dans le cadre d'une charge de travail récurrente. Par exemple, spécifiez 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

Vous appliquez l'optimisation automatique de Google Cloud Serverless pour Apache Spark à votre charge de travail en sélectionnant un ou plusieurs des scénarios d'optimisation automatique suivants :

  • MEMORY : ajuste automatiquement l'allocation de mémoire Spark pour prédire et éviter les erreurs potentielles de mémoire saturée de la charge de travail. Corrigez une charge de travail qui a échoué précédemment en raison d'une erreur de mémoire insuffisante (OOM).
  • SCALING : configuration des paramètres d'autoscaling Spark.
  • BROADCAST_HASH_JOIN : ajuste automatiquement les paramètres de configuration Spark pour optimiser les performances de la jointure par diffusion SQL.

Tarifs

Google Cloud L'optimisation automatique de Serverless pour Apache Spark est proposée pendant la version Preview sans frais supplémentaires. La tarification standard deGoogle Cloud Serverless pour Apache Spark s'applique.

Disponibilité en fonction des régions

Vous pouvez utiliser l'optimisation automatique de Google Cloud Serverless pour Apache Spark avec les lots envoyés dans les régions Compute Engine disponibles.

Utiliser l'optimisation automatique de Google Cloud Serverless pour Apache Spark

Vous pouvez activer le réglage automatique de Google Cloud Serverless pour Apache Spark sur une charge de travail à l'aide de la console Google Cloud , de Google Cloud CLI ou de l'API Dataproc.

Console

Pour activer l'optimisation automatique de Google Cloud Serverless 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 Lots de Dataproc.

    Accéder à la page "Lots" de Dataproc

  2. Pour créer une charge de travail par lot, cliquez sur Créer.

  3. Dans la section Conteneur, renseignez les champs suivants pour votre charge de travail Spark :

    • Cohorte : 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_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 : un ou plusieurs scénarios de réglage automatique à utiliser pour optimiser la charge de travail (par exemple, BROADCAST_HASH_JOIN, MEMORY et SCALING). Vous pouvez modifier la sélection de scénario à chaque envoi de cohorte par lot.

  4. 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 le réglage automatique de Google Cloud 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=SCENARIOS \
    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 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_aggregation comme nom de cohorte pour une charge de travail planifiée qui exécute une tâche d'agrégation des ventes quotidiennes.

  • SCENARIOS : un ou plusieurs scénarios de réglage automatique séparés par une virgule à utiliser pour optimiser la charge de travail (par exemple, --autotuning-scenarios=MEMORY,SCALING). Vous pouvez modifier la liste des scénarios à chaque envoi de cohorte de lots.

API

Pour activer le réglage automatique de Google Cloud 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écifiez 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.
  • AutotuningConfig.scenarios : un ou plusieurs scénarios de réglage automatique à utiliser pour optimiser la charge de travail (par exemple, BROADCAST_HASH_JOIN, MEMORY et SCALING). Vous pouvez modifier la liste des scénarios à chaque envoi de cohorte de lots.

Exemple :

...
runtimeConfig:
  cohort: daily_sales_aggregation
  autotuningConfig:
    scenarios:
    - BROADCAST_HASH_JOIN
    - MEMORY
    - SCALING
...

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 le réglage automatique de Google Cloud 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écifier 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.
  • Batch.RuntimeConfig.AutotuningConfig.scenarios : un ou plusieurs scénarios de réglage automatique à utiliser pour optimiser la charge de travail, tels que BROADCAST_HASH_JOIN, MEMORY et SCALING. Vous pouvez modifier la liste des scénarios à chaque envoi de cohorte de lots. Pour obtenir la liste complète des scénarios, consultez la documentation Javadoc AutotuningConfig.Scenario.

Exemple :

...
Batch batch =
  Batch.newBuilder()
    .setRuntimeConfig(
      RuntimeConfig.newBuilder()
        .setCohort("daily_sales_aggregation")
        .setAutotuningConfig(
          AutotuningConfig.newBuilder()
            .addScenarios(Scenario.SCALING))
    ...
  .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 Google Cloud 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écifier 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.
  • batch.runtime_config.autotuning_config.scenarios : un ou plusieurs scénarios de réglage automatique à utiliser pour optimiser la charge de travail, tels que BROADCAST_HASH_JOIN, MEMORY, SCALING. Vous pouvez modifier la liste des scénarios à chaque envoi de cohorte par lot. Pour obtenir la liste complète des scénarios, consultez la documentation de référence sur les scénarios.

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.SCALING
]

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

Pour activer l'optimisation automatique de Google Cloud 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écifier 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.
  • batch.runtime_config.autotuning_config.scenarios : un ou plusieurs scénarios de réglage automatique à utiliser pour optimiser la charge de travail, par exemple BROADCAST_HASH_JOIN, MEMORY, SCALING. Vous pouvez modifier la liste des scénarios à chaque envoi de cohorte par lot. Pour obtenir la liste complète des scénarios, consultez la documentation de référence sur les scénarios.

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.SCALING,
                ]
            }
        },
    },
    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 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 à une charge de travail par lot, exécutez la commande gcloud dataproc batches describe. Google Cloud

Exemple : le résultat de gcloud dataproc batches describe ressemble à ce qui suit :

...
runtimeInfo:
   propertiesInfo:
    # Properties set by autotuning.
    autotuningProperties
      spark.driver.memory:
        annotation: Driver OOM was detected
        value: 11520m
      spark.driver.memoryOverhead:
        annotation: Driver OOM was detected
        value: 4608m
    # Old overwritten properties.
    userProperties
...

Vous pouvez afficher les dernières modifications d'optimisation 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 Examiner.

Panneau d&#39;investigation de l&#39;optimisation automatique.