Ottimizzazione automatica dei workload batch Spark

Questo documento fornisce informazioni sull'ottimizzazione automatica dei workload batch di Serverless per Apache Spark. L'ottimizzazione di un workload Spark per prestazioni e resilienza può essere difficile a causa del numero di opzioni di configurazione di Spark e della difficoltà di valutare l'impatto di queste opzioni su un workload. L'ottimizzazione automatica di Serverless per Apache Spark offre un'alternativa alla configurazione manuale del workload applicando automaticamente le impostazioni di configurazione di Spark a un workload Spark ricorrente in base alle best practice di ottimizzazione di Spark e a un'analisi delle esecuzioni del workload (chiamate "coorti").

Registrati per l'ottimizzazione automatica di Serverless per Apache Spark

Per registrarti per l'accesso alla versione di anteprima dell'ottimizzazione automatica di Serverless per Apache Spark descritta in questa pagina, compila e invia il modulo di registrazione per la richiesta di accesso all'anteprima di Dataproc. Una volta approvato il modulo, i progetti elencati nel modulo hanno accesso alle funzionalità di anteprima.

Vantaggi

L'ottimizzazione automatica di Serverless per Apache Spark può offrire i seguenti vantaggi:

  • Ottimizzazione automatica: ottimizza automaticamente le configurazioni batch e Spark di Serverless per Apache Spark inefficienti, il che può velocizzare i tempi di esecuzione dei job.
  • Apprendimento storico: impara dalle esecuzioni ricorrenti per applicare consigli personalizzati per il tuo workload.

Coorti di ottimizzazione automatica

L'ottimizzazione automatica viene applicata alle esecuzioni ricorrenti (coorti) di un workload batch.

Il nome della coorte specificato quando invii un workload batch lo identifica come una delle esecuzioni successive del workload ricorrente.

L'ottimizzazione automatica viene applicata alle coorti di workload batch nel seguente modo:

  • L'ottimizzazione automatica viene calcolata e applicata alla seconda e alle successive coorti di un workload. L'ottimizzazione automatica non viene applicata alla prima esecuzione di un workload ricorrente perché l'ottimizzazione automatica di Serverless per Apache Spark utilizza la cronologia del workload per l'ottimizzazione.

  • L'ottimizzazione automatica non viene applicata retroattivamente ai workload in esecuzione, ma solo ai workload appena inviati.

  • L'ottimizzazione automatica apprende e migliora nel tempo analizzando le statistiche delle coorti. Per consentire al sistema di raccogliere dati sufficienti, ti consigliamo di mantenere attiva l'ottimizzazione automatica per almeno cinque esecuzioni.

Nomi delle coorti: una best practice consigliata è utilizzare nomi di coorti che aiutino a identificare il tipo di workload ricorrente. Ad esempio, puoi utilizzare daily_sales_aggregation come nome della coorte per un workload pianificato che esegue un'attività di aggregazione delle vendite giornaliere.

Scenari di ottimizzazione automatica

Se applicabile, l'ottimizzazione automatica seleziona ed esegue automaticamente i seguenti scenarios o obiettivi per ottimizzare un workload batch:

  • Scalabilità: impostazioni di configurazione della scalabilità automatica di Spark.
  • Ottimizzazione dei join: impostazioni di configurazione di Spark per ottimizzare le prestazioni dei join di trasmissione SQL.

Utilizza l'ottimizzazione automatica di Serverless per Apache Spark

Puoi attivare l'ottimizzazione automatica di Serverless per Apache Spark su un workload batch utilizzando la console Google Cloud , la Google Cloud CLI, l'API Dataproc o le librerie client Cloud.

Console

Per attivare l'ottimizzazione automatica di Serverless per Apache Spark a ogni invio di un workload batch ricorrente, segui questi passaggi:

  1. Nellaconsole, vai alla pagina Batch di Dataproc. Google Cloud

    Vai alla pagina Batch di Dataproc

  2. Per creare un workload batch, fai clic su Crea.

  3. Nella sezione Ottimizzazione automatica:

    • Attiva il pulsante Attiva per attivare l'ottimizzazione automatica per il workload Spark.

    • Coorte: inserisci il nome della coorte, che identifica il batch come uno di una serie di workload ricorrenti. L'ottimizzazione automatica viene applicata al secondo e ai successivi workload che sono inviati con questo nome di coorte. Ad esempio, specifica daily_sales_aggregation come nome della coorte per un workload batch pianificato che esegue un'attività di aggregazione delle vendite giornaliere.

  4. Compila le altre sezioni della pagina Crea batch in base alle esigenze, quindi fai clic Invia. Per saperne di più su questi campi, consulta Inviare un workload batch.

gcloud

Per attivare l'ottimizzazione automatica di Serverless per Apache Spark a ogni invio di un workload batch ricorrente, esegui il seguente comando della gcloud CLI gcloud dataproc batches submit localmente in una finestra del terminale o in Cloud Shell.

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

Sostituisci quanto segue:

  • COMMAND: il tipo di workload Spark, ad esempio Spark, PySpark, Spark-Sql o Spark-R.
  • REGION: la regione in cui verrà eseguito il workload batch.
  • COHORT: il nome della coorte, che identifica il batch come uno di una serie di workload ricorrenti. L'ottimizzazione automatica viene applicata al secondo e ai successivi workload che sono inviati con questo nome di coorte. Ad esempio, specifica daily_sales_aggregation come nome della coorte per un workload batch pianificato che esegue un'attività di aggregazione delle vendite giornaliere.
  • --autotuning-scenarios=auto: attiva l'ottimizzazione automatica.

API

Per attivare l'ottimizzazione automatica di Serverless per Apache Spark a ogni invio di un workload batch ricorrente, invia una batches.create che includa i seguenti campi:

  • RuntimeConfig.cohort: il nome della coorte, che identifica il batch come uno di una serie di workload ricorrenti. L'ottimizzazione automatica viene applicata al secondo e ai successivi workload inviati con questo nome di coorte. Ad esempio, specifica daily_sales_aggregation come nome della coorte per un workload batch pianificato che esegue un'attività di aggregazione delle vendite giornaliere task.
  • AutotuningConfig.scenarios: specifica AUTO per attivare l'ottimizzazione automatica sul workload batch Spark.

Esempio:

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

Java

Prima di provare questo esempio, segui le istruzioni di configurazione Java nella guida rapida di Serverless per Apache Spark per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'APIJava di Serverless per Apache Spark.

Per eseguire l'autenticazione in Serverless per Apache Spark, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

Per attivare l'ottimizzazione automatica di Serverless per Apache Spark a ogni invio di un workload batch ricorrente, chiama BatchControllerClient.createBatch con un CreateBatchRequest che includa i seguenti campi:

  • Batch.RuntimeConfig.cohort: il nome della coorte, che identifica il batch come uno di una serie di workload ricorrenti. L'ottimizzazione automatica viene applicata al secondo e ai successivi workload inviati con questo nome di coorte. Ad esempio, puoi specificare daily_sales_aggregation come nome della coorte per un workload batch pianificato che esegue un'attività di aggregazione delle vendite giornaliere.
  • Batch.RuntimeConfig.AutotuningConfig.scenarios: specifica AUTO per attivare l'ottimizzazione automatica sul workload batch Spark.

Esempio:

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

Per utilizzare l'API, devi utilizzare la libreria client google-cloud-dataproc versione 4.43.0 o successive. Puoi utilizzare una delle seguenti configurazioni per aggiungere la libreria al tuo progetto.

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

Prima di provare questo esempio, segui le istruzioni di configurazione Python nella guida rapida di Serverless per Apache Spark per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Python di Serverless per Apache Spark.

Per eseguire l'autenticazione in Serverless per Apache Spark, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

Per attivare l'ottimizzazione automatica di Serverless per Apache Spark a ogni invio di un workload batch ricorrente, chiama BatchControllerClient.create_batch con un batch che includa i seguenti campi:

  • batch.runtime_config.cohort: il nome della coorte, che identifica il batch come uno di una serie di workload ricorrenti. L'ottimizzazione automatica viene applicata al secondo e ai successivi workload inviati con questo nome di coorte. Ad esempio, puoi specificare daily_sales_aggregation come nome della coorte per un workload batch pianificato che esegue un'attività di aggregazione delle vendite giornaliere.
  • batch.runtime_config.autotuning_config.scenarios: specifica AUTO per attivare l'ottimizzazione automatica sul workload batch Spark.

Esempio:

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

Per utilizzare l'API, devi utilizzare la libreria client google-cloud-dataproc versione 5.10.1 o successive. Per aggiungerla al tuo progetto, puoi utilizzare il seguente requisito:

google-cloud-dataproc>=5.10.1

Airflow

Anziché inviare manualmente ogni coorte batch ottimizzata automaticamente, puoi utilizzare Airflow per pianificare l'invio di ogni workload batch ricorrente. Per farlo, chiama BatchControllerClient.create_batch con un batch che includa i seguenti campi:

  • batch.runtime_config.cohort: il nome della coorte, che identifica il batch come uno di una serie di workload ricorrenti. L'ottimizzazione automatica viene applicata al secondo e ai successivi workload inviati con questo nome di coorte. Ad esempio, puoi specificare daily_sales_aggregation come nome della coorte per un workload batch pianificato che esegue un'attività di aggregazione delle vendite giornaliere.
  • batch.runtime_config.autotuning_config.scenarios: specifica AUTO per attivare l'ottimizzazione automatica sul workload batch Spark.

Esempio:

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

Per utilizzare l'API, devi utilizzare la libreria client google-cloud-dataproc versione 5.10.1 o successive. Puoi utilizzare il seguente requisito dell'ambiente Airflow:

google-cloud-dataproc>=5.10.1

Per aggiornare il pacchetto in Cloud Composer, consulta Installare le dipendenze Python per Cloud Composer .

Visualizzare le modifiche dell'ottimizzazione automatica

Per visualizzare le modifiche dell'ottimizzazione automatica di Serverless per Apache Spark a un workload batch, esegui il gcloud dataproc batches describe comando.

Esempio: l'output di gcloud dataproc batches describe è simile al seguente:

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

Puoi visualizzare le ultime modifiche dell'ottimizzazione automatica applicate a un workload in esecuzione, completato o non riuscito nella pagina Dettagli batch nellaconsole, Google Cloud nella scheda Riepilogo.

Riquadro di riepilogo dell&#39;ottimizzazione automatica.

Prezzi

L'ottimizzazione automatica di Serverless per Apache Spark è offerta durante l'anteprima privata senza costi aggiuntivi. Si applicano i prezzi standard di Serverless per Apache Spark.