Spark-Arbeitslasten automatisch optimieren

Dieses Dokument enthält Informationen zum automatischen Optimieren von Spark-Arbeitslasten. Die Optimierung einer Spark-Arbeitslast für Leistung und Stabilität kann aufgrund der Anzahl der Spark-Konfigurationsoptionen und der Schwierigkeit, die Auswirkungen dieser Optionen auf eine Arbeitslast zu bewerten, eine Herausforderung sein. Google Cloud Mit dem automatischen Tuning von Serverless für Apache Spark wird eine Alternative zur manuellen Arbeitslastkonfiguration geboten. Dabei werden Spark-Konfigurationseinstellungen automatisch auf eine wiederkehrende Spark-Arbeitslast angewendet, die auf den Best Practices für die Spark-Optimierung und einer Analyse der Arbeitslastläufe basiert.

Für Google Cloud Serverless for Apache Spark-Autotuning registrieren

Wenn Sie sich für den Zugriff auf die auf dieser Seite beschriebene Vorabversion von Serverless for Apache Spark-Autotuning registrieren möchten, füllen Sie das Anmeldeformular für den Dataproc-Vorschauzugriff aus und senden Sie es ab. Nach der Genehmigung des Formulars haben die darin aufgeführten Projekte Zugriff auf Vorschaufunktionen.

Vorteile

Google Cloud Das automatische Optimieren von Serverless for Apache Spark bietet folgende Vorteile:

  • Verbesserte Leistung: Optimierung zur Leistungssteigerung
  • Schnellere Optimierung: Durch die automatische Konfiguration entfällt das zeitaufwendige manuelle Testen der Konfiguration.
  • Höhere Stabilität: Automatisches Zuweisen von Arbeitsspeicher, um speicherbezogene Fehler zu vermeiden

Beschränkungen

Für das automatische Tuning von Serverless für Apache Spark gelten die folgenden Einschränkungen:Google Cloud

  • Die automatische Optimierung wird für den zweiten und die nachfolgenden Läufe eines Workloads berechnet und angewendet. Die erste Ausführung einer wiederkehrenden Arbeitslast wird nicht automatisch optimiert, da Google Cloud Serverless for Apache Spark-Autotuning den Arbeitslastverlauf zur Optimierung verwendet.
  • Das Verkleinern von Erinnerungen wird nicht unterstützt.
  • Die automatische Optimierung wird nicht rückwirkend auf laufende Arbeitslasten angewendet, sondern nur auf neu eingereichte Arbeitslastkohorten.

Autotuning-Kohorten

Autotuning wird auf wiederkehrende Ausführungen einer Batcharbeitslast angewendet, die als Kohorten bezeichnet werden. Der Kohortenname, den Sie beim Einreichen einer Arbeitslast angeben, kennzeichnet sie als einen der aufeinanderfolgenden Läufe der wiederkehrenden Arbeitslast. Wir empfehlen, Kohortennamen zu verwenden, die den Typ der Arbeitslast beschreiben oder anderweitig dazu beitragen, die Ausführungen einer Arbeitslast als Teil einer wiederkehrenden Arbeitslast zu identifizieren. Geben Sie beispielsweise daily_sales_aggregation als Kohortennamen für eine geplante Arbeitslast an, mit der täglich eine Aufgabe zur Umsatzaggregation ausgeführt wird.

Szenarien für die automatische Abstimmung

Sie wenden Google Cloud Serverless for Apache Spark-Autotuning auf Ihre Arbeitslast an, indem Sie eines oder mehrere der folgenden Autotuning-Szenarien auswählen:

  • MEMORY: Die Spark-Arbeitsspeicherzuweisung wird automatisch optimiert, um potenzielle Fehler aufgrund von Arbeitsspeichermangel bei der Verarbeitung von Arbeitslasten vorherzusagen und zu vermeiden. Beheben Sie eine zuvor fehlgeschlagene Arbeitslast aufgrund eines OOM-Fehlers (Out-of-Memory).
  • SCALING: Einstellungen für die automatische Optimierung der Spark-Autoscaling-Konfiguration.
  • BROADCAST_HASH_JOIN: Spark-Konfigurationseinstellungen automatisch optimieren, um die Leistung von SQL-Broadcast-Joins zu optimieren.

Preise

Google Cloud Das automatische Tuning von Serverless for Apache Spark wird während der Vorschauphase ohne zusätzliche Kosten angeboten. Es gelten die Standardpreise für Google Cloud Serverless for Apache Spark.

Regionale Verfügbarkeit

Sie können die automatische Optimierung von Google Cloud Serverless for Apache Spark mit Batches verwenden, die in verfügbaren Compute Engine-Regionen eingereicht werden.

Autotuning für Google Cloud Serverless for Apache Spark verwenden

Sie können das automatische Tuning von Google Cloud Serverless for Apache Spark für einen Arbeitslast mithilfe der Google Cloud Console, der Google Cloud CLI oder der Dataproc API aktivieren.

Konsole

Führen Sie die folgenden Schritte aus, um das automatische Tuning von Google Cloud Serverless for Apache Spark bei jeder Einreichung einer wiederkehrenden Batcharbeitslast zu aktivieren:

  1. Rufen Sie in der Google Cloud Console die Dataproc-Seite Batches auf.

    Zu Dataproc-Batches

  2. Klicken Sie auf Erstellen, um einen Batch-Arbeitslast zu erstellen.

  3. Füllen Sie im Abschnitt Container die folgenden Felder für Ihre Spark-Arbeitslast aus:

    • Kohorte:Der Name der Kohorte, der den Batch als eine von mehreren wiederkehrenden Arbeitslasten identifiziert. Autotuning wird auf die zweite und die nachfolgenden Arbeitslasten angewendet, die mit diesem Kohortennamen eingereicht werden. Geben Sie beispielsweise daily_sales_aggregation als Kohortennamen für eine geplante Arbeitslast an, mit der täglich eine Aufgabe zur Umsatzaggregation ausgeführt wird.

    • Szenarien für die automatische Abstimmung:Ein oder mehrere Szenarien für die automatische Abstimmung, die zum Optimieren der Arbeitslast verwendet werden sollen, z. B. BROADCAST_HASH_JOIN, MEMORY und SCALING. Sie können die Szenarioauswahl bei jeder Einreichung einer Batchkohorte ändern.

  4. Füllen Sie nach Bedarf die anderen Abschnitte der Seite Batch erstellen aus und klicken Sie dann auf Senden. Weitere Informationen zu diesen Feldern finden Sie unter Batch-Arbeitslast einreichen.

gcloud

Wenn Sie das automatische Tuning von Google Cloud Serverless for Apache Spark bei jeder Einreichung einer wiederkehrenden Batcharbeitslast aktivieren möchten, führen Sie den folgenden gcloud CLI-Befehl gcloud dataproc batches submit lokal in einem Terminalfenster oder in Cloud Shell aus.

gcloud dataproc batches submit COMMAND \
    --region=REGION \
    --cohort=COHORT \
    --autotuning-scenarios=SCENARIOS \
    other arguments ...

Ersetzen Sie Folgendes:

  • COMMAND: der Spark-Arbeitslasttyp, z. B. Spark, PySpark, Spark-Sql oder Spark-R.
  • REGION: die Region, in der Ihre Arbeitslast ausgeführt wird.
  • COHORT: Der Name der Kohorte, der den Batch als einen von einer Reihe wiederkehrender Arbeitslasten identifiziert. Autotuning wird auf die zweite und die nachfolgenden Arbeitslasten angewendet, die mit diesem Kohortennamen eingereicht werden. Geben Sie beispielsweise daily_sales_aggregation als Kohortennamen für eine geplante Arbeitslast an, mit der täglich eine Aufgabe zur Umsatzaggregation ausgeführt wird.

  • SCENARIOS: Ein oder mehrere durch Kommas getrennte Autotuning-Szenarien, die zur Optimierung der Arbeitslast verwendet werden sollen, z. B. --autotuning-scenarios=MEMORY,SCALING. Sie können die Szenarioliste mit jeder Batchkohorteneinsendung ändern.

API

Wenn Sie das automatische Optimieren von Google Cloud Serverless for Apache Spark bei jeder Einreichung einer wiederkehrenden Batcharbeitslast aktivieren möchten, senden Sie eine batches.create-Anfrage mit den folgenden Feldern:

  • RuntimeConfig.cohort: Der Name der Kohorte, der den Batch als einen von einer Reihe wiederkehrender Arbeitslasten identifiziert. Das automatische Tuning wird auf die zweite und die nachfolgenden Arbeitslasten angewendet, die mit diesem Kohortennamen eingereicht werden. Geben Sie beispielsweise daily_sales_aggregation als Kohortennamen für eine geplante Arbeitslast an, mit der täglich eine Aufgabe zur Umsatzaggregation ausgeführt wird.
  • AutotuningConfig.scenarios: Ein oder mehrere Autotuning-Szenarien, die zur Optimierung der Arbeitslast verwendet werden sollen, z. B. BROADCAST_HASH_JOIN, MEMORY und SCALING. Sie können die Szenarioliste mit jeder Batchkohorteneinsendung ändern.

Beispiel:

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

Java

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Java-Einrichtungsanleitung in der Kurzanleitung zur Verwendung von Clientbibliotheken für Serverless for Apache Spark. Weitere Informationen finden Sie in der Referenzdokumentation zur Serverless for Apache Spark Java API.

Richten Sie zur Authentifizierung bei Serverless for Apache Spark die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

Wenn Sie das automatische Tuning von Google Cloud Serverless für Apache Spark bei jeder Einreichung einer wiederkehrenden Batcharbeitslast aktivieren möchten, rufen Sie BatchControllerClient.createBatch mit einer CreateBatchRequest auf, die die folgenden Felder enthält:

  • Batch.RuntimeConfig.cohort: Der Name der Kohorte, der den Batch als eine von mehreren wiederkehrenden Arbeitslasten identifiziert. Das automatische Tuning wird auf die zweite und die nachfolgenden Arbeitslasten angewendet, die mit diesem Kohortennamen eingereicht werden. Sie können beispielsweise daily_sales_aggregation als Kohortennamen für einen geplanten Arbeitslast angeben, der eine tägliche Aufgabe zur Umsatzaggregation ausführt.
  • Batch.RuntimeConfig.AutotuningConfig.scenarios: Ein oder mehrere Autotuning-Szenarien, die zur Optimierung der Arbeitslast verwendet werden sollen, z. B. BROADCAST_HASH_JOIN, MEMORY, SCALING. Sie können die Szenarioliste mit jeder Batchkohorteneinsendung ändern. Eine vollständige Liste der Szenarien finden Sie in der AutotuningConfig.Scenario.

Beispiel:

...
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());
...

Wenn Sie die API verwenden möchten, benötigen Sie die Clientbibliothek google-cloud-dataproc in Version 4.43.0 oder höher. Sie können eine der folgenden Konfigurationen verwenden, um die Bibliothek Ihrem Projekt hinzuzufügen.

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

Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Python-Einrichtungsanleitung in der Kurzanleitung zur Verwendung von Clientbibliotheken für Serverless for Apache Spark. Weitere Informationen finden Sie in der Referenzdokumentation zur Serverless for Apache Spark Python API.

Richten Sie zur Authentifizierung bei Serverless for Apache Spark die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

Wenn Sie das automatische Optimieren von Google Cloud Serverless für Apache Spark bei jeder Einreichung einer wiederkehrenden Batcharbeitslast aktivieren möchten, rufen Sie BatchControllerClient.create_batch mit einem Batch auf, das die folgenden Felder enthält:

  • batch.runtime_config.cohort: Der Name der Kohorte, der den Batch als eine von mehreren wiederkehrenden Arbeitslasten identifiziert. Das automatische Tuning wird auf die zweite und die nachfolgenden Arbeitslasten angewendet, die mit diesem Kohortennamen eingereicht werden. Sie können beispielsweise daily_sales_aggregation als Kohortennamen für einen geplanten Arbeitslast angeben, der eine tägliche Aufgabe zur Umsatzaggregation ausführt.
  • batch.runtime_config.autotuning_config.scenarios: Ein oder mehrere Autotuning-Szenarien, die zum Optimieren des Workloads verwendet werden sollen, z. B. BROADCAST_HASH_JOIN, MEMORY,SCALING. Sie können die Szenarioliste bei jeder Einreichung einer Batchkohorte ändern. Eine vollständige Liste der Szenarien finden Sie in der Szenario-Referenz.

Beispiel:

# 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)

Wenn Sie die API verwenden möchten, benötigen Sie die Clientbibliothek google-cloud-dataproc in Version 5.10.1 oder höher. Um sie Ihrem Projekt hinzuzufügen, können Sie die folgende Anforderung verwenden:

google-cloud-dataproc>=5.10.1

Airflow

Wenn Sie das automatische Optimieren von Google Cloud Serverless für Apache Spark bei jeder Einreichung einer wiederkehrenden Batcharbeitslast aktivieren möchten, rufen Sie BatchControllerClient.create_batch mit einem Batch auf, das die folgenden Felder enthält:

  • batch.runtime_config.cohort: Der Name der Kohorte, der den Batch als eine von mehreren wiederkehrenden Arbeitslasten identifiziert. Das automatische Tuning wird auf die zweite und die nachfolgenden Arbeitslasten angewendet, die mit diesem Kohortennamen eingereicht werden. Sie können beispielsweise daily_sales_aggregation als Kohortennamen für einen geplanten Arbeitslast angeben, der eine tägliche Aufgabe zur Umsatzaggregation ausführt.
  • batch.runtime_config.autotuning_config.scenarios: Ein oder mehrere Szenarien für die automatische Optimierung, die zur Optimierung der Arbeitslast verwendet werden sollen, z. B. BROADCAST_HASH_JOIN, MEMORY,SCALING. Sie können die Szenarioliste mit jeder Batchkohorteneinsendung ändern. Eine vollständige Liste der Szenarien finden Sie in der Szenario-Referenz.

Beispiel:

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",
)

Wenn Sie die API verwenden möchten, benötigen Sie die Clientbibliothek google-cloud-dataproc in Version 5.10.1 oder höher. Sie können die folgende Anforderung für die Airflow-Umgebung verwenden:

google-cloud-dataproc>=5.10.1

Informationen zum Aktualisieren des Pakets in Cloud Composer finden Sie unter Python-Abhängigkeiten für Cloud Composer installieren .

Änderungen bei der automatischen Optimierung ansehen

Wenn Sie Änderungen an einer Batcharbeitslast durch die automatische Optimierung von Google Cloud Serverless for Apache Spark ansehen möchten, führen Sie den Befehl gcloud dataproc batches describe aus.

Beispiel: Die gcloud dataproc batches describe-Ausgabe sieht etwa so aus:

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

Die letzten Änderungen durch die automatische Optimierung, die auf einen laufenden, abgeschlossenen oder fehlgeschlagenen Arbeitslast angewendet wurden, können Sie in der Google Cloud Console auf der Seite Batchdetails auf dem Tab Untersuchen ansehen.

Bereich für die Untersuchung der automatischen Abstimmung.