Spark-Batcharbeitslasten automatisch optimieren

In diesem Dokument finden Sie Informationen zur automatischen Abstimmung von Serverless for Apache Spark-Batcharbeitslasten. Die Optimierung einer Spark-Arbeitslast in Bezug auf Leistung und Ausfallsicherheit kann aufgrund der Anzahl der Spark Konfigurationsoptionen und der Schwierigkeit, die Auswirkungen dieser Optionen auf eine Arbeitslast zu bewerten, eine Herausforderung sein. Die automatische Abstimmung von Serverless for Apache Spark bietet eine Alternative zu manuellen Arbeitslastkonfigurationen, indem Spark-Konfigurationseinstellungen automatisch auf eine wiederkehrende Spark-Arbeitslast angewendet werden. Dies basiert auf den Best Practices für die Spark-Optimierung und einer Analyse der Arbeitslastausführungen (sogenannte "Kohorten").

Für die automatische Abstimmung von Serverless for Apache Spark registrieren

Wenn Sie sich für den Zugriff auf den Vorschau-Release für die automatische Abstimmung von Serverless for Apache Spark registrieren möchten, der auf dieser Seite beschrieben wird, füllen Sie das Registrierungsformular für den Zugriff auf die Dataproc-Vorschau aus und senden Sie es ab. Nachdem das Formular genehmigt wurde, haben die im Formular aufgeführten Projekte Zugriff auf Vorschau-Features.

Vorteile

Die automatische Abstimmung von Serverless for Apache Spark kann folgende Vorteile bieten:

  • Automatische Optimierung: Ineffiziente Serverless for Apache Spark-Batch- und Spark-Konfigurationen werden automatisch abgestimmt, wodurch die Joblaufzeiten verkürzt werden können.
  • Historisches Lernen: Aus wiederkehrenden Ausführungen lernen, um Empfehlungen anzuwenden, die auf Ihre Arbeitslast zugeschnitten sind.

Kohorten für die automatische Abstimmung

Die automatische Abstimmung wird auf wiederkehrende Ausführungen (Kohorten) einer Batcharbeitslast angewendet.

Der Kohortenname, den Sie beim Senden einer Batcharbeitslast angeben, kennzeichnet sie als eine der aufeinanderfolgenden Ausführungen der wiederkehrenden Arbeitslast.

Die automatische Abstimmung wird wie folgt auf Batcharbeitslast-Kohorten angewendet:

  • Die automatische Abstimmung wird für die zweite und die nachfolgenden Kohorten einer Arbeitslast berechnet und angewendet. Die automatische Abstimmung wird nicht auf die erste Ausführung einer wiederkehrenden Arbeitslast angewendet, da die automatische Abstimmung von Serverless for Apache Spark den Arbeitslastverlauf zur Optimierung verwendet.

  • Die automatische Abstimmung wird nicht rückwirkend auf laufende Arbeitslasten angewendet, sondern nur auf neu gesendete Arbeitslasten.

  • Die automatische Abstimmung lernt und verbessert sich im Laufe der Zeit durch die Analyse der Kohortenstatistiken. Damit das System genügend Daten erfassen kann, empfehlen wir, die automatische Abstimmung für mindestens fünf Ausführungen aktiviert zu lassen.

Kohortennamen: Es empfiehlt sich, Kohortennamen zu verwenden, mit denen der wiederkehrende Arbeitslasttyp identifiziert werden kann. Sie können beispielsweise daily_sales_aggregation als Kohortennamen für eine geplante Arbeitslast verwenden, die eine tägliche Aufgabe zur Umsatzaggregation ausführt.

Szenarien für die automatische Abstimmung

Falls zutreffend, wählt die automatische Abstimmung automatisch die folgenden scenarios oder Ziele aus und führt sie aus, um eine Batcharbeitslast zu optimieren:

  • Skalierung: Konfigurationseinstellungen für das Spark-Autoscaling.
  • Join-Optimierung: Spark-Konfigurationseinstellungen zur Optimierung der Leistung von SQL-Broadcast Joins.

Automatische Abstimmung von Serverless for Apache Spark verwenden

Sie können die automatische Abstimmung von Serverless for Apache Spark für eine Batcharbeitslast aktivieren, indem Sie die Console, die Google Cloud CLI, die Dataproc API oder die Cloud-Clientbibliotheken verwenden. Google Cloud

Console

Führen Sie die folgenden Schritte aus, um die automatische Abstimmung von Serverless for Apache Spark bei jeder Übermittlung einer wiederkehrenden Batcharbeitslast zu aktivieren:

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

    Zu Dataproc-Batches

  2. Klicken Sie auf Erstellen, um eine Batcharbeitslast zu erstellen.

  3. Im Abschnitt Automatische Abstimmung:

    • Klicken Sie auf den Schieberegler Aktivieren , um die automatische Abstimmung für die Spark-Arbeitslast zu aktivieren.

    • Kohorte: Geben Sie den Kohortennamen ein, der den Batch als eine von mehreren wiederkehrenden Arbeitslasten identifiziert. Die automatische Abstimmung wird auf die zweite und die nachfolgenden Arbeitslasten angewendet, die mit diesem Kohortennamen gesendet werden. Geben Sie beispielsweise daily_sales_aggregation als Kohortennamen für eine geplante Batch arbeitslast an, die eine tägliche Aufgabe zur Umsatzaggregation ausführt.

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

gcloud

Führen Sie den folgenden gcloud CLI gcloud dataproc batches submit Befehl lokal in einem Terminalfenster oder in Cloud Shellaus, um die automatische Abstimmung von Serverless for Apache Spark bei jeder Übermittlung einer wiederkehrenden Batcharbeitslast zu aktivieren:

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

Ersetzen Sie Folgendes:

  • COMMAND: Der Spark-Arbeitslasttyp, z. B. Spark, PySpark, Spark-Sql, oder Spark-R.
  • REGION: die Region , in der Ihre Batcharbeitslast ausgeführt wird.
  • COHORT: Der Kohortenname, der den Batch als eine von mehreren wiederkehrenden Arbeitslasten identifiziert. Die automatische Abstimmung wird auf die zweite und die nachfolgenden Arbeitslasten angewendet, die mit diesem Kohortennamen gesendet werden. Geben Sie beispielsweise daily_sales_aggregation als Kohortennamen für eine geplante Batcharbeitslast an, die eine tägliche Aufgabe zur Umsatzaggregation ausführt.
  • --autotuning-scenarios=auto: Aktiviert die automatische Abstimmung.

API

Wenn Sie die automatische Abstimmung von Serverless for Apache Spark bei jeder Übermittlung einer wiederkehrenden Batcharbeitslast aktivieren möchten, senden Sie eine batches.create Anfrage mit den folgenden Feldern:

  • RuntimeConfig.cohort: Der Kohortenname, der den Batch als eine von mehreren wiederkehrenden Arbeitslasten identifiziert. Die automatische Abstimmung wird auf die zweite und die nachfolgenden Arbeitslasten angewendet, die mit diesem Kohortennamen gesendet werden. Geben Sie beispielsweise daily_sales_aggregation als den Kohortennamen für eine geplante Batcharbeitslast an, die eine tägliche Aufgabe zur Umsatzaggregation ausführt.
  • AutotuningConfig.scenarios: Geben Sie AUTO an, um die automatische Abstimmung für die Spark Batcharbeitslast zu aktivieren.

Beispiel:

...
runtimeConfig:
  cohort: COHORT_NAME
  autotuningConfig:
    scenarios:
    - AUTO
...

Java

Folgen Sie der Java Einrichtungsanleitung in der Serverless for Apache Spark-Kurzanleitung zur Verwendung von Clientbibliotheken, bevor Sie dieses Beispiel anwenden. Weitere Informationen finden Sie in der APIJava Referenzdokumentation für Serverless for Apache Spark.

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 die automatische Abstimmung von Serverless for Apache Spark bei jeder Übermittlung einer wiederkehrenden Batcharbeitslast aktivieren möchten, rufen Sie BatchControllerClient.createBatch mit einer CreateBatchRequest auf, die die folgenden Felder enthält:

  • Batch.RuntimeConfig.cohort: Der Kohortenname, der den Batch als eine von mehreren wiederkehrenden Arbeitslasten identifiziert. Die automatische Abstimmung wird auf die zweite und die nachfolgenden Arbeitslasten angewendet, die mit diesem Kohortennamen gesendet werden. Sie können beispielsweise daily_sales_aggregation als Kohortennamen für eine geplante Batcharbeitslast angeben, die eine tägliche Aufgabe zur Umsatzaggregation ausführt.
  • Batch.RuntimeConfig.AutotuningConfig.scenarios: Geben Sie AUTO an, um die automatische Abstimmung für die Spark-Batcharbeitslast zu aktivieren.

Beispiel:

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

Wenn Sie die API verwenden möchten, müssen Sie die Clientbibliothek google-cloud-dataproc in Version 4.43.0 oder höher verwenden. 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

Folgen Sie der PythonEinrichtungsanleitung in der Serverless for Apache Spark-Kurzanleitung zur Verwendung von Clientbibliotheken, bevor Sie dieses Beispiel anwenden. Weitere Informationen finden Sie in der API-Referenzdokumentation für Serverless for Apache SparkPython.

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 die automatische Abstimmung von Serverless for Apache Spark bei jeder Übermittlung einer wiederkehrenden Batcharbeitslast aktivieren möchten, rufen Sie BatchControllerClient.create_batch mit einem Batch auf, der die folgenden Felder enthält:

  • batch.runtime_config.cohort: Der Kohorten-Name, der den Batch als eine von mehreren wiederkehrenden Arbeitslasten identifiziert. Die automatische Abstimmung wird auf die zweite und die nachfolgenden Arbeitslasten angewendet, die mit diesem Kohortennamen gesendet werden. Sie können beispielsweise daily_sales_aggregation als den Kohortennamen für eine geplante Batcharbeitslast angeben, die eine tägliche Aufgabe zur Umsatzaggregation ausführt.
  • batch.runtime_config.autotuning_config.scenarios: Geben Sie AUTO an, um die automatische Abstimmung für die Spark-Batcharbeitslast zu aktivieren.

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

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, müssen Sie die Clientbibliothek google-cloud-dataproc in Version 5.10.1 oder höher verwenden. Sie können die folgende Anforderung verwenden, um sie Ihrem Projekt hinzuzufügen:

google-cloud-dataproc>=5.10.1

Airflow

Anstatt jede automatisch abgestimmte Batchkohorte manuell zu senden, können Sie mit Airflow die Übermittlung jeder wiederkehrenden Batcharbeitslast planen. Rufen Sie dazu call BatchControllerClient.create_batch with a Batch auf, der die folgenden Felder enthält:

  • batch.runtime_config.cohort: Der Kohorten-Name, der den Batch als eine von mehreren wiederkehrenden Arbeitslasten identifiziert. Die automatische Abstimmung wird auf die zweite und die nachfolgenden Arbeitslasten angewendet, die mit diesem Kohortennamen gesendet werden. Sie können beispielsweise daily_sales_aggregation als Kohortennamen für eine geplante Batcharbeitslast angeben, die eine tägliche Aufgabe zur Umsatzaggregation ausführt.
  • batch.runtime_config.autotuning_config.scenarios: Geben Sie AUTO an, um die automatische Abstimmung für die Spark-Batcharbeitslast zu aktivieren.

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.AUTO,
                ]
            }
        },
    },
    batch_id="BATCH_ID",
)

Wenn Sie die API verwenden möchten, müssen Sie die Clientbibliothek google-cloud-dataproc in Version 5.10.1 oder höher verwenden. 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 durch die automatische Abstimmung ansehen

Führen Sie den gcloud dataproc batches describe Befehl aus, um die Änderungen durch die automatische Abstimmung von Serverless for Apache Spark an einer Batcharbeitslast anzusehen.

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

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

Die neuesten Änderungen durch die automatische Abstimmung, die auf eine laufende, abgeschlossene oder fehlgeschlagene Arbeitslast angewendet wurden, können Sie in der Batchdetails Seite in der Google Cloud Console auf dem Zusammenfassung Tab ansehen.

Bereich mit Zusammenfassung der automatischen Abstimmung.

Preise

Die automatische Abstimmung von Serverless for Apache Spark wird während der privaten Vorschau ohne zusätzliche Kosten angeboten. Es gelten die Standard Preise für Serverless for Apache Spark.