Ottimizzazione automatica dei workload Spark

Questo documento fornisce informazioni sull'ottimizzazione automatica dei carichi di lavoro Spark. L'ottimizzazione di un carico di lavoro Spark per le prestazioni e la resilienza può essere complessa a causa del numero di opzioni di configurazione di Spark e della difficoltà di valutare l'impatto di queste opzioni su un carico di lavoro. L'ottimizzazione automatica di Dataproc Serverless offre un'alternativa alla configurazione manuale del carico di lavoro applicando automaticamente le impostazioni di configurazione di Spark a un carico di lavoro Spark ricorrente in base alle best practice di ottimizzazione di Spark e a un'analisi delle esecuzioni del carico di lavoro.

Registrati per l'ottimizzazione automatica di Dataproc Serverless

Per registrarti per accedere alla release di anteprima dell'ottimizzazione automatica di Dataproc Serverless descritta in questa pagina, compila e invia il modulo di registrazione di Gemini in BigQuery Preview. Una volta approvato il modulo, i progetti elencati al suo interno hanno accesso alle funzionalità di anteprima.

Vantaggi

L'ottimizzazione automatica di Dataproc Serverless può offrire i seguenti vantaggi:

  • Miglioramento delle prestazioni: ottimizzazione per aumentare le prestazioni
  • Ottimizzazione più rapida: configurazione automatica per evitare test di configurazione manuale che richiedono molto tempo
  • Maggiore resilienza: allocazione automatica della memoria per evitare errori correlati alla memoria

Limitazioni

L'ottimizzazione automatica di Dataproc Serverless presenta le seguenti limitazioni:

  • L'ottimizzazione automatica viene calcolata e applicata alla seconda esecuzione e alle esecuzioni successive di un workload. La prima esecuzione di un carico di lavoro ricorrente non viene ottimizzata automaticamente perché l'ottimizzazione automatica di Dataproc Serverless utilizza la cronologia del carico di lavoro per l'ottimizzazione.
  • Il ridimensionamento della memoria non è supportato.
  • L'ottimizzazione automatica non viene applicata in modo retroattivo ai carichi di lavoro in esecuzione, ma solo ai nuovi gruppi di carichi di lavoro inviati.

Coorti di ottimizzazione automatica

L'ottimizzazione automatica viene applicata alle esecuzioni ricorrenti di un carico di lavoro batch, chiamate coorti. Il nome della coorte specificato quando invii un carico di lavoro lo identifica come una delle esecuzioni successive del carico di lavoro ricorrente. Ti consigliamo di utilizzare nomi di coorte che descrivono il tipo di workload o che altrimenti aiutano a identificare le esecuzioni di un workload all'interno di un workload ricorrente. Ad esempio, specifica daily_sales_aggregation come nome della coorte per un carico di lavoro pianificato che esegue un'attività di aggregazione giornaliera delle vendite.

Scenari di ottimizzazione automatica

Applica l'ottimizzazione automatica di Dataproc Serverless al tuo carico di lavoro selezionando uno o più dei seguenti scenari di ottimizzazione automatica:

  • MEMORY: ottimizza automaticamente l'allocazione della memoria Spark per prevedere ed evitare potenziali errori di esaurimento della memoria del carico di lavoro. Correggi un workload che non è riuscito in precedenza a causa di un errore di esaurimento della memoria (OOM).
  • SCALING: ottimizza automaticamente le impostazioni di configurazione della scalabilità automatica di Spark.
  • BROADCAST_HASH_JOIN: ottimizza automaticamente le impostazioni di configurazione di Spark per ottimizzare le prestazioni delle unioni broadcast SQL.

Prezzi

L'ottimizzazione automatica di Dataproc Serverless è offerta durante l'anteprima senza costi aggiuntivi. Vengono applicati i prezzi standard di Dataproc Serverless.

Disponibilità a livello di area geografica

Puoi utilizzare l'ottimizzazione automatica di Dataproc Serverless con i batch inviati nelle regioni Compute Engine disponibili.

Utilizzare l'ottimizzazione automatica di Dataproc Serverless

Puoi attivare l'ottimizzazione automatica di Dataproc Serverless su un workload utilizzando la console Google Cloud, Google Cloud CLI o l'API Dataproc.

Console

Per attivare l'ottimizzazione automatica di Dataproc Serverless su ogni invio di un carico di lavoro batch ricorrente, svolgi i seguenti passaggi:

  1. Nella console Google Cloud, vai alla pagina Batch di Dataproc.

    Vai alla pagina Batch di Dataproc

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

  3. Nella sezione Contenitore, compila i seguenti campi per il tuo carico di lavoro Spark:

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

    • Scenari di ottimizzazione automatica:uno o più scenari di ottimizzazione automatica da utilizzare per ottimizzare il carico di lavoro, ad esempio BROADCAST_HASH_JOIN, MEMORY e SCALING. Puoi modificare la selezione dello scenario con ogni invio della coorte batch.

  4. Compila le altre sezioni della pagina Crea batch, se necessario, poi fai clic su Invia. Per ulteriori informazioni su questi campi, consulta Inviare un carico di lavoro batch.

gcloud

Per attivare l'ottimizzazione automatica di Dataproc Serverless su ogni invio di un carico di lavoro batch ricorrente, esegui il seguente comando 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=SCENARIOS \
    other arguments ...

Sostituisci quanto segue:

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

  • SCENARIOS: uno o più scenari di ottimizzazione automatica separati da virgola da utilizzare per ottimizzare il carico di lavoro, ad esempio --autotuning-scenarios=MEMORY,SCALING. Puoi modificare l'elenco di scenari con ogni invio della coorte batch.

API

Per attivare l'ottimizzazione automatica di Dataproc Serverless a ogni invio di un carico di lavoro batch ricorrente, invia una richiesta batches.create che includa i seguenti campi:

  • RuntimeConfig.cohort: il nome della coorte, che identifica il batch come una di una serie di carichi di lavoro ricorrenti. L'ottimizzazione automatica viene applicata al secondo e ai successivi carichi di lavoro inviati con questo nome coorte. Ad esempio, specifica daily_sales_aggregation come nome della coorte per un carico di lavoro pianificato che esegue un'attività di aggregazione giornaliera delle vendite.
  • AutotuningConfig.scenarios: uno o più scenari di ottimizzazione automatica da utilizzare per ottimizzare il carico di lavoro, ad esempio BROADCAST_HASH_JOIN, MEMORY e SCALING. Puoi modificare l'elenco di scenari con ogni invio della coorte batch.

Esempio:

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

Java

Prima di provare questo esempio, segui le istruzioni di configurazione Java riportate nella guida rapida all'utilizzo di Dataproc Serverless con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Dataproc Serverless Java.

Per autenticarti a Dataproc Serverless, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

Per attivare l'ottimizzazione automatica di Dataproc Serverless a ogni invio di un carico di lavoro batch ricorrente, chiama BatchControllerClient.createBatch con un CreateBatchRequest che include i seguenti campi:

  • Batch.RuntimeConfig.cohort: il nome della cohort, che identifica il batch come una di una serie di carichi di lavoro ricorrenti. L'ottimizzazione automatica viene applicata al secondo e ai successivi carichi di lavoro inviati con questo nome coorte. Ad esempio, potresti specificare daily_sales_aggregation come nome della coorte per un carico di lavoro pianificato che esegue un'attività di aggregazione delle vendite giornaliere.
  • Batch.RuntimeConfig.AutotuningConfig.scenarios: uno o più scenari di ottimizzazione automatica da utilizzare per ottimizzare il carico di lavoro, ad esempio BROADCAST_HASH_JOIN, MEMORY, SCALING. Puoi modificare l'elenco di scenari con ogni invio della coorte batch. Per l'elenco completo degli scenari, consulta la documentazione Javadoc di AutotuningConfig.Scenario.

Esempio:

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

Per utilizzare l'API, devi utilizzare la versione 4.43.0 o successiva della libreria client google-cloud-dataproc. Puoi utilizzare una delle seguenti configurazioni per aggiungere la libreria al 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 riportate nella guida rapida all'utilizzo di Dataproc Serverless con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Dataproc Serverless Python.

Per autenticarti a Dataproc Serverless, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

Per attivare l'ottimizzazione automatica di Dataproc Serverless a ogni invio di un carico di lavoro batch ricorrente, chiama BatchControllerClient.create_batch con un Batch che include i seguenti campi:

  • batch.runtime_config.cohort: il nome della cohort, che identifica il batch come una di una serie di carichi di lavoro ricorrenti. L'ottimizzazione automatica viene applicata al secondo e ai successivi carichi di lavoro inviati con questo nome coorte. Ad esempio, potresti specificare daily_sales_aggregation come nome della coorte per un carico di lavoro pianificato che esegue un'attività di aggregazione delle vendite giornaliere.
  • batch.runtime_config.autotuning_config.scenarios: uno o più scenari di ottimizzazione automatica da utilizzare per ottimizzare il carico di lavoro, ad esempio BROADCAST_HASH_JOIN, MEMORY,SCALING. Puoi modificare l'elenco di scenari con ogni invio della coorte batch. Per l'elenco completo degli scenari, consulta la documentazione di riferimento relativa agli scenari.

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

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 versione 5.10.1 o successiva della libreria client google-cloud-dataproc. Per aggiungerlo al tuo progetto, puoi utilizzare il seguente requisito:

google-cloud-dataproc>=5.10.1

Airflow

Per attivare l'ottimizzazione automatica di Dataproc Serverless a ogni invio di un carico di lavoro batch ricorrente, chiama BatchControllerClient.create_batch con un Batch che include i seguenti campi:

  • batch.runtime_config.cohort: il nome della cohort, che identifica il batch come una di una serie di carichi di lavoro ricorrenti. L'ottimizzazione automatica viene applicata al secondo e ai successivi carichi di lavoro inviati con questo nome coorte. Ad esempio, potresti specificare daily_sales_aggregation come nome della coorte per un carico di lavoro pianificato che esegue un'attività di aggregazione delle vendite giornaliere.
  • batch.runtime_config.autotuning_config.scenarios: uno o più scenari di ottimizzazione automatica da utilizzare per ottimizzare il carico di lavoro, ad esempio BROADCAST_HASH_JOIN, MEMORY,SCALING. Puoi modificare l'elenco di scenari con ogni invio della coorte batch. Per l'elenco completo degli scenari, consulta la documentazione di riferimento relativa agli scenari.

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

Per utilizzare l'API, devi utilizzare la versione 5.10.1 o successiva della libreria client google-cloud-dataproc. 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 all'ottimizzazione automatica

Per visualizzare le modifiche apportate dall'ottimizzazione automatica di Dataproc Serverless a un carico di lavoro batch, esegui il comando gcloud dataproc batches describe.

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

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

Puoi visualizzare le ultime modifiche di ottimizzazione automatica applicate a un carico di lavoro in esecuzione, completato o non riuscito nella pagina Dettagli batch della console Google Cloud, nella scheda Investiga.

Riquadro di indagine sull&#39;ottimizzazione automatica.